I got this working... thank you to Sergey and Kalyan for your assistance. After following your trails around and learning some more, I found that the main issue was that I had defined the return type for my REST operation as String, so Camel was dutifully converting to that and I did not have a Response to get the code from. After I changed the return type from String to Response, things started working.
If it appears that I've got something confused still, I'm happy to hear about it. -Steve > -----Original Message----- > From: Steve Huston [mailto:shus...@riverace.com] > Sent: Monday, November 02, 2015 6:36 PM > To: users@camel.apache.org > Subject: Re: How to access payload from REST 404 reply in cxfrs? > > Thanks again, Sergey. I was able to register the provider using: > > <bean id="jsonProvider" > class="org.codehaus.jackson.jaxrs.JacksonJsonProvider"/> > > Then use it via: > > <to uri="cxfrs:bean:webService?provider=#jsonProvider"/> > > However, it looks like there is no content available via the exception. Using > the code: > > InvocationTargetException exception = > exchange.getProperty(Exchange.EXCEPTION_CAUGHT, > InvocationTargetException.class); > NotFoundException orig = (NotFoundException)(exception.getCause()); > CrewServiceDeniedError err = > orig.getResponse().readEntity(CrewServiceDeniedError.class); > logger.error("Incoming response: ", err.getReason()); > logger.error("Incoming response (plain):", > orig.getResponse().readEntity(String.class)); > > I get output at runtime: > > [Camel (rraaCamelContext) thread #2 - seda://from_rraa] ERROR > my.module.ExceptionProcessor - Incoming response: > [Camel (rraaCamelContext) thread #2 - seda://from_rraa] ERROR > my.module.ExceptionProcessor - Incoming response (plain): > > So I'm back to wondering where the original payload from the REST 404 > response is. It gets logged from Camel as: > > ID: 2 > Response-Code: 404 > Encoding: ISO-8859-1 > Content-Type: application/json > Headers: {Accept=[application/json], breadcrumbId=[ID-Steves-MacBook- > Pro-local-55129-1446506823854-1-7], content-type=[application/json], > OriginalHeader=[{name=VerifyEmployeeRequest, version=1, scac=rraa, > timeSent=null, uuid=abcd-1234}], pin=[1234], reason=[INIT], > Server=[Jetty(9.2.11.v20150529)], transfer-encoding=[chunked], User- > Agent=[Apache CXF 3.1.2]} > Payload: { "employeeID": "bad-name", "reason": "id not found" > } > > > Thanks very much for any insight, > > -Steve > > > On Nov 2, 2015, at 3:52 PM, Sergey Beryozkin <sberyoz...@gmail.com> > wrote: > > > > > > As I said you will need to register a JAXRS provider capable of > > converting it, though I'm not sure right now what the syntax is with > > cxfrs:bean:webService, looks like from > > http://camel.apache.org/cxf-bean-component.html > > > > it is something like > > cxfrs:bean:webService?providers=#jackson > > > > Cheers, Sergey > > On 02/11/15 18:02, Steve Huston wrote: > >> Thank you very much for your quick help, Sergey! > >> I tried your solution and now get the following exception: > >> > >> [Camel (rraaCamelContext) thread #2 - seda://from_rraa] ERROR > >> org.apache.cxf.jaxrs.utils.JAXRSUtils - No message body reader has > >> been found for class my.class.path.CrewServiceDeniedError, > >> ContentType: application/json > >> > >> The code I have is: > >> > >> InvocationTargetException exception = > exchange.getProperty(Exchange.EXCEPTION_CAUGHT, > InvocationTargetException.class); > >> NotFoundException orig = > (NotFoundException)(exception.getCause()); > >> CrewServiceDeniedError err = > >> orig.getResponse().readEntity(CrewServiceDeniedError.class); > >> > >> I created this class for the payload: > >> > >> public class CrewServiceDeniedError { > >> > >> private String employeeID; > >> private String reason; > >> > >> public String getEmployeeID() > >> { return employeeID; } > >> public void setEmployeeID(String id) > >> { employeeID = id; } > >> > >> public String getReason() > >> { return reason; } > >> public void setReason(String r) > >> { reason = r; } > >> } > >> > >> -Steve > >> > >>> On Nov 2, 2015, at 11:24 AM, Sergey Beryozkin <sberyoz...@gmail.com> > wrote: > >>> > >>> Hi > >>> If you can access NotFoundException then what you can do next is to > >>> do > >>> > >>> ErrorInfo errorInfo = > >>> exception.getResponse().readEntity(ErrorInfo.class) > >>> > >>> where ErrorInfo is a custom class capturing a JSON error response, > >>> you'd also need to register Jackson or other provider to get it > >>> converted. Or read it as String.class and parse manually > >>> > >>> HTH, Sergey > >>> On 02/11/15 16:15, Steve Huston wrote: > >>>> I put this up on stackoverflow... if you have cxfrs expertise, could you > please read this? > >>>> > >>>> How to access payload from REST 404 response in Camel cxfrs? > >>>> http://stackoverflow.com/q/33445686/240342?sem=2 > >>>> > >>>> Thanks, > >>>> -Steve > >>>> > >>> > >> > > > > > > -- > > Sergey Beryozkin > > > > Talend Community Coders > > http://coders.talend.com/