将RESTEasy JAX-RS应用程序部署到JBoss-JBAS018040:无法启动上下文
我正在尝试将JAX-RS应用程序部署到JBoss EAP 6.2。My web.xml具有以下功能:将RESTEasy JAX-RS应用程序部署到JBoss-JBAS018040:无法启动上下文,jboss,resteasy,jboss6.x,Jboss,Resteasy,Jboss6.x,我正在尝试将JAX-RS应用程序部署到JBoss EAP 6.2。My web.xml具有以下功能: <servlet> <servlet-name>resteasy-servlet</servlet-name> <servlet-class> org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher </servlet-class&
<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>
但是,当我将WAR部署到JBoss时,我得到以下跟踪:
14:32:42537错误[org.jboss.msc.service.fail](服务器服务线程池--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)
在java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)[rt.jar:1.8.0_111]
在java.util.concurrent.FutureTask.run(FutureTask.java:266)[rt.jar:1.8.0_111]
位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)[rt.jar:1.8.0_111]
在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个
发生了什么事?我如何调试它?好的,那么罪魁祸首是以下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>
org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap
…没有必要。没有它,一切都能正常工作
最后,另一个有效的配置是移除扫描仪元件:
<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;
}
}
import java.util.Set;
导入java.util.HashSet;
导入javax.ws.rs.ApplicationPath;
导入javax.ws.rs.core.Application;
公共类JAXSApplication扩展了应用程序{
private Set singleton=new HashSet();
公共JAXSApplication(){
添加(新的SearchResource());
}
@凌驾
公共集getSingleton(){
返回单身人士;
}
}
…并在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>
RESTEasyServlet
org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher
javax.ws.rs.Application
mjb44.searchapp.rest.JAXSApplication
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;
}
}
<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>