jersey weblogic jax-rs weblogic12c jersey-2.0

jersey - Cómo aplicar interceptores y filtros a los servicios de descanso en Weblogic 12c



jax-rs weblogic12c (2)

Entiendo que Weblogic 12c v12.2.1 usa Jersey como una implementación de JAX-RS . Así que seguí las instrucciones en esta página, pero no he logrado declarar un interceptor, ya sea usando el enlace de nombre o enlace dinámico (es decir, más información en el enlace mencionado)

Mi aplicación está funcionando normalmente porque puedo llamar a los servicios de descanso, pero no puedo aplicar filtros o interceptores, nunca están involucrados en el proceso.

No javax.ws.rs.core.Application web.xml , todo lo que tengo es una clase javax.ws.rs.core.Application child

@ApplicationPath("rs") public class MyApp extends Application { private Set<Object> singletons = new HashSet<Object>(); private Set<Class<?>> empty = new HashSet<Class<?>>(); public MyApp() { singletons.add(new MyService()); } @Override public Set<Class<?>> getClasses() { return empty; } @Override public Set<Object> getSingletons() { return singletons; } }

Mi clase de servicio se ve así

@Path("") @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML }) public class MyService { private static final Logger log = Logger.getLogger(MyService.class); @GET @Path("login") public Status login(@QueryParam(USERNAME_PARAM) String username, @QueryParam(PASSWORD_PARAM) String password, @Context HttpServletRequest request) { return new Status(ServiceMessages.USER_AUTHENTICATION_SUCCESS); }

Tengo un valor @Path vacío porque no puedo excluirlo, ya he especificado mi ruta en la clase MyApp y no quiero especificar una ruta a esta clase.

Mi clase vinculante

import javax.ws.rs.container.DynamicFeature; import javax.ws.rs.container.ResourceInfo; import javax.ws.rs.core.FeatureContext; import com.mycompany.ws.filters.GZIPCompressor; public class GzipDynamicBinder implements DynamicFeature { @Override public void configure(ResourceInfo resourceInfo, FeatureContext context) { context.register(GZIPCompressor.class); } }

Mi clase de interceptor

import java.io.IOException; import java.util.zip.GZIPInputStream; import java.util.zip.GZIPOutputStream; import javax.ws.rs.WebApplicationException; import javax.ws.rs.ext.ReaderInterceptor; import javax.ws.rs.ext.ReaderInterceptorContext; import javax.ws.rs.ext.WriterInterceptor; import javax.ws.rs.ext.WriterInterceptorContext; public class GZIPCompressor implements WriterInterceptor, ReaderInterceptor { @Override public Object aroundReadFrom(ReaderInterceptorContext context) throws IOException, WebApplicationException { System.out.println(">>> Compression Reader <<<"); context.setInputStream(new GZIPInputStream(context.getInputStream())); return context.proceed(); } @Override public void aroundWriteTo(WriterInterceptorContext context) throws IOException, WebApplicationException { System.out.println(">>> Compressor Writer <<<"); context.setOutputStream(new GZIPOutputStream(context.getOutputStream())); context.proceed(); } }

Agradezco todas las respuestas, pero realmente me gustaría una respuesta que no tenga nada que ver con el archivo web.xml .


  1. La versión de Weblogic JAX-RS es 1.1 (no puedo encontrar el concepto de filtros o interceptores en ningún lado)
  2. La versión de Weblogic Jersey es 1.17 , y estaba haciendo referencia a la documentación de la última versión, que es 2.6 en este momento.