我正在尝试将JAX-RS应用程序部署到JBoss EAP 6.2。我的web.xml包含以下内容:
<servlet>
<servlet-name>resteasy-servlet</servlet-name>
<servlet-class>
org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>resteasy-servlet</servlet-name>
<url-pattern>/jax-rs/*</url-pattern>
</servlet-mapping>
<context-param>
<param-name>resteasy.servlet.mapping.prefix</param-name>
<param-value>/jax-rs</param-value>
</context-param>
<listener>
<listener-class>
org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap
</listener-class>
</listener>
<context-param>
<param-name>resteasy.scan</param-name>
<param-value>true</param-value>
</context-param>
...我将以下内容包含在部署依赖项中:
<dependency org="org.jboss.resteasy" name="resteasy-jaxrs" rev="3.0.5.Final"/>
...所以我在WAR中有以下JAR:
WEB-INF/lib/resteasy-jaxrs-3.0.5.Final.jar
但是,当我将WAR部署到JBoss时,我得到以下跟踪:
14:32:42,537 ERROR [org.jboss.msc.service.fail](ServerService线程池 - 316)MSC000001:无法启动服务jboss.web.deployment.default-host./search-rest:org服务中的.jboss.msc.service.StartException。匿名服务中的jboss.web.deployment.default-host./search-rest:org.jboss.msc.service.StartException:JBAS018040:无法启动上下文 在org.jboss.as.web.deployment.WebDeploymentService $ 1.run(WebDeploymentService.java:96) at java.util.concurrent.Executors $ RunnableAdapter.call(Executors.java:511)[rt.jar:1.8.0_111] at java.util.concurrent.FutureTask.run(FutureTask.java:266)[rt.jar:1.8.0_111] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)[rt.jar:1.8.0_111] at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:617)[rt.jar:1.8.0_111] 在java.lang.Thread.run(Thread.java:745)[rt.jar:1.8.0_111] 在org.jboss.threads.JBossThread.run(JBossThread.java:122)
由以下内容引起:匿名服务中的org.jboss.msc.service.StartException:JBAS018040:无法启动上下文 在org.jboss.as.web.deployment.WebDeploymentService.doStart(WebDeploymentService.java:161) 在org.jboss.as.web.deployment.WebDeploymentService.access $ 000(WebDeploymentService.java:60) 在org.jboss.as.web.deployment.WebDeploymentService $ 1.run(WebDeploymentService.java:93) ......还有6个
发生了什么以及如何调试?
答案 0 :(得分:1)
好的,所以罪魁祸首就是以下的jar:
WEB-INF/lib/resteasy-jaxrs-3.0.5.Final.jar
一旦我删除了这种依赖,它就有效了。这是有道理的,因为RESTEasy与JBoss EAP捆绑在一起,因此不需要将它放在WAR的WEB-INF / lib中。
另外,我发现了web.xml
中的以下元素:
<listener>
<listener-class>
org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap
</listener-class>
</listener>
......没有必要。一切都有效,没有它。
最后一个有效的附加配置是删除扫描仪元素:
<context-param>
<param-name>resteasy.scan</param-name>
<param-value>true</param-value>
</context-param>
...在这种情况下,必须提供一个javax.ws.rs.core.Application子类:
import java.util.Set;
import java.util.HashSet;
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;
public class JaxRsApplication extends Application {
private Set<Object> singletons = new HashSet<Object>();
public JaxRsApplication() {
singletons.add( new SearchResource() );
}
@Override
public Set<Object> getSingletons() {
return singletons;
}
}
...并将其注册到RESTEasy servlet:
<servlet>
<servlet-name>resteasy-servlet</servlet-name>
<servlet-class>
org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher
</servlet-class>
<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>mjb44.searchapp.rest.JaxRsApplication</param-value>
</init-param>
</servlet>