[英]JAX-RS with Jersey not working in JBoss AS
我正在嘗試將簡單的REST服務上傳到JBoss AS 7.1(或TomEE JAX-RS)上。
我的web.xml
:
<servlet>
<servlet-name>jersey-serlvet</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>com.javacodegeeks.jersey.main</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>jersey-serlvet</servlet-name>
<url-pattern>/rs/*</url-pattern>
</servlet-mapping>
對pom.xml
依賴關系:
<dependency>
<groupId>javax.ws.rs</groupId>
<artifactId>javax.ws.rs-api</artifactId>
<version>2.0.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-server</artifactId>
<version>1.9</version>
</dependency>
服務器端點:
@Path("account")
public class AccountDetailsService {
@GET
@Path("/details/{param}")
@Produces(MediaType.TEXT_PLAIN)
public Response getAccountDetails(@PathParam("param") String accountName) {
String output = "Account Name : " + accountName;
return Response.status(200).entity(output).build();
}
}
但是我得到這個錯誤:
17:37:00,450 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-2) MSC00001: Fai led to start service
jboss.deployment.unit."jersey-example.war".POST_MODULE: org.jboss.msc.service.StartException in service
jboss.deployment.unit."jersey-example.war".POST_MODULE: Failed to process phase POST_MODULE of deployment "jersey-example.war"
at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:119) [jboss-as-server-7.1.1.Final.jar:7.1.1.Final]
at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1811) [jboss-msc-1.0.2.GA.jar:1.0.2.GA]
at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1746) [jboss-msc-1.0.2.GA.jar:1.0.2.GA]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [rt.jar:1.7.0_80-ea]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [rt.jar:1.7.0_80-ea]
at java.lang.Thread.run(Thread.java:745) [rt.jar:1.7.0_80-ea] Caused by:org.jboss.as.server.deployment.DeploymentUnitProcessingException:
JBAS01123 2: Only one JAX-RS Application Class allowed.
com.sun.jersey.api.core.ClasspathResour ceConfig
com.sun.jersey.api.core.ResourceConfig
com.sun.jersey.api.core.PackagesResour ceConfig
com.sun.jersey.api.core.DefaultResourceConfig
com.sun.jersey.api.core.WebAppR esourceConfig
com.sun.jersey.server.impl.application.DeferredResourceConfig
com.sun.je rsey.api.core.ClassNamesResourceConfig
com.sun.jersey.api.core.ScanningResourceConfig
com.sun.jersey.api.core.ApplicationAdapter
at org.jboss.as.jaxrs.deployment.JaxrsScanningProcessor.scan(JaxrsScanningProcessor.java:209)
at org.jboss.as.jaxrs.deployment.JaxrsScanningProcessor.deploy(JaxrsScanningProcessor.java:105)
at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:113)[jboss-as-server-7.1.1.Final.jar:7.1.1.Final]
... 5 more
如果同樣可以在Tomcat 7容器上正常運行,為什么會發生這種情況?
更新:
20:15:03,078 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-3) MSC00001: Failed to start service jboss.web.dep
loyment.default-host./ROOT: org.jboss.msc.service.StartException in service jboss.web.deployment.default-host./ROOT: Fai
led to start service
at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1767) [jboss-msc-1.0.2.G
A.jar:1.0.2.GA]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [rt.jar:1.7.0_51]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [rt.jar:1.7.0_51]
at java.lang.Thread.run(Thread.java:744) [rt.jar:1.7.0_51]
Caused by: java.lang.IllegalStateException: JBAS018038: Root contexts can not be deployed when the virtual host configur
ation has the welcome root enabled, disable it and redeploy
at org.jboss.as.web.deployment.WebContextInjector.inject(WebContextInjector.java:57)
at org.jboss.as.web.deployment.WebContextInjector.inject(WebContextInjector.java:38)
at org.jboss.msc.inject.CastingInjector.inject(CastingInjector.java:55) [jboss-msc-1.0.2.GA.jar:1.0.2.GA]
at org.jboss.msc.service.ServiceControllerImpl.doInject(ServiceControllerImpl.java:1549) [jboss-msc-1.0.2.GA.jar
:1.0.2.GA]
at org.jboss.msc.service.ServiceControllerImpl.access$1900(ServiceControllerImpl.java:49) [jboss-msc-1.0.2.GA.ja
r:1.0.2.GA]
at org.jboss.msc.service.ServiceControllerImpl$StartTask.performInjections(ServiceControllerImpl.java:1780) [jbo
ss-msc-1.0.2.GA.jar:1.0.2.GA]
at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1741) [jboss-msc-1.0.2.G
A.jar:1.0.2.GA]
... 3 more
錯誤
JBAS011232:僅允許一個JAX-RS應用程序類
給您有關問題的提示。 JBoss 7使用RESTEasy作為JAX-RS實現。 您的應用程序正在使用Jersey。 看起來Jersey和RESTEasy在JBoss 7中進展不順利 。
要將Jersey作為JBoss 7中的JAX-RS實現使用,您需要禁用RESTEasy,默認情況下,RESTEasy已捆綁在JBoss 7中。
嘗試將以下行添加到您的web.xml
:
<context-param>
<param-name>resteasy.scan</param-name>
<param-value>false</param-value>
</context-param>
<context-param>
<param-name>resteasy.scan.providers</param-name>
<param-value>false</param-value>
</context-param>
<context-param>
<param-name>resteasy.scan.resources</param-name>
<param-value>false</param-value>
</context-param>
如果不起作用,請在WEB-INF
文件夾下創建一個名為jboss-deployment-structure.xml
文件,其中包含以下內容以排除RESTEasy模塊:
<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
<deployment>
<exclusions>
<module name="org.jboss.resteasy.resteasy-atom-provider" />
<module name="org.jboss.resteasy.resteasy-cdi" />
<module name="org.jboss.resteasy.resteasy-jaxrs" />
<module name="org.jboss.resteasy.resteasy-jaxb-provider" />
<module name="org.jboss.resteasy.resteasy-jackson-provider" />
<module name="org.jboss.resteasy.resteasy-jsapi" />
<module name="org.jboss.resteasy.resteasy-multipart-provider" />
<module name="org.jboss.resteasy.async-http-servlet-30" />
</exclusions>
</deployment>
</jboss-deployment-structure>
錯誤
JBAS018038:當虛擬主機配置啟用了歡迎根,將其禁用並重新部署時,無法部署根上下文
當您嘗試將應用程序部署到根上下文時(使用名稱ROOT.war
或jboss-web.xml
/
context),但是AS歡迎頁面已經占用了它。
要解決此問題,請關閉服務器並編輯standalone.xml
:
<subsystem xmlns="urn:jboss:domain:web:1.2" default-virtual-server="default-host"
native="false">
<virtual-server name="default-host" enable-welcome-root="false">
...
</subsystem>
有關更多詳細信息,請在此處查看 。
解決方案不是很明顯...
1)將以下行添加到web.xml:
<context-param>
<param-name>resteasy.scan</param-name>
<param-value>false</param-value>
</context-param>
<context-param>
<param-name>resteasy.scan.providers</param-name>
<param-value>false</param-value>
</context-param>
<context-param>
<param-name>resteasy.scan.resources</param-name>
<param-value>false</param-value>
</context-param>
2)注釋掉了來自web-xml的以下幾行:
<!--<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>com.javacodegeeks.jersey.main</param-value>
</init-param>-->
3)無需創建jboss-deployment-structure.xml或編輯standalone.xml 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.