在Tomcat 8或Jetty 9

时间:2018-01-21 14:11:53

标签: tomcat jersey jetty cdi weld

我在使用jersey 2.2.6和焊接2.4.6-Final

部署webapp时遇到以下错误
Caused by: java.lang.NoSuchMethodError: org.jboss.weld.util.Preconditions.checkNotNull(Ljava/lang/Object;)V
        at org.jboss.weld.util.collections.ImmutableHashSet.<init>(ImmutableHashSet.java:78)
        at org.jboss.weld.util.collections.ImmutableSet.from(ImmutableSet.java:176)
        at org.jboss.weld.util.collections.ImmutableSet.access$100(ImmutableSet.java:43)
        at org.jboss.weld.util.collections.ImmutableSet$BuilderImpl.build(ImmutableSet.java:161)
        at org.jboss.weld.environment.servlet.WeldServletLifecycle.createDeployment(WeldServletLifecycle.java:295)
        at org.jboss.weld.environment.servlet.WeldServletLifecycle.initialize(WeldServletLifecycle.java:163)
        at org.jboss.weld.environment.servlet.EnhancedListener.onStartup(EnhancedListener.java:62)
        at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5196)
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
        ...

我可以清楚地看到该方法存在于所述类中,但无法理解错误发生的原因。

以下是pom.xml的相关摘录

    <dependency>
        <groupId>org.glassfish.jersey.core</groupId>
        <artifactId>jersey-server</artifactId>
    </dependency>
    <dependency>
        <groupId>org.glassfish.jersey.containers</groupId>
        <artifactId>jersey-container-servlet</artifactId>
    </dependency>
    <dependency>
        <groupId>org.glassfish.jersey.containers</groupId>
        <artifactId>jersey-container-servlet-core</artifactId>
    </dependency>

    <dependency>
        <groupId>org.glassfish.jersey.containers</groupId>
        <artifactId>jersey-container-jetty-servlet</artifactId>
    </dependency>

    <dependency>
        <groupId>org.glassfish.jersey.core</groupId>
        <artifactId>jersey-common</artifactId>
    </dependency>
    <dependency>
        <groupId>org.glassfish.jersey.media</groupId>
        <artifactId>jersey-media-json-jackson</artifactId>
    </dependency>
     <dependency>
            <groupId>org.glassfish.jersey.inject</groupId>
            <artifactId>jersey-hk2</artifactId>
    </dependency> 
    <dependency>
        <groupId>org.glassfish.hk2.external</groupId>
        <artifactId>javax.inject</artifactId>
        <version>2.5.0-b60</version>
    </dependency>
    <dependency>
        <groupId>org.jboss</groupId>
        <artifactId>jandex</artifactId>
        <version>2.0.4.Final</version>
    </dependency>
    <dependency>
        <groupId>javax.ws.rs</groupId>
        <artifactId>javax.ws.rs-api</artifactId>
        <version>2.1</version>
    </dependency> 

    <dependency>
        <groupId>org.glassfish.jersey.ext.cdi</groupId>
        <artifactId>jersey-weld2-se</artifactId>
    </dependency>
     <dependency>
        <groupId>org.glassfish.jersey.ext.cdi</groupId>
        <artifactId>jersey-cdi1x</artifactId>
        <exclusions>
            <exclusion> 
                <groupId>javax.enterprise</groupId>
                <artifactId>cdi-api</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.glassfish.jersey.ext.cdi</groupId>
        <artifactId>jersey-cdi1x-servlet</artifactId>
        <exclusions>
            <exclusion> 
                <groupId>javax.enterprise</groupId>
                <artifactId>cdi-api</artifactId>
            </exclusion>
        </exclusions> 
    </dependency>

    <dependency>
        <groupId>org.jboss.weld.servlet</groupId>
        <artifactId>weld-servlet</artifactId>
        <version>2.4.6.Final</version>
    </dependency>


    <dependency>
        <groupId>javax.enterprise</groupId>
        <artifactId>cdi-api</artifactId>
        <version>1.2</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.1.0</version>
        <type>jar</type>
        <scope>provided</scope>
    </dependency>

这是我的web.xml

<servlet>
        <servlet-name>PIIApplication</servlet-name>
        <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
        <init-param>
            <param-name>javax.ws.rs.Application</param-name>
            <param-value>com.example.project.RESTService</param-value>
         </init-param>
     </servlet>

      <servlet-mapping>
        <servlet-name>PIIApplication</servlet-name>
        <url-pattern>/rest/*</url-pattern>
      </servlet-mapping>
    <listener>
        <listener-class>org.jboss.weld.environment.servlet.Listener</listener-class>
    </listener>


    <resource-env-ref>
        <description>Object factory for the CDI Bean Manager</description>
        <resource-env-ref-name>BeanManager</resource-env-ref-name>
        <resource-env-ref-type>
            javax.enterprise.inject.spi.BeanManager
        </resource-env-ref-type>
    </resource-env-ref>

在删除了焊接servlet(uber jar)依赖关系并明确添加了weld-core和weld-servlet-core,cdi-api-1.2依赖关系之后,我得到了一个不同的错误,如下所示:

java.lang.ArrayIndexOutOfBoundsException: 0
    org.glassfish.jersey.server.ExternalRequestScopeConfigurator.init(ExternalRequestScopeConfigurator.java:84)
    org.glassfish.jersey.server.ApplicationHandler.initialize(ApplicationHandler.java:359)
    org.glassfish.jersey.server.ApplicationHandler.lambda$initialize$1(ApplicationHandler.java:316)
    org.glassfish.jersey.internal.Errors.process(Errors.java:316)
    org.glassfish.jersey.internal.Errors.process(Errors.java:298)
    org.glassfish.jersey.internal.Errors.processWithException(Errors.java:256)
    org.glassfish.jersey.server.ApplicationHandler.initialize(ApplicationHandler.java:315)
    org.glassfish.jersey.server.ApplicationHandler.&lt;init&gt;(ApplicationHandler.java:282)
    org.glassfish.jersey.servlet.WebComponent.&lt;init&gt;(WebComponent.java:335)
    org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:178)
    org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:370)
    javax.servlet.GenericServlet.init(GenericServlet.java:158)
    org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:504)

有人可以解释一下我为什么会收到此错误或指向我正在运行的github链接(我尝试从jersey项目部署cdi-webapp示例,但它在tomcat中与HK2相关的错误失败)

谢谢, 桑巴

0 个答案:

没有答案