You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@cxf.apache.org by Sergey Beryozkin <sb...@gmail.com> on 2013/06/03 20:30:02 UTC

Re: [CXF] problem with @Consumes("application/json")

Hi

You need to configure JSONProvider to map a prefix to a namespace (with a
namespace map property), or do not use namespaces at all in the incoming
message and then use JSONProvider to map it to what JAXB expects, using the
transformation feature,

another issue there is that it appears that you have a mix of JAX-RS 1.1 &
2.0 API on the classpath (NoSuchMethodExceptiom when a BadRequestException
is created)

Cheers, Sergey


On Mon, May 27, 2013 at 2:30 PM, ced_benoit <ce...@gmail.com> wrote:

>
> I have a method like this:
>
>     @PUT
>     @Path("/update")
>     @Consumes("application/json")
>     @Produces("application/json")
>     public Integer update(Customer pCust){
> }
>
> When I send a json query like this:
>
> {"ns2.Customer": {
>    "code": "Code1",
>    "firstname": "Ilan",
>    "lastname": "Chur",
> }}
>
> since Saopui, i have this error:
>
> mai 27, 2013 3:26:16 PM org.apache.cxf.jaxrs.provider.AbstractJAXBProvider
> handleExceptionStart
> WARNING: javax.xml.bind.UnmarshalException
>  - with linked exception:
> [com.sun.istack.SAXParseException2; columnNumber: 0; élément inattendu (URI
> : "", local : "ns2.Customer"). Les éléments attendus sont
> <{http://test.site.com/}Customer>,<{http://test.site.com/}delete>,<{
> http://test.site.com/}deleteResponse>,<{http://test.site.com/}findAll>,<{
> http://test.site.com/}findAllResponse>,<{http://test.site.com/}findById
> >,<{http://test.site.com/}findByIdResponse>,<{http://test.site.com/}insert
> >,<{http://test.site.com/}insertResponse>,<{http://test.site.com/}update
> >,<{http://test.site.com/}updateResponse>]
>         at
>
> com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.handleStreamException(UnmarshallerImpl.java:435)
>         at
>
> com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:372)
>         at
>
> com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:342)
>         at
>
> org.apache.cxf.jaxrs.provider.json.JSONProvider.readFrom(JSONProvider.java:229)
>         at
>
> org.apache.cxf.jaxrs.utils.JAXRSUtils.readFromMessageBodyReader(JAXRSUtils.java:1196)
>         at
>
> org.apache.cxf.jaxrs.utils.JAXRSUtils.readFromMessageBody(JAXRSUtils.java:1144)
>         at
> org.apache.cxf.jaxrs.utils.JAXRSUtils.processParameter(JAXRSUtils.java:695)
>         at
>
> org.apache.cxf.jaxrs.utils.JAXRSUtils.processParameters(JAXRSUtils.java:655)
>         at
>
> org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor.processRequest(JAXRSInInterceptor.java:238)
>         at
>
> org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor.handleMessage(JAXRSInInterceptor.java:99)
>         at
>
> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:271)
>         at
>
> org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121)
>         at
>
> org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:239)
>         at
>
> org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:223)
>         at
>
> org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:203)
>         at
>
> org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:137)
>         at
>
> org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:158)
>         at
>
> org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:243)
>         at
>
> org.apache.cxf.transport.servlet.AbstractHTTPServlet.doPut(AbstractHTTPServlet.java:180)
>         at javax.servlet.http.HttpServlet.service(HttpServlet.java:650)
>         at
>
> org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:219)
>         at
>
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
>         at
>
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
>         at
>
> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
>         at
>
> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
>         at
> org.apache.tomee.catalina.OpenEJBValve.invoke(OpenEJBValve.java:45)
>         at
>
> org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
>         at
>
> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
>         at
>
> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
>         at
> org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936)
>         at
>
> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
>         at
> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
>         at
>
> org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004)
>         at
>
> org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
>         at
>
> org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
>         at
>
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
>         at
>
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
>         at java.lang.Thread.run(Thread.java:722)
> Caused by: com.sun.istack.SAXParseException2; columnNumber: 0; élément
> inattendu (URI : "", local : "ns2.Customer"). Les éléments attendus sont
> <{http://test.site.com/}Customer>,<{http://test.site.com/}delete>,<{
> http://test.site.com/}deleteResponse>,<{http://test.site.com/}findAll>,<{
> http://test.site.com/}findAllResponse>,<{http://test.site.com/}findById
> >,<{http://test.site.com/}findByIdResponse>,<{http://test.site.com/}insert
> >,<{http://test.site.com/}insertResponse>,<{http://test.site.com/}update
> >,<{http://test.site.com/}updateResponse>
>         at
>
> com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext.handleEvent(UnmarshallingContext.java:662)
>         at
>
> com.sun.xml.bind.v2.runtime.unmarshaller.Loader.reportError(Loader.java:258)
>         at
>
> com.sun.xml.bind.v2.runtime.unmarshaller.Loader.reportError(Loader.java:253)
>         at
>
> com.sun.xml.bind.v2.runtime.unmarshaller.Loader.reportUnexpectedChildElement(Loader.java:120)
>         at
>
> com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext$DefaultRootLoader.childElement(UnmarshallingContext.java:1063)
>         at
>
> com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext._startElement(UnmarshallingContext.java:498)
>         at
>
> com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext.startElement(UnmarshallingContext.java:480)
>         at
>
> com.sun.xml.bind.v2.runtime.unmarshaller.InterningXmlVisitor.startElement(InterningXmlVisitor.java:75)
>         at
>
> com.sun.xml.bind.v2.runtime.unmarshaller.StAXStreamConnector.handleStartElement(StAXStreamConnector.java:246)
>         at
>
> com.sun.xml.bind.v2.runtime.unmarshaller.StAXStreamConnector.bridge(StAXStreamConnector.java:180)
>         at
>
> com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:370)
>         ... 36 more
> Caused by: javax.xml.bind.UnmarshalException: élément inattendu (URI : "",
> local : "ns2.Customer"). Les éléments attendus sont
> <{http://test.site.com/}Customer>,<{http://test.site.com/}delete>,<{
> http://test.site.com/}deleteResponse>,<{http://test.site.com/}findAll>,<{
> http://test.site.com/}findAllResponse>,<{http://test.site.com/}findById
> >,<{http://test.site.com/}findByIdResponse>,<{http://test.site.com/}insert
> >,<{http://test.site.com/}insertResponse>,<{http://test.site.com/}update
> >,<{http://test.site.com/}updateResponse>
>         ... 47 more
>
> mai 27, 2013 3:26:16 PM org.apache.catalina.core.StandardWrapperValve
> invoke
> SEVERE: Servlet.service() for servlet [CXF Servlet Cust] in context with
> path [/Project] threw exception [L''exécution de la servlet a lancé une
> exception] with root cause
> java.lang.NoSuchMethodError:
>
> javax.ws.rs.BadRequestException.validate(Ljavax/ws/rs/core/Response;Ljavax/ws/rs/core/Response$Status;)Ljavax/ws/rs/core/Response;
>         at
> javax.ws.rs.BadRequestException.<init>(BadRequestException.java:92)
>         at
>
> org.apache.cxf.jaxrs.provider.AbstractJAXBProvider.handleExceptionEnd(AbstractJAXBProvider.java:671)
>         at
>
> org.apache.cxf.jaxrs.provider.AbstractJAXBProvider.handleJAXBException(AbstractJAXBProvider.java:683)
>         at
>
> org.apache.cxf.jaxrs.provider.json.JSONProvider.readFrom(JSONProvider.java:243)
>         at
>
> org.apache.cxf.jaxrs.utils.JAXRSUtils.readFromMessageBodyReader(JAXRSUtils.java:1196)
>         at
>
> org.apache.cxf.jaxrs.utils.JAXRSUtils.readFromMessageBody(JAXRSUtils.java:1144)
>         at
> org.apache.cxf.jaxrs.utils.JAXRSUtils.processParameter(JAXRSUtils.java:695)
>         at
>
> org.apache.cxf.jaxrs.utils.JAXRSUtils.processParameters(JAXRSUtils.java:655)
>         at
>
> org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor.processRequest(JAXRSInInterceptor.java:238)
>         at
>
> org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor.handleMessage(JAXRSInInterceptor.java:99)
>         at
>
> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:271)
>         at
>
> org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121)
>         at
>
> org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:239)
>         at
>
> org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:223)
>         at
>
> org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:203)
>         at
>
> org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:137)
>         at
>
> org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:158)
>         at
>
> org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:243)
>         at
>
> org.apache.cxf.transport.servlet.AbstractHTTPServlet.doPut(AbstractHTTPServlet.java:180)
>         at javax.servlet.http.HttpServlet.service(HttpServlet.java:650)
>         at
>
> org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:219)
>         at
>
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
>         at
>
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
>         at
>
> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
>         at
>
> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
>         at
> org.apache.tomee.catalina.OpenEJBValve.invoke(OpenEJBValve.java:45)
>         at
>
> org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
>         at
>
> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
>         at
>
> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
>         at
> org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936)
>         at
>
> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
>         at
> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
>         at
>
> org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004)
>         at
>
> org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
>         at
>
> org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
>         at
>
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
>         at
>
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
>         at java.lang.Thread.run(Thread.java:722)
>
> Is anyone has an idea, how I can solve it. I would like to send JSON
> parameter
>
>
>
>
>
> --
> View this message in context:
> http://cxf.547215.n5.nabble.com/CXF-problem-with-Consumes-application-json-tp5728413.html
> Sent from the cxf-dev mailing list archive at Nabble.com.
>



-- 
Sergey Beryozkin

http://sberyozkin.blogspot.com
Talend - http://www.talend.com