Search in sources :

Example 1 with Serializer

use of io.servicetalk.serializer.api.Serializer in project servicetalk by apple.

the class JacksonSerializerMessageBodyReaderWriter method writeTo.

@SuppressWarnings({ "rawtypes", "unchecked" })
@Override
public void writeTo(final Object o, final Class<?> type, final Type genericType, final Annotation[] annotations, final MediaType mediaType, final MultivaluedMap<String, Object> httpHeaders, final OutputStream entityStream) throws WebApplicationException {
    final boolean oldJacksonProviderPresent = providers.getContextResolver(JacksonSerializationProvider.class, mediaType) != null;
    if (oldJacksonProviderPresent) {
        // FIXME 0.43 - Remove deprecation
        writeToOld(o, type, genericType, annotations, mediaType, httpHeaders, entityStream);
        return;
    }
    final BufferAllocator allocator = ctxRefProvider.get().get().executionContext().bufferAllocator();
    final Publisher<Buffer> bufferPublisher;
    if (o instanceof Single) {
        final Class<?> clazz = genericType instanceof Class ? (Class) genericType : getSourceClass(genericType);
        Serializer serializer = getJacksonSerializerFactory(mediaType).serializerDeserializer(clazz);
        bufferPublisher = ((Single) o).map(t -> serializer.serialize(t, allocator)).toPublisher();
    } else if (o instanceof Publisher) {
        final Class<?> clazz = genericType instanceof Class ? (Class) genericType : getSourceClass(genericType);
        StreamingSerializer serializer = getJacksonSerializerFactory(mediaType).streamingSerializerDeserializer(clazz);
        bufferPublisher = serializer.serialize((Publisher) o, allocator);
    } else {
        Serializer serializer = getJacksonSerializerFactory(mediaType).serializerDeserializer(o.getClass());
        bufferPublisher = Publisher.from(serializer.serialize(o, allocator));
    }
    setResponseBufferPublisher(bufferPublisher, requestCtxProvider.get());
}
Also used : Buffer(io.servicetalk.buffer.api.Buffer) Single(io.servicetalk.concurrent.api.Single) JacksonSerializationProvider(io.servicetalk.data.jackson.JacksonSerializationProvider) Publisher(io.servicetalk.concurrent.api.Publisher) RequestProperties.setResponseBufferPublisher(io.servicetalk.http.router.jersey.internal.RequestProperties.setResponseBufferPublisher) StreamingSerializer(io.servicetalk.serializer.api.StreamingSerializer) BufferAllocator(io.servicetalk.buffer.api.BufferAllocator) Serializer(io.servicetalk.serializer.api.Serializer) StreamingSerializer(io.servicetalk.serializer.api.StreamingSerializer) DefaultSerializer(io.servicetalk.serialization.api.DefaultSerializer)

Example 2 with Serializer

use of io.servicetalk.serializer.api.Serializer in project servicetalk by apple.

the class JacksonSerializerMessageBodyReaderWriter method readFromOld.

// FIXME 0.43 - Remove this branch when deprecation go away.
@Deprecated
private Object readFromOld(final Class<Object> type, final Type genericType, final Annotation[] annotations, final MediaType mediaType, final MultivaluedMap<String, String> httpHeaders, final InputStream entityStream) throws WebApplicationException {
    final io.servicetalk.serialization.api.Serializer serializer = getSerializer(mediaType);
    final ExecutionContext<?> executionContext = ctxRefProvider.get().get().executionContext();
    final BufferAllocator allocator = executionContext.bufferAllocator();
    final int contentLength = requestCtxProvider.get().getLength();
    if (Single.class.isAssignableFrom(type)) {
        return handleEntityStream(entityStream, allocator, (p, a) -> deserializeOld(p, serializer, getSourceClass(genericType), contentLength, a), (is, a) -> new SingleSource<>(deserializeOld(toBufferPublisher(is, a), serializer, getSourceClass(genericType), contentLength, a)));
    } else if (Publisher.class.isAssignableFrom(type)) {
        return handleEntityStream(entityStream, allocator, (p, a) -> serializer.deserialize(p, getSourceClass(genericType)), (is, a) -> new PublisherSource<>(serializer.deserialize(toBufferPublisher(is, a), getSourceClass(genericType))));
    }
    return handleEntityStream(entityStream, allocator, (p, a) -> deserializeObjectOld(p, serializer, type, contentLength, a), (is, a) -> deserializeObjectOld(toBufferPublisher(is, a), serializer, type, contentLength, a));
}
Also used : ENTITY_CODER(javax.ws.rs.Priorities.ENTITY_CODER) SingleSource(io.servicetalk.http.router.jersey.internal.SourceWrappers.SingleSource) Provider(javax.inject.Provider) Produces(javax.ws.rs.Produces) Publisher(io.servicetalk.concurrent.api.Publisher) Deserializer(io.servicetalk.serializer.api.Deserializer) SerializationException(io.servicetalk.serializer.api.SerializationException) MessageBodyWriter(javax.ws.rs.ext.MessageBodyWriter) RequestProperties.setResponseBufferPublisher(io.servicetalk.http.router.jersey.internal.RequestProperties.setResponseBufferPublisher) WILDCARD(javax.ws.rs.core.MediaType.WILDCARD) ContainerRequestContext(javax.ws.rs.container.ContainerRequestContext) ResourceMethod(org.glassfish.jersey.server.model.ResourceMethod) ContextResolver(javax.ws.rs.ext.ContextResolver) MediaType(javax.ws.rs.core.MediaType) Ref(org.glassfish.jersey.internal.util.collection.Ref) Consumes(javax.ws.rs.Consumes) BadRequestException(javax.ws.rs.BadRequestException) NoSuchElementException(java.util.NoSuchElementException) ExtendedUriInfo(org.glassfish.jersey.server.ExtendedUriInfo) BufferPublisherInputStream.handleEntityStream(io.servicetalk.http.router.jersey.internal.BufferPublisherInputStream.handleEntityStream) ConnectionContext(io.servicetalk.transport.api.ConnectionContext) OutputStream(java.io.OutputStream) Serializer(io.servicetalk.serializer.api.Serializer) StreamingSerializer(io.servicetalk.serializer.api.StreamingSerializer) Context(javax.ws.rs.core.Context) Providers(javax.ws.rs.ext.Providers) Single(io.servicetalk.concurrent.api.Single) DefaultSerializer(io.servicetalk.serialization.api.DefaultSerializer) FutureUtils.awaitResult(io.servicetalk.concurrent.internal.FutureUtils.awaitResult) JacksonSerializerFactory(io.servicetalk.data.jackson.JacksonSerializerFactory) MultivaluedMap(javax.ws.rs.core.MultivaluedMap) Priority(javax.annotation.Priority) Buffer(io.servicetalk.buffer.api.Buffer) JacksonSerializationProvider(io.servicetalk.data.jackson.JacksonSerializationProvider) HttpHeaders(javax.ws.rs.core.HttpHeaders) ParameterizedType(java.lang.reflect.ParameterizedType) ExecutionContext(io.servicetalk.transport.api.ExecutionContext) Type(java.lang.reflect.Type) BufferAllocator(io.servicetalk.buffer.api.BufferAllocator) Annotation(java.lang.annotation.Annotation) WebApplicationException(javax.ws.rs.WebApplicationException) APPLICATION_JSON_TYPE(javax.ws.rs.core.MediaType.APPLICATION_JSON_TYPE) Publisher.fromInputStream(io.servicetalk.concurrent.api.Publisher.fromInputStream) PublisherSource(io.servicetalk.http.router.jersey.internal.SourceWrappers.PublisherSource) InputStream(java.io.InputStream) MessageBodyReader(javax.ws.rs.ext.MessageBodyReader) PublisherSource(io.servicetalk.http.router.jersey.internal.SourceWrappers.PublisherSource) Publisher(io.servicetalk.concurrent.api.Publisher) RequestProperties.setResponseBufferPublisher(io.servicetalk.http.router.jersey.internal.RequestProperties.setResponseBufferPublisher) BufferAllocator(io.servicetalk.buffer.api.BufferAllocator)

Aggregations

Buffer (io.servicetalk.buffer.api.Buffer)2 BufferAllocator (io.servicetalk.buffer.api.BufferAllocator)2 Publisher (io.servicetalk.concurrent.api.Publisher)2 Single (io.servicetalk.concurrent.api.Single)2 JacksonSerializationProvider (io.servicetalk.data.jackson.JacksonSerializationProvider)2 RequestProperties.setResponseBufferPublisher (io.servicetalk.http.router.jersey.internal.RequestProperties.setResponseBufferPublisher)2 DefaultSerializer (io.servicetalk.serialization.api.DefaultSerializer)2 Serializer (io.servicetalk.serializer.api.Serializer)2 StreamingSerializer (io.servicetalk.serializer.api.StreamingSerializer)2 Publisher.fromInputStream (io.servicetalk.concurrent.api.Publisher.fromInputStream)1 FutureUtils.awaitResult (io.servicetalk.concurrent.internal.FutureUtils.awaitResult)1 JacksonSerializerFactory (io.servicetalk.data.jackson.JacksonSerializerFactory)1 BufferPublisherInputStream.handleEntityStream (io.servicetalk.http.router.jersey.internal.BufferPublisherInputStream.handleEntityStream)1 PublisherSource (io.servicetalk.http.router.jersey.internal.SourceWrappers.PublisherSource)1 SingleSource (io.servicetalk.http.router.jersey.internal.SourceWrappers.SingleSource)1 Deserializer (io.servicetalk.serializer.api.Deserializer)1 SerializationException (io.servicetalk.serializer.api.SerializationException)1 ConnectionContext (io.servicetalk.transport.api.ConnectionContext)1 ExecutionContext (io.servicetalk.transport.api.ExecutionContext)1 InputStream (java.io.InputStream)1