You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@cxf.apache.org by javaworkinggirl <ja...@gmail.com> on 2014/07/26 06:43:35 UTC

Upgraded to 3.0.0, now Rest service receiving xml give 400 Bad request

Hi.

I upgraded to cxf 3.0.0 and now my REST service works fine with json but
returns 400 bad request with xml.  Same test with xml and json on my
previous system with cxf 2.7.6 passes.

What could I be missing?  Are there more/different .jars that need to be
included? Does an xml provider need to be specified?  Something else?

Thanks.

Response:
HTTP/1.1 400 Bad Request
Content-Length: 0
Date: Sat, 26 Jul 2014 04:37:21 GMT
Server: Jetty(8.1.15.v20140411)


pom.xml:
   <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-frontend-jaxrs</artifactId>
            <version>${apacheCxfVersion}</version>
         </dependency>
         <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-frontend-jaxws</artifactId>
            <version>${apacheCxfVersion}</version>
         </dependency>
         <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-transports-http-jetty</artifactId>
            <version>${apacheCxfVersion}</version>
         </dependency>

         <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-core</artifactId>
            <version>${apacheCxfVersion}</version>
            <exclusions>
               <exclusion>
                  <groupId>commons-logging</groupId>
                  <artifactId>commons-logging</artifactId>
               </exclusion>
            </exclusions>
         </dependency>

        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-rs-client</artifactId>
            <version>${apacheCxfVersion}</version>
            <exclusions>
               <exclusion>
                  <groupId>commons-logging</groupId>
                  <artifactId>commons-logging</artifactId>
               </exclusion>
            </exclusions>
         </dependency>

applicationContext.xml:
  
      <jaxrs:server id="ecpWebServices"
basePackages="com.twc.ctg.ecp.service.rest.custom"
address="http://0.0.0.0:8877" depends-on="activeMQConnectionFactory">
         <jaxrs:inInterceptors>
            <ref bean="validationInInterceptor"/>
         </jaxrs:inInterceptors>
         <jaxrs:outInterceptors>
            <ref bean="validationOutInterceptor"/>
         </jaxrs:outInterceptors>
         <jaxrs:serviceBeans>
            <ref bean="ecpAdminRestServiceV1"/>
            <ref bean="ecpApplicationRestServiceV1"/>
            <ref bean="ecpEntitlementRestServiceV1"/>
            <ref bean="ecpEntitlementRestServiceV2"/>
            <ref bean="ecpMetricsRestServiceV1"/>
            <ref bean="ecpAlertsRestServiceV1"/>
            <ref bean="ecpCDRestServiceV1"/>
         </jaxrs:serviceBeans>
         <jaxrs:providers>
            <bean
class="com.fasterxml.jackson.jaxrs.json.JacksonJaxbJsonProvider"/>
            <ref bean="genericRestExceptionMapper"/>
         </jaxrs:providers>

REST service:
 @POST
   @Path("/entitlement")
   @Consumes({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
   @HeaderValidation
   @Valid
   public Response postEntitlement(@Context final HttpServletRequest
request, @NotNull @Valid final Entitlement Entitlement) throws
GenericRestException
   {
. . .
}




--
View this message in context: http://cxf.547215.n5.nabble.com/Upgraded-to-3-0-0-now-Rest-service-receiving-xml-give-400-Bad-request-tp5746953.html
Sent from the cxf-user mailing list archive at Nabble.com.

Re: Upgraded to 3.0.0, now Rest service receiving xml give 400 Bad request

Posted by javaworkinggirl <ja...@gmail.com>.
Sergey,

I solved my problems.
What is needed is an abstract pojo class with no @XmlRootElement, that my 2
concrete classes then inherit from both with the same
@XmlRootElement(name="Order").  Probably this way the JAXB can figure out
which class to instantiate.

Thanks for your help!

Tara



--
View this message in context: http://cxf.547215.n5.nabble.com/Upgraded-to-3-0-0-now-Rest-service-receiving-xml-give-400-Bad-request-tp5746953p5747004.html
Sent from the cxf-user mailing list archive at Nabble.com.

Re: Upgraded to 3.0.0, now Rest service receiving xml give 400 Bad request

Posted by javaworkinggirl <ja...@gmail.com>.
Here is the whole stack trace.  So this is with 2 pojo java beans that have
the same @XmlRootElement

2014-07-28 14:38:53,564 DEBUG [RemoveTimeBasedEntitlementsExpiredService
RUNNING] com.twc.ctg.ecp.service.app.metric.MetricsTimers - registered new
timer in metrics registry
2014-07-28 14:38:53,566 DEBUG [RemoveTimeBasedEntitlementsExpiredService
RUNNING]
com.twc.ctg.ecp.persistence.mappers.TimeBasedEntitlementBatchMapper.deleteTimeBasedEntitlementExpired
- ooo Using Connection
[ProxyConnection[PooledConnection[oracle.jdbc.driver.T4CConnection@2ebc1316
]]]
2014-07-28 14:38:53,566 DEBUG [RemoveTimeBasedEntitlementsExpiredService
RUNNING]
com.twc.ctg.ecp.persistence.mappers.TimeBasedEntitlementBatchMapper.deleteTimeBasedEntitlementExpired
- ==>  Preparing: delete from time_based_entitlement tbe where
tbe.viewing_period_end < ?
2014-07-28 14:38:53,568 DEBUG [RemoveTimeBasedEntitlementsExpiredService
RUNNING]
com.twc.ctg.ecp.persistence.mappers.TimeBasedEntitlementBatchMapper.deleteTimeBasedEntitlementExpired
- ==> Parameters: 1406579903564(Long)
2014-07-28 14:38:53,570 DEBUG [RemoveTimeBasedEntitlementsExpiredService
RUNNING]
com.twc.ctg.ecp.service.services.RemoveTimeBasedEntitlementsExpiredService
- RemoveTimeBasedEntitlementsExpiredService runOneIteration end
2014-07-28 14:38:55,387 INFO  [qtp1312169486-231]
org.apache.cxf.interceptor.LoggingInInterceptor - Inbound Message
----------------------------
ID: 2
Address: http://localhost:8877/ecp/contentdirect/v1/entitlement
Encoding: ISO-8859-1
Http-Method: POST
Content-Type: application/xml
Headers: {accept-encoding=[gzip,deflate],
ClientMessageId=[clientmessageid], connection=[keep-alive],
Content-Length=[393], content-type=[application/xml],
CorrelationId=[correlationid], CustomerIp=[10.254.222.222],
Host=[localhost:8877], User-Agent=[Apache-HttpClient/4.1.1 (java 1.5)]}
Payload: <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Order>
   <ViewingPeriodStart>1689848400000</ViewingPeriodStart>
   <ViewingPeriodEnd>1691489999000</ViewingPeriodEnd>
   <DivisionId>NYC.8150</DivisionId>
   <MasId>NYC</MasId>
   <AccountNumber>8150100040000039</AccountNumber>
   <ResourceId>IND_LIBRARY::INMV0114000007009062</ResourceId>
   <OrderId>fjeo48kgjuuroh</OrderId>
</Order>
--------------------------------------
2014-07-28 14:38:55,439 WARN  [qtp1312169486-231]
org.apache.cxf.jaxrs.provider.AbstractJAXBProvider -
java.lang.ClassCastException: Cannot cast
com.twc.ctg.ecp.model.csg.CsgEntitlementBase to
com.twc.ctg.ecp.model.csg.CsgEntitlement
at java.lang.Class.cast(Class.java:3094)
at
org.apache.cxf.jaxrs.provider.JAXBElementProvider.readFrom(JAXBElementProvider.java:203)
at
org.apache.cxf.jaxrs.utils.JAXRSUtils.readFromMessageBodyReader(JAXRSUtils.java:1325)
at
org.apache.cxf.jaxrs.utils.JAXRSUtils.readFromMessageBody(JAXRSUtils.java:1276)
at
org.apache.cxf.jaxrs.utils.JAXRSUtils.processParameter(JAXRSUtils.java:815)
at
org.apache.cxf.jaxrs.utils.JAXRSUtils.processParameters(JAXRSUtils.java:778)
at
org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor.processRequest(JAXRSInInterceptor.java:212)
at
org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor.handleMessage(JAXRSInInterceptor.java:76)
at
org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:307)
at
org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121)
at
org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:243)
at
org.apache.cxf.transport.http_jetty.JettyHTTPDestination.doService(JettyHTTPDestination.java:259)
at
org.apache.cxf.transport.http_jetty.JettyHTTPHandler.handle(JettyHTTPHandler.java:65)
at
org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1088)
at
org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1024)
at
org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135)
at
org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:255)
at
org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116)
at org.eclipse.jetty.server.Server.handle(Server.java:370)
at
org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:494)
at
org.eclipse.jetty.server.AbstractHttpConnection.content(AbstractHttpConnection.java:982)
at
org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.content(AbstractHttpConnection.java:1043)
at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:865)
at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:240)
at
org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:82)
at
org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:696)
at
org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:53)
at
org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608)
at
org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:543)
at java.lang.Thread.run(Thread.java:744)

2014-07-28 14:38:55,445 WARN  [qtp1312169486-231]
org.apache.cxf.jaxrs.impl.WebApplicationExceptionMapper -
javax.ws.rs.BadRequestException: HTTP 400 Bad Request
at
org.apache.cxf.jaxrs.utils.SpecExceptions.toBadRequestException(SpecExceptions.java:84)
at
org.apache.cxf.jaxrs.utils.ExceptionUtils.toBadRequestException(ExceptionUtils.java:109)
at
org.apache.cxf.jaxrs.provider.JAXBElementProvider.readFrom(JAXBElementProvider.java:213)
at
org.apache.cxf.jaxrs.utils.JAXRSUtils.readFromMessageBodyReader(JAXRSUtils.java:1325)
at
org.apache.cxf.jaxrs.utils.JAXRSUtils.readFromMessageBody(JAXRSUtils.java:1276)
at
org.apache.cxf.jaxrs.utils.JAXRSUtils.processParameter(JAXRSUtils.java:815)
at
org.apache.cxf.jaxrs.utils.JAXRSUtils.processParameters(JAXRSUtils.java:778)
at
org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor.processRequest(JAXRSInInterceptor.java:212)
at
org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor.handleMessage(JAXRSInInterceptor.java:76)
at
org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:307)
at
org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121)
at
org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:243)
at
org.apache.cxf.transport.http_jetty.JettyHTTPDestination.doService(JettyHTTPDestination.java:259)
at
org.apache.cxf.transport.http_jetty.JettyHTTPHandler.handle(JettyHTTPHandler.java:65)
at
org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1088)
at
org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1024)
at
org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135)
at
org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:255)
at
org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116)
at org.eclipse.jetty.server.Server.handle(Server.java:370)
at
org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:494)
at
org.eclipse.jetty.server.AbstractHttpConnection.content(AbstractHttpConnection.java:982)
at
org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.content(AbstractHttpConnection.java:1043)
at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:865)
at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:240)
at
org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:82)
at
org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:696)
at
org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:53)
at
org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608)
at
org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:543)
at java.lang.Thread.run(Thread.java:744)
Caused by: java.lang.ClassCastException: Cannot cast
com.twc.ctg.ecp.model.csg.CsgEntitlementBase to
com.twc.ctg.ecp.model.csg.CsgEntitlement
at java.lang.Class.cast(Class.java:3094)
at
org.apache.cxf.jaxrs.provider.JAXBElementProvider.readFrom(JAXBElementProvider.java:203)
... 28 more

2014-07-28 14:38:55,446 INFO  [qtp1312169486-231]
org.apache.cxf.interceptor.LoggingOutInterceptor - Outbound Message
---------------------------
ID: 2
Response-Code: 400
Content-Type:
Headers: {Date=[Mon, 28 Jul 2014 20:38:55 GMT], Content-Length=[0]}


On Mon, Jul 28, 2014 at 1:43 PM, Sergey Beryozkin [via CXF] <
ml-node+s547215n5747001h67@n5.nabble.com> wrote:

> Hi
> On 27/07/14 22:44, javaworkinggirl wrote:
> > Yes this error has to do with the changes I made  to use jsr-303 bean
> > validation.
> > ERROR:
> > java.lang.ClassCastException: Cannot cast
> > com.twc.ctg.ecp.model.csg.CsgEntitlementBase to
> > com.twc.ctg.ecp.model.csg.CsgEntitlement
> >
>
> Where is this exception coming from ? Can you provide more info if it is
> coming from CXF ?
>
> Cheers, Sergey
>
> > Originally, before bean validation additions, we had one class that had
> 7
> > fields.  on a PUT only 5 were required, on a POST 2 additional (total of
> >   7) are required.  We did the validation manually in the rest service.
> >   This worked for json and xml.
> >
> > Then I upgraded to cxf 3.0.0 to use Bean Validation.  I ended up
> spliting
> > the class into 2, one was the base had 5 required fields (for the PUT).
> >   Next class inherited from the base class and added the 2 other fields.
> >   BOTH classes have the same @XmlRootElement (our client wants it this
> way).
> >   I was getting a class cast exception when trying the xml request.  It
> > worked OK for json.
> >
> > So is it that the marshaller doesn't like having the same
> @XmlRootElement
> > for 2 classes?
> >
> > What is a better solution for this situation?
> >
> >
> > On Sun, Jul 27, 2014 at 12:42 PM, Sergey Beryozkin [via CXF] <
> > [hidden email] <http://user/SendEmail.jtp?type=node&node=5747001&i=0>>
> wrote:
> >
> >> Hi
> >>
> >> It may be the validation related issue. Can you disable the validation
> >> and retry ?
> >>
> >> Sergey
> >> On 26/07/14 07:43, javaworkinggirl wrote:
> >>
> >>> Hi.
> >>>
> >>> I upgraded to cxf 3.0.0 and now my REST service works fine with json
> but
> >>> returns 400 bad request with xml.  Same test with xml and json on my
> >>> previous system with cxf 2.7.6 passes.
> >>>
> >>> What could I be missing?  Are there more/different .jars that need to
> be
> >>> included? Does an xml provider need to be specified?  Something else?
> >>>
> >>> Thanks.
> >>>
> >>> Response:
> >>> HTTP/1.1 400 Bad Request
> >>> Content-Length: 0
> >>> Date: Sat, 26 Jul 2014 04:37:21 GMT
> >>> Server: Jetty(8.1.15.v20140411)
> >>>
> >>>
> >>> pom.xml:
> >>>      <dependency>
> >>>               <groupId>org.apache.cxf</groupId>
> >>>               <artifactId>cxf-rt-frontend-jaxrs</artifactId>
> >>>               <version>${apacheCxfVersion}</version>
> >>>            </dependency>
> >>>            <dependency>
> >>>               <groupId>org.apache.cxf</groupId>
> >>>               <artifactId>cxf-rt-frontend-jaxws</artifactId>
> >>>               <version>${apacheCxfVersion}</version>
> >>>            </dependency>
> >>>            <dependency>
> >>>               <groupId>org.apache.cxf</groupId>
> >>>               <artifactId>cxf-rt-transports-http-jetty</artifactId>
> >>>               <version>${apacheCxfVersion}</version>
> >>>            </dependency>
> >>>
> >>>            <dependency>
> >>>               <groupId>org.apache.cxf</groupId>
> >>>               <artifactId>cxf-core</artifactId>
> >>>               <version>${apacheCxfVersion}</version>
> >>>               <exclusions>
> >>>                  <exclusion>
> >>>                     <groupId>commons-logging</groupId>
> >>>                     <artifactId>commons-logging</artifactId>
> >>>                  </exclusion>
> >>>               </exclusions>
> >>>            </dependency>
> >>>
> >>>           <dependency>
> >>>               <groupId>org.apache.cxf</groupId>
> >>>               <artifactId>cxf-rt-rs-client</artifactId>
> >>>               <version>${apacheCxfVersion}</version>
> >>>               <exclusions>
> >>>                  <exclusion>
> >>>                     <groupId>commons-logging</groupId>
> >>>                     <artifactId>commons-logging</artifactId>
> >>>                  </exclusion>
> >>>               </exclusions>
> >>>            </dependency>
> >>>
> >>> applicationContext.xml:
> >>>
> >>>         <jaxrs:server id="ecpWebServices"
> >>> basePackages="com.twc.ctg.ecp.service.rest.custom"
> >>> address="http://0.0.0.0:8877" depends-on="activeMQConnectionFactory">
> >>>            <jaxrs:inInterceptors>
> >>>               <ref bean="validationInInterceptor"/>
> >>>            </jaxrs:inInterceptors>
> >>>            <jaxrs:outInterceptors>
> >>>               <ref bean="validationOutInterceptor"/>
> >>>            </jaxrs:outInterceptors>
> >>>            <jaxrs:serviceBeans>
> >>>               <ref bean="ecpAdminRestServiceV1"/>
> >>>               <ref bean="ecpApplicationRestServiceV1"/>
> >>>               <ref bean="ecpEntitlementRestServiceV1"/>
> >>>               <ref bean="ecpEntitlementRestServiceV2"/>
> >>>               <ref bean="ecpMetricsRestServiceV1"/>
> >>>               <ref bean="ecpAlertsRestServiceV1"/>
> >>>               <ref bean="ecpCDRestServiceV1"/>
> >>>            </jaxrs:serviceBeans>
> >>>            <jaxrs:providers>
> >>>               <bean
> >>> class="com.fasterxml.jackson.jaxrs.json.JacksonJaxbJsonProvider"/>
> >>>               <ref bean="genericRestExceptionMapper"/>
> >>>            </jaxrs:providers>
> >>>
> >>> REST service:
> >>>    @POST
> >>>      @Path("/entitlement")
> >>>      @Consumes({MediaType.APPLICATION_JSON,
> MediaType.APPLICATION_XML})
> >>>      @HeaderValidation
> >>>      @Valid
> >>>      public Response postEntitlement(@Context final HttpServletRequest
> >>> request, @NotNull @Valid final Entitlement Entitlement) throws
> >>> GenericRestException
> >>>      {
> >>> . . .
> >>> }
> >>>
> >>>
> >>>
> >>>
> >>> --
> >>> View this message in context:
> >>
> http://cxf.547215.n5.nabble.com/Upgraded-to-3-0-0-now-Rest-service-receiving-xml-give-400-Bad-request-tp5746953.html
> >>> Sent from the cxf-user mailing list archive at Nabble.com.
> >>>
> >>
> >>
> >>
> >> ------------------------------
> >>   If you reply to this email, your message will be added to the
> discussion
> >> below:
> >>
> >>
> http://cxf.547215.n5.nabble.com/Upgraded-to-3-0-0-now-Rest-service-receiving-xml-give-400-Bad-request-tp5746953p5746966.html
> >>   To unsubscribe from Upgraded to 3.0.0, now Rest service receiving xml
> >> give 400 Bad request, click here
> >> <
>
> >> .
> >> NAML
> >> <
> http://cxf.547215.n5.nabble.com/template/NamlServlet.jtp?macro=macro_viewer&id=instant_html%21nabble%3Aemail.naml&base=nabble.naml.namespaces.BasicNamespace-nabble.view.web.template.NabbleNamespace-nabble.view.web.template.NodeNamespace&breadcrumbs=notify_subscribers%21nabble%3Aemail.naml-instant_emails%21nabble%3Aemail.naml-send_instant_email%21nabble%3Aemail.naml>
>
> >>
> >
> >
> >
> >
> > --
> > View this message in context:
> http://cxf.547215.n5.nabble.com/Upgraded-to-3-0-0-now-Rest-service-receiving-xml-give-400-Bad-request-tp5746953p5746967.html
>
> > Sent from the cxf-user mailing list archive at Nabble.com.
> >
>
>
> --
> Sergey Beryozkin
>
> Talend Community Coders
> http://coders.talend.com/
>
> Blog: http://sberyozkin.blogspot.com
>
>
> ------------------------------
>  If you reply to this email, your message will be added to the discussion
> below:
>
> http://cxf.547215.n5.nabble.com/Upgraded-to-3-0-0-now-Rest-service-receiving-xml-give-400-Bad-request-tp5746953p5747001.html
>  To unsubscribe from Upgraded to 3.0.0, now Rest service receiving xml
> give 400 Bad request, click here
> <http://cxf.547215.n5.nabble.com/template/NamlServlet.jtp?macro=unsubscribe_by_code&node=5746953&code=amF2YXdvcmtpbmdnaXJsQGdtYWlsLmNvbXw1NzQ2OTUzfC0xMTE1Njg5NTY4>
> .
> NAML
> <http://cxf.547215.n5.nabble.com/template/NamlServlet.jtp?macro=macro_viewer&id=instant_html%21nabble%3Aemail.naml&base=nabble.naml.namespaces.BasicNamespace-nabble.view.web.template.NabbleNamespace-nabble.view.web.template.NodeNamespace&breadcrumbs=notify_subscribers%21nabble%3Aemail.naml-instant_emails%21nabble%3Aemail.naml-send_instant_email%21nabble%3Aemail.naml>
>




--
View this message in context: http://cxf.547215.n5.nabble.com/Upgraded-to-3-0-0-now-Rest-service-receiving-xml-give-400-Bad-request-tp5746953p5747003.html
Sent from the cxf-user mailing list archive at Nabble.com.

Re: Upgraded to 3.0.0, now Rest service receiving xml give 400 Bad request

Posted by Sergey Beryozkin <sb...@gmail.com>.
Hi
On 27/07/14 22:44, javaworkinggirl wrote:
> Yes this error has to do with the changes I made  to use jsr-303 bean
> validation.
> ERROR:
> java.lang.ClassCastException: Cannot cast
> com.twc.ctg.ecp.model.csg.CsgEntitlementBase to
> com.twc.ctg.ecp.model.csg.CsgEntitlement
>

Where is this exception coming from ? Can you provide more info if it is 
coming from CXF ?

Cheers, Sergey

> Originally, before bean validation additions, we had one class that had 7
> fields.  on a PUT only 5 were required, on a POST 2 additional (total of
>   7) are required.  We did the validation manually in the rest service.
>   This worked for json and xml.
>
> Then I upgraded to cxf 3.0.0 to use Bean Validation.  I ended up spliting
> the class into 2, one was the base had 5 required fields (for the PUT).
>   Next class inherited from the base class and added the 2 other fields.
>   BOTH classes have the same @XmlRootElement (our client wants it this way).
>   I was getting a class cast exception when trying the xml request.  It
> worked OK for json.
>
> So is it that the marshaller doesn't like having the same @XmlRootElement
> for 2 classes?
>
> What is a better solution for this situation?
>
>
> On Sun, Jul 27, 2014 at 12:42 PM, Sergey Beryozkin [via CXF] <
> ml-node+s547215n5746966h82@n5.nabble.com> wrote:
>
>> Hi
>>
>> It may be the validation related issue. Can you disable the validation
>> and retry ?
>>
>> Sergey
>> On 26/07/14 07:43, javaworkinggirl wrote:
>>
>>> Hi.
>>>
>>> I upgraded to cxf 3.0.0 and now my REST service works fine with json but
>>> returns 400 bad request with xml.  Same test with xml and json on my
>>> previous system with cxf 2.7.6 passes.
>>>
>>> What could I be missing?  Are there more/different .jars that need to be
>>> included? Does an xml provider need to be specified?  Something else?
>>>
>>> Thanks.
>>>
>>> Response:
>>> HTTP/1.1 400 Bad Request
>>> Content-Length: 0
>>> Date: Sat, 26 Jul 2014 04:37:21 GMT
>>> Server: Jetty(8.1.15.v20140411)
>>>
>>>
>>> pom.xml:
>>>      <dependency>
>>>               <groupId>org.apache.cxf</groupId>
>>>               <artifactId>cxf-rt-frontend-jaxrs</artifactId>
>>>               <version>${apacheCxfVersion}</version>
>>>            </dependency>
>>>            <dependency>
>>>               <groupId>org.apache.cxf</groupId>
>>>               <artifactId>cxf-rt-frontend-jaxws</artifactId>
>>>               <version>${apacheCxfVersion}</version>
>>>            </dependency>
>>>            <dependency>
>>>               <groupId>org.apache.cxf</groupId>
>>>               <artifactId>cxf-rt-transports-http-jetty</artifactId>
>>>               <version>${apacheCxfVersion}</version>
>>>            </dependency>
>>>
>>>            <dependency>
>>>               <groupId>org.apache.cxf</groupId>
>>>               <artifactId>cxf-core</artifactId>
>>>               <version>${apacheCxfVersion}</version>
>>>               <exclusions>
>>>                  <exclusion>
>>>                     <groupId>commons-logging</groupId>
>>>                     <artifactId>commons-logging</artifactId>
>>>                  </exclusion>
>>>               </exclusions>
>>>            </dependency>
>>>
>>>           <dependency>
>>>               <groupId>org.apache.cxf</groupId>
>>>               <artifactId>cxf-rt-rs-client</artifactId>
>>>               <version>${apacheCxfVersion}</version>
>>>               <exclusions>
>>>                  <exclusion>
>>>                     <groupId>commons-logging</groupId>
>>>                     <artifactId>commons-logging</artifactId>
>>>                  </exclusion>
>>>               </exclusions>
>>>            </dependency>
>>>
>>> applicationContext.xml:
>>>
>>>         <jaxrs:server id="ecpWebServices"
>>> basePackages="com.twc.ctg.ecp.service.rest.custom"
>>> address="http://0.0.0.0:8877" depends-on="activeMQConnectionFactory">
>>>            <jaxrs:inInterceptors>
>>>               <ref bean="validationInInterceptor"/>
>>>            </jaxrs:inInterceptors>
>>>            <jaxrs:outInterceptors>
>>>               <ref bean="validationOutInterceptor"/>
>>>            </jaxrs:outInterceptors>
>>>            <jaxrs:serviceBeans>
>>>               <ref bean="ecpAdminRestServiceV1"/>
>>>               <ref bean="ecpApplicationRestServiceV1"/>
>>>               <ref bean="ecpEntitlementRestServiceV1"/>
>>>               <ref bean="ecpEntitlementRestServiceV2"/>
>>>               <ref bean="ecpMetricsRestServiceV1"/>
>>>               <ref bean="ecpAlertsRestServiceV1"/>
>>>               <ref bean="ecpCDRestServiceV1"/>
>>>            </jaxrs:serviceBeans>
>>>            <jaxrs:providers>
>>>               <bean
>>> class="com.fasterxml.jackson.jaxrs.json.JacksonJaxbJsonProvider"/>
>>>               <ref bean="genericRestExceptionMapper"/>
>>>            </jaxrs:providers>
>>>
>>> REST service:
>>>    @POST
>>>      @Path("/entitlement")
>>>      @Consumes({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
>>>      @HeaderValidation
>>>      @Valid
>>>      public Response postEntitlement(@Context final HttpServletRequest
>>> request, @NotNull @Valid final Entitlement Entitlement) throws
>>> GenericRestException
>>>      {
>>> . . .
>>> }
>>>
>>>
>>>
>>>
>>> --
>>> View this message in context:
>> http://cxf.547215.n5.nabble.com/Upgraded-to-3-0-0-now-Rest-service-receiving-xml-give-400-Bad-request-tp5746953.html
>>> Sent from the cxf-user mailing list archive at Nabble.com.
>>>
>>
>>
>>
>> ------------------------------
>>   If you reply to this email, your message will be added to the discussion
>> below:
>>
>> http://cxf.547215.n5.nabble.com/Upgraded-to-3-0-0-now-Rest-service-receiving-xml-give-400-Bad-request-tp5746953p5746966.html
>>   To unsubscribe from Upgraded to 3.0.0, now Rest service receiving xml
>> give 400 Bad request, click here
>> <http://cxf.547215.n5.nabble.com/template/NamlServlet.jtp?macro=unsubscribe_by_code&node=5746953&code=amF2YXdvcmtpbmdnaXJsQGdtYWlsLmNvbXw1NzQ2OTUzfC0xMTE1Njg5NTY4>
>> .
>> NAML
>> <http://cxf.547215.n5.nabble.com/template/NamlServlet.jtp?macro=macro_viewer&id=instant_html%21nabble%3Aemail.naml&base=nabble.naml.namespaces.BasicNamespace-nabble.view.web.template.NabbleNamespace-nabble.view.web.template.NodeNamespace&breadcrumbs=notify_subscribers%21nabble%3Aemail.naml-instant_emails%21nabble%3Aemail.naml-send_instant_email%21nabble%3Aemail.naml>
>>
>
>
>
>
> --
> View this message in context: http://cxf.547215.n5.nabble.com/Upgraded-to-3-0-0-now-Rest-service-receiving-xml-give-400-Bad-request-tp5746953p5746967.html
> Sent from the cxf-user mailing list archive at Nabble.com.
>


-- 
Sergey Beryozkin

Talend Community Coders
http://coders.talend.com/

Blog: http://sberyozkin.blogspot.com

Re: Upgraded to 3.0.0, now Rest service receiving xml give 400 Bad request

Posted by javaworkinggirl <ja...@gmail.com>.
Yes this error has to do with the changes I made  to use jsr-303 bean
validation.
ERROR:
java.lang.ClassCastException: Cannot cast
com.twc.ctg.ecp.model.csg.CsgEntitlementBase to
com.twc.ctg.ecp.model.csg.CsgEntitlement

Originally, before bean validation additions, we had one class that had 7
fields.  on a PUT only 5 were required, on a POST 2 additional (total of
 7) are required.  We did the validation manually in the rest service.
 This worked for json and xml.

Then I upgraded to cxf 3.0.0 to use Bean Validation.  I ended up spliting
the class into 2, one was the base had 5 required fields (for the PUT).
 Next class inherited from the base class and added the 2 other fields.
 BOTH classes have the same @XmlRootElement (our client wants it this way).
 I was getting a class cast exception when trying the xml request.  It
worked OK for json.

So is it that the marshaller doesn't like having the same @XmlRootElement
for 2 classes?

What is a better solution for this situation?


On Sun, Jul 27, 2014 at 12:42 PM, Sergey Beryozkin [via CXF] <
ml-node+s547215n5746966h82@n5.nabble.com> wrote:

> Hi
>
> It may be the validation related issue. Can you disable the validation
> and retry ?
>
> Sergey
> On 26/07/14 07:43, javaworkinggirl wrote:
>
> > Hi.
> >
> > I upgraded to cxf 3.0.0 and now my REST service works fine with json but
> > returns 400 bad request with xml.  Same test with xml and json on my
> > previous system with cxf 2.7.6 passes.
> >
> > What could I be missing?  Are there more/different .jars that need to be
> > included? Does an xml provider need to be specified?  Something else?
> >
> > Thanks.
> >
> > Response:
> > HTTP/1.1 400 Bad Request
> > Content-Length: 0
> > Date: Sat, 26 Jul 2014 04:37:21 GMT
> > Server: Jetty(8.1.15.v20140411)
> >
> >
> > pom.xml:
> >     <dependency>
> >              <groupId>org.apache.cxf</groupId>
> >              <artifactId>cxf-rt-frontend-jaxrs</artifactId>
> >              <version>${apacheCxfVersion}</version>
> >           </dependency>
> >           <dependency>
> >              <groupId>org.apache.cxf</groupId>
> >              <artifactId>cxf-rt-frontend-jaxws</artifactId>
> >              <version>${apacheCxfVersion}</version>
> >           </dependency>
> >           <dependency>
> >              <groupId>org.apache.cxf</groupId>
> >              <artifactId>cxf-rt-transports-http-jetty</artifactId>
> >              <version>${apacheCxfVersion}</version>
> >           </dependency>
> >
> >           <dependency>
> >              <groupId>org.apache.cxf</groupId>
> >              <artifactId>cxf-core</artifactId>
> >              <version>${apacheCxfVersion}</version>
> >              <exclusions>
> >                 <exclusion>
> >                    <groupId>commons-logging</groupId>
> >                    <artifactId>commons-logging</artifactId>
> >                 </exclusion>
> >              </exclusions>
> >           </dependency>
> >
> >          <dependency>
> >              <groupId>org.apache.cxf</groupId>
> >              <artifactId>cxf-rt-rs-client</artifactId>
> >              <version>${apacheCxfVersion}</version>
> >              <exclusions>
> >                 <exclusion>
> >                    <groupId>commons-logging</groupId>
> >                    <artifactId>commons-logging</artifactId>
> >                 </exclusion>
> >              </exclusions>
> >           </dependency>
> >
> > applicationContext.xml:
> >
> >        <jaxrs:server id="ecpWebServices"
> > basePackages="com.twc.ctg.ecp.service.rest.custom"
> > address="http://0.0.0.0:8877" depends-on="activeMQConnectionFactory">
> >           <jaxrs:inInterceptors>
> >              <ref bean="validationInInterceptor"/>
> >           </jaxrs:inInterceptors>
> >           <jaxrs:outInterceptors>
> >              <ref bean="validationOutInterceptor"/>
> >           </jaxrs:outInterceptors>
> >           <jaxrs:serviceBeans>
> >              <ref bean="ecpAdminRestServiceV1"/>
> >              <ref bean="ecpApplicationRestServiceV1"/>
> >              <ref bean="ecpEntitlementRestServiceV1"/>
> >              <ref bean="ecpEntitlementRestServiceV2"/>
> >              <ref bean="ecpMetricsRestServiceV1"/>
> >              <ref bean="ecpAlertsRestServiceV1"/>
> >              <ref bean="ecpCDRestServiceV1"/>
> >           </jaxrs:serviceBeans>
> >           <jaxrs:providers>
> >              <bean
> > class="com.fasterxml.jackson.jaxrs.json.JacksonJaxbJsonProvider"/>
> >              <ref bean="genericRestExceptionMapper"/>
> >           </jaxrs:providers>
> >
> > REST service:
> >   @POST
> >     @Path("/entitlement")
> >     @Consumes({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
> >     @HeaderValidation
> >     @Valid
> >     public Response postEntitlement(@Context final HttpServletRequest
> > request, @NotNull @Valid final Entitlement Entitlement) throws
> > GenericRestException
> >     {
> > . . .
> > }
> >
> >
> >
> >
> > --
> > View this message in context:
> http://cxf.547215.n5.nabble.com/Upgraded-to-3-0-0-now-Rest-service-receiving-xml-give-400-Bad-request-tp5746953.html
> > Sent from the cxf-user mailing list archive at Nabble.com.
> >
>
>
>
> ------------------------------
>  If you reply to this email, your message will be added to the discussion
> below:
>
> http://cxf.547215.n5.nabble.com/Upgraded-to-3-0-0-now-Rest-service-receiving-xml-give-400-Bad-request-tp5746953p5746966.html
>  To unsubscribe from Upgraded to 3.0.0, now Rest service receiving xml
> give 400 Bad request, click here
> <http://cxf.547215.n5.nabble.com/template/NamlServlet.jtp?macro=unsubscribe_by_code&node=5746953&code=amF2YXdvcmtpbmdnaXJsQGdtYWlsLmNvbXw1NzQ2OTUzfC0xMTE1Njg5NTY4>
> .
> NAML
> <http://cxf.547215.n5.nabble.com/template/NamlServlet.jtp?macro=macro_viewer&id=instant_html%21nabble%3Aemail.naml&base=nabble.naml.namespaces.BasicNamespace-nabble.view.web.template.NabbleNamespace-nabble.view.web.template.NodeNamespace&breadcrumbs=notify_subscribers%21nabble%3Aemail.naml-instant_emails%21nabble%3Aemail.naml-send_instant_email%21nabble%3Aemail.naml>
>




--
View this message in context: http://cxf.547215.n5.nabble.com/Upgraded-to-3-0-0-now-Rest-service-receiving-xml-give-400-Bad-request-tp5746953p5746967.html
Sent from the cxf-user mailing list archive at Nabble.com.

Re: Upgraded to 3.0.0, now Rest service receiving xml give 400 Bad request

Posted by Sergey Beryozkin <sb...@gmail.com>.
Hi

It may be the validation related issue. Can you disable the validation 
and retry ?

Sergey
On 26/07/14 07:43, javaworkinggirl wrote:
> Hi.
>
> I upgraded to cxf 3.0.0 and now my REST service works fine with json but
> returns 400 bad request with xml.  Same test with xml and json on my
> previous system with cxf 2.7.6 passes.
>
> What could I be missing?  Are there more/different .jars that need to be
> included? Does an xml provider need to be specified?  Something else?
>
> Thanks.
>
> Response:
> HTTP/1.1 400 Bad Request
> Content-Length: 0
> Date: Sat, 26 Jul 2014 04:37:21 GMT
> Server: Jetty(8.1.15.v20140411)
>
>
> pom.xml:
>     <dependency>
>              <groupId>org.apache.cxf</groupId>
>              <artifactId>cxf-rt-frontend-jaxrs</artifactId>
>              <version>${apacheCxfVersion}</version>
>           </dependency>
>           <dependency>
>              <groupId>org.apache.cxf</groupId>
>              <artifactId>cxf-rt-frontend-jaxws</artifactId>
>              <version>${apacheCxfVersion}</version>
>           </dependency>
>           <dependency>
>              <groupId>org.apache.cxf</groupId>
>              <artifactId>cxf-rt-transports-http-jetty</artifactId>
>              <version>${apacheCxfVersion}</version>
>           </dependency>
>
>           <dependency>
>              <groupId>org.apache.cxf</groupId>
>              <artifactId>cxf-core</artifactId>
>              <version>${apacheCxfVersion}</version>
>              <exclusions>
>                 <exclusion>
>                    <groupId>commons-logging</groupId>
>                    <artifactId>commons-logging</artifactId>
>                 </exclusion>
>              </exclusions>
>           </dependency>
>
>          <dependency>
>              <groupId>org.apache.cxf</groupId>
>              <artifactId>cxf-rt-rs-client</artifactId>
>              <version>${apacheCxfVersion}</version>
>              <exclusions>
>                 <exclusion>
>                    <groupId>commons-logging</groupId>
>                    <artifactId>commons-logging</artifactId>
>                 </exclusion>
>              </exclusions>
>           </dependency>
>
> applicationContext.xml:
>
>        <jaxrs:server id="ecpWebServices"
> basePackages="com.twc.ctg.ecp.service.rest.custom"
> address="http://0.0.0.0:8877" depends-on="activeMQConnectionFactory">
>           <jaxrs:inInterceptors>
>              <ref bean="validationInInterceptor"/>
>           </jaxrs:inInterceptors>
>           <jaxrs:outInterceptors>
>              <ref bean="validationOutInterceptor"/>
>           </jaxrs:outInterceptors>
>           <jaxrs:serviceBeans>
>              <ref bean="ecpAdminRestServiceV1"/>
>              <ref bean="ecpApplicationRestServiceV1"/>
>              <ref bean="ecpEntitlementRestServiceV1"/>
>              <ref bean="ecpEntitlementRestServiceV2"/>
>              <ref bean="ecpMetricsRestServiceV1"/>
>              <ref bean="ecpAlertsRestServiceV1"/>
>              <ref bean="ecpCDRestServiceV1"/>
>           </jaxrs:serviceBeans>
>           <jaxrs:providers>
>              <bean
> class="com.fasterxml.jackson.jaxrs.json.JacksonJaxbJsonProvider"/>
>              <ref bean="genericRestExceptionMapper"/>
>           </jaxrs:providers>
>
> REST service:
>   @POST
>     @Path("/entitlement")
>     @Consumes({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
>     @HeaderValidation
>     @Valid
>     public Response postEntitlement(@Context final HttpServletRequest
> request, @NotNull @Valid final Entitlement Entitlement) throws
> GenericRestException
>     {
> . . .
> }
>
>
>
>
> --
> View this message in context: http://cxf.547215.n5.nabble.com/Upgraded-to-3-0-0-now-Rest-service-receiving-xml-give-400-Bad-request-tp5746953.html
> Sent from the cxf-user mailing list archive at Nabble.com.
>