Search in sources :

Example 1 with ProvidersContextRetainer

use of org.jboss.resteasy.core.ProvidersContextRetainer in project resteasy by resteasy.

the class ClientResponse method readFrom.

// this is synchronized in conjunction with finalize to protect against premature finalize called by the GC
@Override
protected synchronized <T> Object readFrom(Class<T> type, Type genericType, MediaType media, Annotation[] annotations) {
    Type useGeneric = genericType == null ? type : genericType;
    Class<?> useType = type;
    media = media == null ? MediaType.WILDCARD_TYPE : media;
    annotations = annotations == null ? this.annotations : annotations;
    boolean isMarshalledEntity = false;
    if (type.equals(MarshalledEntity.class)) {
        isMarshalledEntity = true;
        ParameterizedType param = (ParameterizedType) useGeneric;
        useGeneric = param.getActualTypeArguments()[0];
        useType = Types.getRawType(useGeneric);
    }
    Providers current = ResteasyContext.getContextData(Providers.class);
    ResteasyContext.pushContext(Providers.class, configuration);
    Object obj = null;
    try {
        InputStream is = getEntityStream();
        if (is == null) {
            throw new IllegalStateException(Messages.MESSAGES.inputStreamWasEmpty());
        }
        if (isMarshalledEntity) {
            is = new InputStreamToByteArray(is);
        }
        ReaderInterceptor[] readerInterceptors = configuration.getReaderInterceptors(null, null);
        final Object finalObj;
        final long timestamp = tracingLogger.timestamp("RI_SUMMARY");
        AbstractReaderInterceptorContext context = new ClientReaderInterceptorContext(readerInterceptors, configuration.getProviderFactory(), useType, useGeneric, annotations, media, getStringHeaders(), is, properties, tracingLogger);
        try {
            finalObj = context.proceed();
            obj = finalObj;
        } finally {
            tracingLogger.logDuration("RI_SUMMARY", timestamp, context.getProcessedInterceptorCount());
        }
        if (isMarshalledEntity) {
            InputStreamToByteArray isba = (InputStreamToByteArray) is;
            final byte[] bytes = isba.toByteArray();
            return new MarshalledEntity<Object>() {

                @Override
                public byte[] getMarshalledBytes() {
                    return bytes;
                }

                @Override
                public Object getEntity() {
                    return finalObj;
                }
            };
        } else {
            return finalObj;
        }
    } catch (ProcessingException pe) {
        throw pe;
    } catch (Exception ex) {
        throw new ProcessingException(ex);
    } finally {
        if (!Publisher.class.isAssignableFrom(type) && !EventInput.class.isAssignableFrom(type)) {
            ResteasyContext.popContextData(Providers.class);
            if (current != null)
                ResteasyContext.pushContext(Providers.class, current);
            if (obj instanceof ProvidersContextRetainer)
                ((ProvidersContextRetainer) obj).setProviders(configuration);
        }
    }
}
Also used : AbstractReaderInterceptorContext(org.jboss.resteasy.core.interception.jaxrs.AbstractReaderInterceptorContext) ReaderInterceptor(jakarta.ws.rs.ext.ReaderInterceptor) ByteArrayInputStream(java.io.ByteArrayInputStream) InputStream(java.io.InputStream) MarshalledEntity(org.jboss.resteasy.spi.MarshalledEntity) ProvidersContextRetainer(org.jboss.resteasy.core.ProvidersContextRetainer) Providers(jakarta.ws.rs.ext.Providers) ClientReaderInterceptorContext(org.jboss.resteasy.core.interception.jaxrs.ClientReaderInterceptorContext) ProcessingException(jakarta.ws.rs.ProcessingException) IOException(java.io.IOException) ParameterizedType(java.lang.reflect.ParameterizedType) MediaType(jakarta.ws.rs.core.MediaType) ParameterizedType(java.lang.reflect.ParameterizedType) Type(java.lang.reflect.Type) InputStreamToByteArray(org.jboss.resteasy.util.InputStreamToByteArray) ProcessingException(jakarta.ws.rs.ProcessingException)

Aggregations

ProcessingException (jakarta.ws.rs.ProcessingException)1 MediaType (jakarta.ws.rs.core.MediaType)1 Providers (jakarta.ws.rs.ext.Providers)1 ReaderInterceptor (jakarta.ws.rs.ext.ReaderInterceptor)1 ByteArrayInputStream (java.io.ByteArrayInputStream)1 IOException (java.io.IOException)1 InputStream (java.io.InputStream)1 ParameterizedType (java.lang.reflect.ParameterizedType)1 Type (java.lang.reflect.Type)1 ProvidersContextRetainer (org.jboss.resteasy.core.ProvidersContextRetainer)1 AbstractReaderInterceptorContext (org.jboss.resteasy.core.interception.jaxrs.AbstractReaderInterceptorContext)1 ClientReaderInterceptorContext (org.jboss.resteasy.core.interception.jaxrs.ClientReaderInterceptorContext)1 MarshalledEntity (org.jboss.resteasy.spi.MarshalledEntity)1 InputStreamToByteArray (org.jboss.resteasy.util.InputStreamToByteArray)1