Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jersey 如何将拦截器和过滤器应用于Weblogic 12c上的restful服务_Jersey_Weblogic_Jax Rs_Weblogic12c_Jersey 2.0 - Fatal编程技术网

Jersey 如何将拦截器和过滤器应用于Weblogic 12c上的restful服务

Jersey 如何将拦截器和过滤器应用于Weblogic 12c上的restful服务,jersey,weblogic,jax-rs,weblogic12c,jersey-2.0,Jersey,Weblogic,Jax Rs,Weblogic12c,Jersey 2.0,我知道Weblogic 12c v12.2.1使用Jersey作为JAX-RS实现。因此,我按照上的说明进行了操作,但无论是使用名称绑定还是动态绑定(即,所述链接中的更多信息),我都没有成功声明拦截器 我的应用程序工作正常,因为我实际上可以调用restful服务,但我不能应用过滤器或拦截器,它们从来没有参与过这个过程 我根本没有编辑web.xml,我只有一个javax.ws.rs.core.Application子类 @ApplicationPath("rs") public class MyA

我知道Weblogic 12c v12.2.1使用Jersey作为JAX-RS实现。因此,我按照上的说明进行了操作,但无论是使用名称绑定还是动态绑定(即,所述链接中的更多信息),我都没有成功声明拦截器

我的应用程序工作正常,因为我实际上可以调用restful服务,但我不能应用过滤器或拦截器,它们从来没有参与过这个过程

我根本没有编辑web.xml,我只有一个
javax.ws.rs.core.Application
子类

@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;
    }
}
我有一个空的
@Path
值,因为我不能排除它,我已经在MyApp类中指定了我的路径,我不想指定该类的路径

我的装订课

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);
    }

}
我的拦截器类

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();
    }

}
import java.io.IOException;
导入java.util.zip.gzip输入流;
导入java.util.zip.GZIPOutputStream;
导入javax.ws.rs.WebApplicationException;
导入javax.ws.rs.ext.ReaderInterceptor;
导入javax.ws.rs.ext.ReaderInterceptorContext;
导入javax.ws.rs.ext.WriterInterceptor;
导入javax.ws.rs.ext.WriterInterceptorContext;
公共类GZIPCompressor实现WriterInterceptor、ReaderInterceptor{
@凌驾
ReadFrom周围的公共对象(ReaderInterceptorContext上下文)引发IOException、WebApplicationException{
System.out.println(“>>>压缩读取器压缩写入器
  • WeblogicJAX-RS版本是1.1(我在任何地方都找不到过滤器或拦截器的概念)
  • WeblogicJersey版本是1.17,我参考了最新版本的文档,目前是2.6

  • 我认为这里缺少的是GZIPCompressor类中的@Provider注释。添加该注释应确保侦听器被调用。
    查看这篇博客文章,了解应用拦截器的详细步骤-

    这是如何回答这个问题的?
    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();
        }
    
    }