Java Jadler : Jetty conflict

标签 java http testing mocking jetty

我想在我的 Junit 测试中模拟 http 请求。所以我使用 Jadler Project .当我运行我的测试并发送我的 http 请求时,我有这个异常:

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>

经过多次搜索,我明白了为什么会出现这个异常。为了解决它,我不得不像这样更改我的依赖项:

    <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>

我知道 jetty 不使用 javax.servlet.AsyncContext 的 org.eclipse.jetty.orbit:javax.servlet 但它使用 javax.servlet:javax.servlet-api v3.0.1。

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

我的 JDK 版本是 1.6.45。

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

编辑 1:mvn dependency:tree

+- 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

最佳答案

您的依赖树中有两次 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>

关于Java Jadler : Jetty conflict,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33122027/

相关文章:

java - 如何将哈希表向下转换为抽象类对象

java - Android - 调用方法而不是类 - sdk

javascript - 表单提交后重置 Html 表单并防止用户回来查看提交的数据

java - 如何在 Java 中向改造请求添加不记名 token

angular - error 发生意外错误 : "Command\"e2e\"not found."

java - Java如何确定 'file.encoding'系统属性?

java - 没有合适的驱动程序错误

azure - 无法从 Azure 外部访问 Azure VM HTTP 网站

java - CORS 工作的 GWT HTTP 请求响应代码 0

ruby - 有没有办法设置$的值?在 Ruby 的模拟中?