我正在尝试创建一个嵌入 Arquillian 和 Tomcat 7 的测试套件,但是当我使用 web.xml 文件部署我的 WAR 文件时,我收到以下错误。
未找到 ArquillianServletRunner。无法从 ProtocolMetadata 确定 ContextRoot,请联系 DeployableContainer 开发人员。
我该如何解决?
我正在尝试创建一个嵌入 Arquillian 和 Tomcat 7 的测试套件,但是当我使用 web.xml 文件部署我的 WAR 文件时,我收到以下错误。
未找到 ArquillianServletRunner。无法从 ProtocolMetadata 确定 ContextRoot,请联系 DeployableContainer 开发人员。
我该如何解决?
所以我不知道这个的确切原因,但有一个简单的解决方法。
发生的事情是没有映射到名称“ArquillianServletRunner”的 servlet。这似乎由网络片段处理:http: //grepcode.com/file/repository.jboss.org/nexus/content/repositories/releases/org.jboss.arquillian.protocol/arquillian-protocol-servlet/1.0 .0.Beta1/org/jboss/arquillian/protocol/servlet/v_3/web-fragment.xml
我的解决方案是将上面文件中的 web 片段的内容复制到我包含在通过 ShrinkWrap 创建的 WebArchive 中的 web.xml 文件中。这样,servlet“ArquillianServletRunner”就被配置并可用了。
如果您已经在 web.xml 中包含了下面的片段,这很可能是关于 jar 依赖的。
<servlet>
<servlet-name>ArquillianServletRunner</servlet-name>
<servlet-class>org.jboss.arquillian.protocol.servlet.runner.ServletTestRunner</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ArquillianServletRunner</servlet-name>
<url-pattern>/ArquillianServletRunner</url-pattern>
</servlet-mapping>
首先,您可以检查 ArquillianServlet 是否正在运行发送 GET 请求,如下所示
http://localhost:8080/APP_CONTEXT_ROOT/ArquillianServletRunner?outputMode=serializedObject&className=com.stackoverflow.test.SampleTest&methodName=testSomething
此外,您还可以查看服务器日志,您可以看到 NoClassDefFoundError。修复您的依赖项,然后重试。