No serializer found for class io.smallrye.mutiny.operators.uni.UniOnItemTransform

71 views Asked by At

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
0

There are 0 answers