Thanks Sergey, you help me to find out the solution.

I finally choose to force jboss not to load its JAXRS 1.1 API, to do so, you need to : 1/ remove the <extension module="org.jboss.as.jaxrs"/> from its configuration (ie standalone.xml) 2/ remove all the javaee.api module linkage in the jboss-deployment-structure.xml file in your web-application.
Here is my jboss-deployment-structure.xml file content :

<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.0">
    <deployment>
        <exclusions>
<!-- Exclude JAVA EE of JBOSS (javax.ws..) => Add dependency javax.annotation -->
           <module name="javaee.api" />
           <!--
remove from jboss configuration standalone.xml the following extension:
                <extension module="org.jboss.as.jaxrs"/>
           -->
        </exclusions>
        <dependencies>
            <module name="org.codehaus.jackson.jackson-core-asl"/>
            <module name="org.codehaus.jackson.jackson-mapper-asl"/>
            <!-- Add javax.annotation.Ressource -->
            <module name="javax.annotation.api" />
            <module name="javax.xml.ws.api" />
        </dependencies>
    </deployment>
</jboss-deployment-structure>



Le 25.03.2014 12:13, Sergey Beryozkin a écrit :
Hi

The relevant stack trace is here:

CXFServlet threw exception: java.lang.AbstractMethodError:

javax.ws.rs.core.Response.getStatusInfo()Ljavax/ws/rs/core/Response$StatusType;
        at

javax.ws.rs.WebApplicationException.validate(WebApplicationException.java:186)
[javax.ws.rs-api-2.0-m10.jar:2.0-m10]
        at

javax.ws.rs.ClientErrorException.<init>(ClientErrorException.java:127)
[javax.ws.rs-api-2.0-m10.jar:2.0-m10]
        at
javax.ws.rs.BadRequestException.<init>(BadRequestException.java:92)
[javax.ws.rs-api-2.0-m10.jar:2.0-m10]
        at

org.apache.cxf.jaxrs.provider.AbstractJAXBProvider.handleExceptionEnd(AbstractJAXBProvider.java:688)
[cxf-rt-frontend-jaxrs-2.7.10.jar:2.7.10]
        at

org.apache.cxf.jaxrs.provider.AbstractJAXBProvider.handleJAXBException(AbstractJAXBProvider.java:700)
[cxf-rt-frontend-jaxrs-2.7.10.jar:2.7.10]


As I said on #cxf, the problem is you have the container shipping
JAXRS 1.1 API, CXF 2.7.10 - 2.0 (m10). WebApplicationException loaded
from 1.1 API (by some root class loader) is linked with 2.0
ClientErrorException which extends WebApplicationException, where
ClientErrorException also calls a new private WebApplicationException
method (added in 2.0).

I recall you mentioned you needed 2.0 API in your own code.
So the workaround, dropping 2.0 API dependency, when deploying into
JBoss, given that CXF 2.7.10 is expected to completely support 1.1
applications, will not work.

So what I can recommend is to either temporarily avoid using 2.0 API
in your code while you work with a given version of JBoss or find out
how to prevent JBoss loading 1.1 API

HTH, Sergey



On 25/03/14 09:31, [email protected] wrote:
Hi everybody!!

Server is configured with cxf (2.7.6 or 2.7.10), Spring 3.2.3 and
jboss-as-7.2.
I encounter a problem using cxf and jaxb xsd validation. Here is the
service declaration :

      <jaxrs:server id="services" address="/">
         <jaxrs:serviceBeans>
             <bean class="com.myCompany.ServiceInterface" />
         </jaxrs:serviceBeans>
          <jaxrs:providers>
              <ref bean="JSONProvider" />
              <ref bean="JAXBProvider" />
              <ref bean="ExceptionHandler" />
          </jaxrs:providers>
      </jaxrs:server>

     <bean id="ExceptionHandler"
class="com.myCompany.util.ExceptionHandler" />
     <bean id="JSONProvider"
class="org.codehaus.jackson.jaxrs.JacksonJsonProvider" />

     <bean id="JAXBProvider"
class="org.apache.cxf.jaxrs.provider.JAXBElementProvider">
          <property name="singleJaxbContext" value="true" />
         <property name="marshallerProperties" ref="propertiesMap"/>
          <property name="validateOutput" value="true" />
         <property ref="schemaHolder" name="schemaHandler"/>
      </bean>

     <util:map id="propertiesMap">
          <entry key="jaxb.formatted.output"><value
type="java.lang.Boolean">true</value></entry>
     </util:map>

     <bean id="schemaHolder"
class="org.apache.cxf.jaxrs.utils.schemas.SchemaHandler">
<property name="schemas" ref="XMLISchemas"/> <!-- XMLIschemas
contains the path of every xds to use -->
     </bean>

XSD validation functionnality work perferctly in both way and my
erroneous payload (bad tag or bad value) are generating exception
outside of my service code. This is great, but I'd like to produce a
specific response to user in case of xsd validation exception. So I
introduced the ExceptionHandler bean and I figured out that thrown
exception was not the one expected (SAXParseException or
UnmarshalException) but an AbstractMethodError.
Here is the (full) stacktrace :

17:55:30,314 INFO  [stdout] 24-03-14 16:55:30[WARN
][o.a.c.j.p.AbstractJAXBProvider][javax.xml.bind.UnmarshalException
17:55:30,320 INFO  [stdout]  - with linked exception:
17:55:30,321 INFO [stdout] [org.xml.sax.SAXParseException; lineNumber: 4; columnNumber: 4; cvc-complex-type.2.4.a: Invalid content was found
starting with element 'direct'. One of '{direction}' is expected.]
17:55:30,321 INFO  [stdout]        at

com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.handleStreamException(UnmarshallerImpl.java:483)

17:55:30,321 INFO  [stdout]        at

com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:417)

17:55:30,321 INFO  [stdout]        at

com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:386)

17:55:30,322 INFO  [stdout]        at

org.apache.cxf.jaxrs.provider.JAXBElementProvider.unmarshalFromInputStream(JAXBElementProvider.java:272)

17:55:30,322 INFO  [stdout]        at

org.apache.cxf.jaxrs.provider.JAXBElementProvider.doUnmarshal(JAXBElementProvider.java:225)

17:55:30,322 INFO  [stdout]        at

org.apache.cxf.jaxrs.provider.JAXBElementProvider.readFrom(JAXBElementProvider.java:184)

17:55:30,322 INFO  [stdout]        at

org.apache.cxf.jaxrs.utils.JAXRSUtils.readFromMessageBodyReader(JAXRSUtils.java:1280)

17:55:30,322 INFO  [stdout]        at

org.apache.cxf.jaxrs.utils.JAXRSUtils.readFromMessageBody(JAXRSUtils.java:1231)

17:55:30,323 INFO  [stdout]        at

org.apache.cxf.jaxrs.utils.JAXRSUtils.processParameter(JAXRSUtils.java:782)
17:55:30,323 INFO  [stdout]        at

org.apache.cxf.jaxrs.utils.JAXRSUtils.processParameters(JAXRSUtils.java:741)

17:55:30,323 INFO  [stdout]        at

org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor.processRequest(JAXRSInInterceptor.java:254)

17:55:30,323 INFO  [stdout]        at

org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor.handleMessage(JAXRSInInterceptor.java:90)

17:55:30,324 INFO  [stdout]        at

org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:272)

17:55:30,324 INFO  [stdout]        at

org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121)

17:55:30,324 INFO  [stdout]        at

org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:239)

17:55:30,324 INFO  [stdout]        at

org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:248)

17:55:30,324 INFO  [stdout]        at

org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:222)

17:55:30,325 INFO  [stdout]        at

org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:153)

17:55:30,325 INFO  [stdout]        at

org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:167)

17:55:30,325 INFO  [stdout]        at

org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:286)

17:55:30,325 INFO  [stdout]        at

org.apache.cxf.transport.servlet.AbstractHTTPServlet.doPost(AbstractHTTPServlet.java:206)

17:55:30,326 INFO  [stdout]        at
javax.servlet.http.HttpServlet.service(HttpServlet.java:754)
17:55:30,326 INFO  [stdout]        at

org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:262)

17:55:30,326 INFO  [stdout]        at

org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:295)

17:55:30,326 INFO  [stdout]        at

org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214)

17:55:30,326 INFO  [stdout]        at

org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)

17:55:30,327 INFO  [stdout]        at

org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:149)

17:55:30,327 INFO  [stdout]        at

org.jboss.as.jpa.interceptor.WebNonTxEmCloserValve.invoke(WebNonTxEmCloserValve.java:50)

17:55:30,327 INFO  [stdout]        at

org.jboss.as.jpa.interceptor.WebNonTxEmCloserValve.invoke(WebNonTxEmCloserValve.java:50)

17:55:30,327 INFO  [stdout]        at

org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:169)

17:55:30,328 INFO  [stdout]        at

org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:145)

17:55:30,328 INFO  [stdout]        at

org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:97)

17:55:30,328 INFO  [stdout]        at

org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:102)

17:55:30,328 INFO  [stdout]        at

org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:336)
17:55:30,328 INFO  [stdout]        at

org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:856)
17:55:30,329 INFO  [stdout]        at

org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:653)

17:55:30,329 INFO  [stdout]        at

org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:920)
17:55:30,329 INFO [stdout] at java.lang.Thread.run(Thread.java:722) 17:55:30,329 INFO [stdout] Caused by: org.xml.sax.SAXParseException; lineNumber: 4; columnNumber: 4; cvc-complex-type.2.4.a: Invalid content was found starting with element 'direct'. One of '{direction}' is expected.
17:55:30,330 INFO  [stdout]        at

org.apache.xerces.util.ErrorHandlerWrapper.createSAXParseException(Unknown
Source)
17:55:30,330 INFO  [stdout]        at
org.apache.xerces.util.ErrorHandlerWrapper.error(Unknown Source)
17:55:30,330 INFO  [stdout]        at
org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
17:55:30,330 INFO  [stdout]        at
org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
17:55:30,330 INFO  [stdout]        at
org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
17:55:30,331 INFO  [stdout]        at

org.apache.xerces.impl.xs.XMLSchemaValidator$XSIErrorReporter.reportError(Unknown
Source)
17:55:30,331 INFO  [stdout]        at

org.apache.xerces.impl.xs.XMLSchemaValidator.reportSchemaError(Unknown
Source)
17:55:30,331 INFO  [stdout]        at

org.apache.xerces.impl.xs.XMLSchemaValidator.handleStartElement(Unknown
Source)
17:55:30,331 INFO  [stdout]        at
org.apache.xerces.impl.xs.XMLSchemaValidator.startElement(Unknown Source)
17:55:30,331 INFO  [stdout]        at

org.apache.xerces.jaxp.validation.ValidatorHandlerImpl.startElement(Unknown
Source)
17:55:30,332 INFO  [stdout]        at

com.sun.xml.bind.v2.runtime.unmarshaller.ValidatingUnmarshaller.startElement(ValidatingUnmarshaller.java:101)

17:55:30,332 INFO  [stdout]        at

com.sun.xml.bind.v2.runtime.unmarshaller.StAXStreamConnector.handleStartElement(StAXStreamConnector.java:246)

17:55:30,332 INFO  [stdout]        at

com.sun.xml.bind.v2.runtime.unmarshaller.StAXStreamConnector.bridge(StAXStreamConnector.java:180)

17:55:30,332 INFO  [stdout]        at

com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:415)

17:55:30,333 INFO  [stdout]        ... 36 more
17:55:30,334 ERROR

[org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/server].[CXFServlet]]
JBWEB000236: Servlet.service() for servlet CXFServlet threw exception:
java.lang.AbstractMethodError:

javax.ws.rs.core.Response.getStatusInfo()Ljavax/ws/rs/core/Response$StatusType;

         at

javax.ws.rs.WebApplicationException.validate(WebApplicationException.java:186)
[javax.ws.rs-api-2.0-m10.jar:2.0-m10]
         at

javax.ws.rs.ClientErrorException.<init>(ClientErrorException.java:127)
[javax.ws.rs-api-2.0-m10.jar:2.0-m10]
         at
javax.ws.rs.BadRequestException.<init>(BadRequestException.java:92)
[javax.ws.rs-api-2.0-m10.jar:2.0-m10]
         at

org.apache.cxf.jaxrs.provider.AbstractJAXBProvider.handleExceptionEnd(AbstractJAXBProvider.java:688)
[cxf-rt-frontend-jaxrs-2.7.10.jar:2.7.10]
         at

org.apache.cxf.jaxrs.provider.AbstractJAXBProvider.handleJAXBException(AbstractJAXBProvider.java:700)
[cxf-rt-frontend-jaxrs-2.7.10.jar:2.7.10]
         at

org.apache.cxf.jaxrs.provider.JAXBElementProvider.readFrom(JAXBElementProvider.java:198)
[cxf-rt-frontend-jaxrs-2.7.10.jar:2.7.10]
         at

org.apache.cxf.jaxrs.utils.JAXRSUtils.readFromMessageBodyReader(JAXRSUtils.java:1280)
[cxf-rt-frontend-jaxrs-2.7.10.jar:2.7.10]
         at

org.apache.cxf.jaxrs.utils.JAXRSUtils.readFromMessageBody(JAXRSUtils.java:1231)
[cxf-rt-frontend-jaxrs-2.7.10.jar:2.7.10]
         at

org.apache.cxf.jaxrs.utils.JAXRSUtils.processParameter(JAXRSUtils.java:782)
[cxf-rt-frontend-jaxrs-2.7.10.jar:2.7.10]
         at

org.apache.cxf.jaxrs.utils.JAXRSUtils.processParameters(JAXRSUtils.java:741)
[cxf-rt-frontend-jaxrs-2.7.10.jar:2.7.10]
         at

org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor.processRequest(JAXRSInInterceptor.java:254)
[cxf-rt-frontend-jaxrs-2.7.10.jar:2.7.10]
         at

org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor.handleMessage(JAXRSInInterceptor.java:90)
[cxf-rt-frontend-jaxrs-2.7.10.jar:2.7.10]
         at

org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:272)
[cxf-api-2.7.10.jar:2.7.10]
         at

org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121)
[cxf-api-2.7.10.jar:2.7.10]
         at

org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:239)
[cxf-rt-transports-http-2.7.10.jar:2.7.10]
         at

org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:248)
[cxf-rt-transports-http-2.7.10.jar:2.7.10]
         at

org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:222)
[cxf-rt-transports-http-2.7.10.jar:2.7.10]
         at

org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:153)
[cxf-rt-transports-http-2.7.10.jar:2.7.10]
         at

org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:167)
[cxf-rt-transports-http-2.7.10.jar:2.7.10]
         at

org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:286)
[cxf-rt-transports-http-2.7.10.jar:2.7.10]
         at

org.apache.cxf.transport.servlet.AbstractHTTPServlet.doPost(AbstractHTTPServlet.java:206)
[cxf-rt-transports-http-2.7.10.jar:2.7.10]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:754)

[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.10.jar:2.7.10]
         at

org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:295)
[jbossweb-7.2.0.Final-redhat-1.jar:7.2.0.Final-redhat-1]
         at

org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214)
[jbossweb-7.2.0.Final-redhat-1.jar:7.2.0.Final-redhat-1]
         at

org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
[jbossweb-7.2.0.Final-redhat-1.jar:7.2.0.Final-redhat-1]
         at

org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:149)
[jbossweb-7.2.0.Final-redhat-1.jar:7.2.0.Final-redhat-1]
         at

org.jboss.as.jpa.interceptor.WebNonTxEmCloserValve.invoke(WebNonTxEmCloserValve.java:50)
[jboss-as-jpa-7.2.0.Final-redhat-8.jar:7.2.0.Final-redhat-8]
         at

org.jboss.as.jpa.interceptor.WebNonTxEmCloserValve.invoke(WebNonTxEmCloserValve.java:50)
[jboss-as-jpa-7.2.0.Final-redhat-8.jar:7.2.0.Final-redhat-8]
         at

org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:169)
[jboss-as-web-7.2.0.Final-redhat-8.jar:7.2.0.Final-redhat-8]
         at

org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:145)
[jbossweb-7.2.0.Final-redhat-1.jar:7.2.0.Final-redhat-1]
         at

org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:97)
[jbossweb-7.2.0.Final-redhat-1.jar:7.2.0.Final-redhat-1]
         at

org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:102)
[jbossweb-7.2.0.Final-redhat-1.jar:7.2.0.Final-redhat-1]
         at

org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:336)
[jbossweb-7.2.0.Final-redhat-1.jar:7.2.0.Final-redhat-1]
         at

org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:856)
[jbossweb-7.2.0.Final-redhat-1.jar:7.2.0.Final-redhat-1]
         at

org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:653)
[jbossweb-7.2.0.Final-redhat-1.jar:7.2.0.Final-redhat-1]
         at

org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:920)
[jbossweb-7.2.0.Final-redhat-1.jar:7.2.0.Final-redhat-1]
at java.lang.Thread.run(Thread.java:722) [rt.jar:1.7.0_09-icedtea]

I'd like to catch the SAXException or the unmarshallingException in
order to indicate the invalid message part to the sender.
It's look like a library mismatching, but I can't figure out which one.



Reply via email to