2014-11-21 88 views
3

我想在JBoss EAP 6.3上使用基於我在WAR歸檔中提供的cxf 2.7.11的jax-rs實現部署REST API。目前我得到的時候我叫下面的錯誤不存在的URL(404預計):JBoss EAP 6.3 + cxf 2.7.11 jax-rs導致

12:22:14,627 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/my-app-1.0-SNAPSHOT].[CXFServlet]] (http-/127.0.0.1:8080-2) JBWEB000236: Servlet.service() for servlet CXFServlet threw exception: java.lang.NoSuchMethodError: javax.ws.rs.ClientErrorException.validate(Ljavax/ws/rs/core/Response;Ljavax/ws/rs/core/Response$Status$Family;)Ljavax/ws/rs/core/Response; 
at javax.ws.rs.ClientErrorException.<init>(ClientErrorException.java:127) [javax.ws.rs-api-2.0-m10.jar:2.0-m10] 
at org.apache.cxf.jaxrs.utils.SpecExceptions.toHttpException(SpecExceptions.java:110) [cxf-rt-frontend-jaxrs-2.7.13.jar:2.7.13] 
at org.apache.cxf.jaxrs.utils.ExceptionUtils.toHttpException(ExceptionUtils.java:149) [cxf-rt-frontend-jaxrs-2.7.13.jar:2.7.13] 
at org.apache.cxf.jaxrs.utils.JAXRSUtils.findTargetMethod(JAXRSUtils.java:477) [cxf-rt-frontend-jaxrs-2.7.13.jar:2.7.13] 
at org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor.processRequest(JAXRSInInterceptor.java:196) [cxf-rt-frontend-jaxrs-2.7.13.jar:2.7.13] 
at org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor.handleMessage(JAXRSInInterceptor.java:88) [cxf-rt-frontend-jaxrs-2.7.13.jar:2.7.13] 
at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:272) [cxf-api-2.7.13.jar:2.7.13] 
at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121) [cxf-api-2.7.13.jar:2.7.13] 
at org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:241) [cxf-rt-transports-http-2.7.13.jar:2.7.13] 
at org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:248) [cxf-rt-transports-http-2.7.13.jar:2.7.13] 
at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:222) [cxf-rt-transports-http-2.7.13.jar:2.7.13] 
at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:153) [cxf-rt-transports-http-2.7.13.jar:2.7.13] 
at org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:171) [cxf-rt-transports-http-2.7.13.jar:2.7.13] 
at org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:286) [cxf-rt-transports-http-2.7.13.jar:2.7.13] 
at org.apache.cxf.transport.servlet.AbstractHTTPServlet.doGet(AbstractHTTPServlet.java:211) [cxf-rt-transports-http-2.7.13.jar:2.7.13] 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:734) [jboss-servlet-api_3.0_spec-1.0.2.Final-redhat-1.jar:1.0.2.Final-redhat-1] 
at org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:262) [cxf-rt-transports-http-2.7.13.jar:2.7.13] 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:295) [jbossweb-7.4.8.Final-redhat-4.jar:7.4.8.Final-redhat-4] 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214) [jbossweb-7.4.8.Final-redhat-4.jar:7.4.8.Final-redhat-4] 
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:231) [jbossweb-7.4.8.Final-redhat-4.jar:7.4.8.Final-redhat-4] 
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:149) [jbossweb-7.4.8.Final-redhat-4.jar:7.4.8.Final-redhat-4] 
at org.jboss.as.jpa.interceptor.WebNonTxEmCloserValve.invoke(WebNonTxEmCloserValve.java:50) [jboss-as-jpa-7.4.0.Final-redhat-19.jar:7.4.0.Final-redhat-19] 
at org.jboss.as.jpa.interceptor.WebNonTxEmCloserValve.invoke(WebNonTxEmCloserValve.java:50) [jboss-as-jpa-7.4.0.Final-redhat-19.jar:7.4.0.Final-redhat-19] 
at org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:169) [jboss-as-web-7.4.0.Final-redhat-19.jar:7.4.0.Final-redhat-19] 
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:145) [jbossweb-7.4.8.Final-redhat-4.jar:7.4.8.Final-redhat-4] 
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:97) [jbossweb-7.4.8.Final-redhat-4.jar:7.4.8.Final-redhat-4] 
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:102) [jbossweb-7.4.8.Final-redhat-4.jar:7.4.8.Final-redhat-4] 
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344) [jbossweb-7.4.8.Final-redhat-4.jar:7.4.8.Final-redhat-4] 
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:856) [jbossweb-7.4.8.Final-redhat-4.jar:7.4.8.Final-redhat-4] 
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:653) [jbossweb-7.4.8.Final-redhat-4.jar:7.4.8.Final-redhat-4] 
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:926) [jbossweb-7.4.8.Final-redhat-4.jar:7.4.8.Final-redhat-4] 
at java.lang.Thread.run(Thread.java:722) [rt.jar:1.7.0_09] 

我試圖在JBoss中部署,structure.xml排除RestEasy的,但它並不能幫助:

<?xml version="1.0" encoding="UTF-8"?> 
<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.2"> 
    <deployment> 
     <exclude-subsystems> 
      <subsystem name="resteasy" /> 
      <subsystem name="jaxrs" /> 
      <subsystem name="webservices" /> 
     </exclude-subsystems> 
     <exclusions> 
      <module name="javax.ws.rs.api" /> 
      <module name="org.apache.cxf" /> 
      <module name="org.apache.cxf.impl" /> 
     </exclusions> 
    </deployment> 
</jboss-deployment-structure> 

CXF 2.6.16版本正常工作。

我猜javax.ws.rs-api-2.0-m10是cxf-rt-frontend-jaxrs的傳遞依賴項,但是當我排除這個時,我得到了ClassNotFoundException對於jax-rs API的特定類。

有沒有解決這個問題的方法?

+0

你的類路徑上有一個附加JSR311 API地方? – soilworker 2014-11-26 08:57:58

+0

我這樣做,但在提供的範圍內: org.jboss.resteasy:jaxrs-api:jar:2.1.0.GA:提供 – Konrad 2014-11-26 14:38:26

回答

1

您提到它可以與cxf 2.6.x一起使用,但不能與2.7.x一起使用。所以我認爲你應該遵循遷移指南http://cxf.apache.org/docs/27-migration-guide.html

在OSGI JAX-RS端點如果您已編制對JSR-311(JAX-RS 1.1)的應用程序軟件包API,並希望得到他們CXF運行2.7.x而沒有針對JSR-339(JAX-RS 2.0)API重新編譯,那麼 具有導入的「javax.ws.rs」,「javax.ws.rs.core」和「javax.ws.rs.ext」 「[1.1,3]」版本範圍和使用org.apache.servicemix.specs.jsr339-api-m10-2.1.0規範捆綁或 使用org.apache.servicemix.specs.jsr339-api-m10-2.2.0 spec包發佈時。

親切的問候, soilworker

+0

我檢查了模塊中建立的jboss,發現它包含cxf 2.7.11 jar包,所以我認爲不需要移民。 '$ find。 -type f -name「* cxf *」 ./system/layers/base/org/apache/cxf/main/cxf-api-2.7.11.redhat-3.jar ./system/layers/base/org /apache/cxf/impl/main/cxf-rt-transports-http-2.7.11.redhat-3.jar ...' – Konrad 2014-11-26 14:41:11

+1

但是,您的應用程序可以與2.6.x一起使用。因此,在我看來,在遷移指南中應該有必要的提示,例如,addalya jsr-311.jar或導致您在上面提到的錯誤的東西。 – soilworker 2014-11-26 16:07:42

相關問題