I'm trying to return a token in an API context in a reactive manner, but facing the exception:
Failed to serialize endpoint 'AuthenticationApi' method 'token' response. Double check method's return type or specify a custom mapper bean with qualifier 'endpointMapperFactory': com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class io.smallrye.mutiny.operators.uni.UniOnItemTransform and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS)
With the code:
@Inject
private final CurrentIdentityAssociation identityAssociation;
public Uni<String> token() {
return identityAssociation.getDeferredIdentity()
.onItem().transform(identity -> identity.getCredential(AccessTokenCredential.class))
.onItem().transform(tokkenCredential -> tokkenCredential.getToken());
}
this is part of a larger context class:
package net.shamil.dcc.api;
import java.util.List;
import com.vaadin.flow.server.auth.AnonymousAllowed;
import dev.hilla.BrowserCallable;
import dev.hilla.Nonnull;
import io.quarkus.oidc.AccessTokenCredential;
import io.quarkus.oidc.UserInfo;
import io.quarkus.security.identity.CurrentIdentityAssociation;
import io.smallrye.mutiny.Uni;
import lombok.AllArgsConstructor;
import net.shamil.dcc.authentication.OidcUser;
import net.shamil.dcc.authentication.SingleSignOnContext;
import net.shamil.dcc.authentication.SingleSignOnData;
@BrowserCallable
@AnonymousAllowed
@AllArgsConstructor
public class AuthenticationApi {
private final SingleSignOnContext context;
private final UserInfo userInfo;
private final CurrentIdentityAssociation identityAssociation;
public @Nonnull SingleSignOnData fetchAll() {
return context.getSingleSignOnData();
}
// public String token() {
// return Optional.ofNullable(securityIdentity.getCredential(AccessTokenCredential.class)).map(token -> token.getToken()).orElse(null);
// }i
public Uni<String> token() {
return identityAssociation.getDeferredIdentity()
.onItem().transform(identity -> identity.getCredential(AccessTokenCredential.class))
.onItem().transform(accessTokenCredential -> accessTokenCredential.getToken());
}
public @Nonnull List<@Nonnull String> getRegisteredProviders() {
return context.getRegisteredProviders();
}
public OidcUser getAuthenticatedUser() {
return context.getSingleSignOnData().isAuthenticated() ? OidcUser.fromUserInfo(userInfo) : null;
}
}
In my pom.xml I have the dependencies:
quarkus-resteasy-reactive
quarkus-resteasy-reactive-jackson
quarkus-oidc-client-reactive-filter