2015-10-14 57 views
0

我想在我的Junit测试中模拟http请求。所以我用Jadler Project。当我运行我的测试,并把我的http请求,我有这样的例外:Java Jadler:码头冲突

java.lang.SecurityException: class "javax.servlet.AsyncContext"'s signer information does not match signer information of other classes in the same package 
at java.lang.ClassLoader.checkCerts(ClassLoader.java:806) 
at java.lang.ClassLoader.preDefineClass(ClassLoader.java:487) 
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:625) 
at java.lang.ClassLoader.defineClass(ClassLoader.java:615) 
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141) 
at java.net.URLClassLoader.defineClass(URLClassLoader.java:283) 
at java.net.URLClassLoader.access$000(URLClassLoader.java:58) 
at java.net.URLClassLoader$1.run(URLClassLoader.java:197) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.net.URLClassLoader.findClass(URLClassLoader.java:190) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:306) 
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:247) 
at org.eclipse.jetty.server.AbstractHttpConnection.<init>(AbstractHttpConnection.java:162) 
at org.eclipse.jetty.server.AsyncHttpConnection.<init>(AsyncHttpConnection.java:50) 
at org.eclipse.jetty.server.nio.SelectChannelConnector.newConnection(SelectChannelConnector.java:285) 
at org.eclipse.jetty.server.nio.SelectChannelConnector$ConnectorSelectorManager.newConnection(SelectChannelConnector.java:325) 
at org.eclipse.jetty.server.nio.SelectChannelConnector.newEndPoint(SelectChannelConnector.java:272) 
at org.eclipse.jetty.server.nio.SelectChannelConnector$ConnectorSelectorManager.newEndPoint(SelectChannelConnector.java:331) 
at org.eclipse.jetty.io.nio.SelectorManager$SelectSet.createEndPoint(SelectorManager.java:842) 
at org.eclipse.jetty.io.nio.SelectorManager$SelectSet.doSelect(SelectorManager.java:496) 
at org.eclipse.jetty.io.nio.SelectorManager$1.run(SelectorManager.java:290) 
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608) 
at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:543) 
at java.lang.Thread.run(Thread.java:662) 

在开始的时候我的依赖性看起来,对于JAdler:

<dependency> 
    <groupId>net.jadler</groupId> 
    <artifactId>jadler-core</artifactId> 
    <version>1.1.2</version> 
    <scope>test</scope> 
</dependency> 

<dependency> 
    <groupId>net.jadler</groupId> 
    <artifactId>jadler-jetty</artifactId> 
    <version>1.1.2</version> 
    <scope>test</scope> 
</dependency> 

<dependency> 
    <groupId>net.jadler</groupId> 
    <artifactId>jadler-junit</artifactId> 
    <version>1.1.2</version> 
    <scope>test</scope> 
</dependency> 

serveral的搜索后,我明白了为什么我有这个例外。为了解决这个问题,我不得不改变我的依赖这样的:

<dependency> 
    <groupId>net.jadler</groupId> 
    <artifactId>jadler-core</artifactId> 
    <version>1.1.2</version> 
    <scope>test</scope> 
</dependency> 
<dependency> 
    <groupId>net.jadler</groupId> 
    <artifactId>jadler-jetty</artifactId> 
    <version>1.1.2</version> 
    <scope>test</scope> 
    <exclusions> 
    <exclusion> 
     <groupId>org.eclipse.jetty</groupId> 
     <artifactId>jetty-server</artifactId> 
    </exclusion> 
    <exclusion> 
     <groupId>org.eclipse.jetty.orbit</groupId> 
     <artifactId>javax.servlet</artifactId> 
    </exclusion> 
    </exclusions> 
</dependency> 
<dependency> 
    <groupId>org.eclipse.jetty</groupId> 
    <artifactId>jetty-server</artifactId> 
    <version>8.1.18.v20150929</version> 
    <scope>test</scope> 
    <exclusions> 
    <exclusion> 
     <groupId>org.eclipse.jetty.orbit</groupId> 
     <artifactId>javax.servlet</artifactId> 
    </exclusion> 
    </exclusions> 
</dependency> 
<dependency> 
    <groupId>javax.servlet</groupId> 
    <artifactId>javax.servlet-api</artifactId> 
    <version>3.0.1</version> 
    <scope>test</scope> 
</dependency> 
<dependency> 
    <groupId>net.jadler</groupId> 
    <artifactId>jadler-junit</artifactId> 
    <version>1.1.2</version> 
    <scope>test</scope> 
</dependency> 

我明白,码头不使用org.eclipse.jetty.orbit的javax.servlet.AsyncContext:的javax.servlet但它使用的javax。 servlet:javax.servlet-api v3.0.1。

有人知道为什么吗?解决方案更好

我的JDK版本是1.6.45。

如果您需要更多信息,例如我的测试资源告诉我。

编辑1:MVN依赖性:树

+- commons-beanutils:commons-beanutils:jar:1.6:compile 
+- commons-collections:commons-collections:jar:3.2.1:compile 
+- commons-digester:commons-digester:jar:1.5:compile 
| \- xml-apis:xml-apis:jar:1.0.b2:compile 
+- commons-fileupload:commons-fileupload:jar:1.0:compile 
+- commons-lang:commons-lang:jar:2.6:compile 
+- commons-logging:commons-logging:jar:1.1.1:compile 
+- ant:ant-jakarta-oro:jar:1.6:compile 
+- log4j:log4j:jar:1.2.17:compile 
+- struts:struts:jar:1.2.9:compile 
|  +- commons-validator:commons-validator:jar:1.1.4:compile 
|  +- oro:oro:jar:2.0.7:compile 
| \- xalan:xalan:jar:2.5.1:compile 
+- oracle:orai18n:jar:14:compile 
+- oracle:ojdbc6:jar:11.1.0.7.0:provided 
+- oracle:xdb:jar:11.1.1.2.0:compile 
+- javax.servlet:servlet-api:jar:2.4:provided 
+- javax.servlet:jsp-api:jar:2.0:provided 
+- org.slf4j:slf4j-api:jar:1.7.5:compile 
+- org.slf4j:slf4j-log4j12:jar:1.7.12:test (scope not updated to compile) 
+- antlr:antlr:jar:2.7.6:compile 
+- com.fasterxml.jackson.core:jackson-databind:jar:2.6.0:compile 
|  +- com.fasterxml.jackson.core:jackson-annotations:jar:2.6.0:compile 
| \- com.fasterxml.jackson.core:jackson-core:jar:2.6.0:compile 
+- net.sf.ehcache:ehcache:jar:2.10.0:compile 
+- org.springframework:spring-context:jar:3.2.14.RELEASE:compile 
|  +- org.springframework:spring-aop:jar:3.2.14.RELEASE:compile 
|  +- org.springframework:spring-beans:jar:3.2.14.RELEASE:compile 
|  +- org.springframework:spring-core:jar:3.2.14.RELEASE:compile 
| \- org.springframework:spring-expression:jar:3.2.14.RELEASE:compile 
+- org.springframework:spring-context-support:jar:3.2.14.RELEASE:compile 
+- junit:junit:jar:4.12:test 
| \- org.hamcrest:hamcrest-core:jar:1.3:test 
+- org.springframework:spring-test:jar:3.0.6.RELEASE:test 
+- net.jadler:jadler-core:jar:1.1.2:test 
|  +- org.hamcrest:hamcrest-library:jar:1.3:test 
| \- commons-io:commons-io:jar:2.4:test 
+- net.jadler:jadler-jetty:jar:1.1.2:test 
+- org.eclipse.jetty:jetty-server:jar:8.1.18.v20150929:test 
|  +- org.eclipse.jetty:jetty-continuation:jar:8.1.18.v20150929:test 
| \- org.eclipse.jetty:jetty-http:jar:8.1.18.v20150929:test 
|  \- org.eclipse.jetty:jetty-io:jar:8.1.18.v20150929:test 
|  \- org.eclipse.jetty:jetty-util:jar:8.1.18.v20150929:test 
+- javax.servlet:javax.servlet-api:jar:3.0.1:test 
    \- net.jadler:jadler-junit:jar:1.1.2:test 
+1

首先,也是最重要的:[Java 1.6在2013年是EOL(End of Life)](http://www.oracle.com/technetwork/java/eol-135779.html)和[码头8在2014年是EOL](https://dev.eclipse.org/mhonarc/lists/jetty-announce/msg00069.html)。其次,你可以为你的项目做一个'mvn dependency:tree'并将它包含在你的问题中吗? –

+0

是的,但我没有选择Java 1.6和JAdler使用Jetty 8 max。我在我的问题中添加了我的依赖关系树。 –

+1

在问题中看不到'dependency:tree'。 –

回答

0
与我JDK的更新

最后为servlet的API 3> 7 - (6 - > 7)和我的Tomcat(6 .x)错误已修复。感谢Joakim Erdelft。我认为这是解决我的问题的servlet-api 3.x。

我的新的依赖:树:

+- commons-beanutils:commons-beanutils:jar:1.6:compile 
+- commons-collections:commons-collections:jar:3.2.1:compile 
+- commons-digester:commons-digester:jar:1.5:compile 
| \- xml-apis:xml-apis:jar:1.0.b2:compile 
+- commons-fileupload:commons-fileupload:jar:1.0:compile 
+- commons-lang:commons-lang:jar:2.6:compile 
+- commons-logging:commons-logging:jar:1.1.1:compile 
+- ant:ant-jakarta-oro:jar:1.6:compile 
+- log4j:log4j:jar:1.2.17:compile 
+- struts:struts:jar:1.2.9:provided 
|  +- commons-validator:commons-validator:jar:1.1.4:provided 
|  +- oro:oro:jar:2.0.7:provided 
| \- xalan:xalan:jar:2.5.1:provided 
+- oracle:orai18n:jar:14:compile 
+- com.oracle:ojdbc6:jar:11.2.0.4:provided 
+- oracle:xdb:jar:11.2.0.3.0:compile 
+- javax.servlet:javax.servlet-api:jar:3.0.1:provided 
+- javax.servlet:jsp-api:jar:2.0:provided 
| \- javax.servlet:servlet-api:jar:2.4:provided 
+- org.slf4j:slf4j-api:jar:1.7.5:compile 
+- org.slf4j:slf4j-log4j12:jar:1.7.12:test (scope not updated to compile) 
+- antlr:antlr:jar:2.7.6:compile 
+- com.fasterxml.jackson.core:jackson-databind:jar:2.6.0:compile 
|  +- com.fasterxml.jackson.core:jackson-annotations:jar:2.6.0:compile 
| \- com.fasterxml.jackson.core:jackson-core:jar:2.6.0:compile 
+- net.sf.ehcache:ehcache:jar:2.10.0:compile 
+- org.springframework:spring-context:jar:3.2.14.RELEASE:compile 
|  +- org.springframework:spring-aop:jar:3.2.14.RELEASE:compile 
|  +- org.springframework:spring-beans:jar:3.2.14.RELEASE:compile 
|  +- org.springframework:spring-core:jar:3.2.14.RELEASE:compile 
| \- org.springframework:spring-expression:jar:3.2.14.RELEASE:compile 
+- org.springframework:spring-context-support:jar:3.2.14.RELEASE:compile 
+- junit:junit:jar:4.12:test 
| \- org.hamcrest:hamcrest-core:jar:1.3:test 
+- org.springframework:spring-test:jar:3.2.14.RELEASE:test 
+- net.jadler:jadler-core:jar:1.1.2:test 
|  +- org.hamcrest:hamcrest-library:jar:1.3:test 
| \- commons-io:commons-io:jar:2.4:test 
+- net.jadler:jadler-jetty:jar:1.1.2:test 
|  +- org.eclipse.jetty:jetty-server:jar:8.1.11.v20130520:test 
|  |  +- org.eclipse.jetty:jetty-continuation:jar:8.1.11.v20130520:test 
|  | \- org.eclipse.jetty:jetty-http:jar:8.1.11.v20130520:test 
|  |  \- org.eclipse.jetty:jetty-io:jar:8.1.11.v20130520:test 
|  |  \- org.eclipse.jetty:jetty-util:jar:8.1.11.v20130520:test 
| \- org.eclipse.jetty.orbit:javax.servlet:jar:3.0.0.v201112011016:test 
    \- net.jadler:jadler-junit:jar:1.1.2:test 
1

您的依赖关系树的servlet的API的两倍。

+- javax.servlet:servlet-api:jar:2.4:provided 
+- javax.servlet:javax.servlet-api:jar:3.0.1:test 

删除该javax.servlet:servlet-api:jar:2.4

然后标记javax.servlet:javax.servlet-api:jar:3.0.1作为<scope>provided</scope>

+0

是的,我知道,但这不是问题。我的项目需要servlet-api 2.4,所以我把它们放在提供的位置。但是要使用jetty 8,我必须在范围测试中添加servlet-api 3而不是org.eclipse.jetty.orbit:javax-servlet导致所使用的AsyncContext类在此库中。在把servlet-api放在我的问题中之前,我把我的第一个jadler依赖关系放在了我的问题中。3. AsyncContext:https://tomcat.apache.org/tomcat-8.0-doc/servletapi/javax/servlet/AsyncContext.html –

+0

servlet jar是密封的并且包含signed/protected类,则不能同时在classpath中同时拥有这两个类。这是行不通的。 –