将RESTEasy JAX-RS应用程序部署到JBoss-JBAS018040:无法启动上下文

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

我正在尝试将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-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>