Jersey 1 ContainerResponseFilter

时间:2017-03-07 14:44:03

标签: jax-rs cdi jersey-2.0 weld jersey-1.0

我在共享库中有一个Jersey 1 ContainerResponseFilter,我通过在web.xml中指定此过滤器存在的包,在Jersey 1 Web服务中注册,例如。

<servlet>
    <servlet-name>ServletAdaptor</servlet-name>
    <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
    <init-param>
        <param-name>com.sun.jersey.config.property.packages</param-name>
        <param-value>
            com.xxx.utils.jersey
        </param-value>
    </init-param>
    <init-param>
        <param-name>com.sun.jersey.spi.container.ContainerResponseFilters</param-name>
        <param-value>com.xxx.utils.jersey.CrossDomainFilter</param-value>
    </init-param>
    <init-param>
        <param-name>jersey.config.server.provider.packages</param-name>
        <param-value>com.xxx.utils.jersey</param-value>
    </init-param>
    ...
</servlet>

我现在尝试在Jersey 2 Web服务中使用此共享库,而不是使用web.xml来配置Jersey使用带@ApplicationPath注释的类并扩展Jersey ResourceConfig。在这个类中,我没有在任何地方指定这个Jersey 1过滤器的包。

我得到的问题是因为这个Jersey 2 Web服务在战争中没有包含任何Jersey 1依赖项我在部署ClassNotFoundException

的Web服务期间获得了com.sun.jersey.spi.container.ContainerResponseFilter

以下是我如何创建配置

的示例
@ApplicationPath("/")
public class AppConfig extends ResourceConfig
{
    private static final String RESOURCE_PACKAGE = "com.xxx.services.rest";

    public AppConfig()
    {
        packages(RESOURCE_PACKAGE);
        register(ApiListingResource.class);
        register(SwaggerSerializers.class);

        BeanConfig beanConfig = new BeanConfig();
        beanConfig.setVersion("1.0.0");
        beanConfig.setResourcePackage(RESOURCE_PACKAGE);
        beanConfig.setSchemes(new String[]{"http"});
        beanConfig.setHost("localhost:7001");
        beanConfig.setBasePath("/usr/");
        beanConfig.setScan(true);
    }

}

有没有办法可以确保没有从共享库加载这个Jersey 1类,我可以明确地排除该包吗?

编辑:

更多的调查似乎暗示它与CDI有关,ContainerResponseFilter注释为@Producer。如果我从类中删除注释,那么我不再收到异常。

我使用的容器是weblogic 12.2.1,我认为它使用Weld作为其CDI提供程序。所以我创建了一个带有以下内容的beans.xml,如Weld documentation

这一点所示
<beans xmlns="http://java.sun.com/xml/ns/javaee" 
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
   xmlns:weld="http://jboss.org/schema/weld/beans">
   <weld:scan>
     <weld:exclude name="com.xxx.utils.jersey.**"/>
   </weld:scan>
 </beans>

但它似乎没有解决问题。有什么想法吗?

0 个答案:

没有答案