I am developing a route that calls a web service; said web service returns a JSON string (Not always the same type represented). I have this in a route as:
from(myqueue) .bean(SetupCxfRequest.class) // This sets up parameters for REST API call .convertBodyTo(org.apache.cxf.message.MessageContentsList.class) .to("cxfrs:bean:ws?throwExceptionOnFailure=false") .bean(WebServiceResponse.class) SetupCxfRequest will: exchange.setPattern(ExchangePattern.InOut); // Indicate using Proxy API. in.setHeader(CxfConstants.CAMEL_CXF_RS_USING_HTTP_API, Boolean.FALSE); in.setHeader(CxfConstants.OPERATION_NAME, VerifyEmployeeRequest); The web service interface method for the call in question is: @GET @Path(value="/authentication/{company}/employees/{id}") @Produces({ MediaType.APPLICATION_JSON }) public Response VerifyEmployeeRequest(@PathParam("company") String scac, @PathParam("id") String id, @QueryParam("pin") String pin, @QueryParam("reason") String reason); The case I'm working now is that the web service is called and it returns a 404 status with a body of JSON-marshaled stuff I need to get at. >From my route above, WebServiceResponse is then called as: public class WebServiceResponse { @Handler public Object convertWebServiceResponse(Response wsResponse, Exchange exchange) throws IOException { ObjectMapper unmarshaller = new ObjectMapper(); Class<?> target = null; Message in = exchange.getIn(); int opStatus = wsResponse.getStatus(); if (opStatus == 200) target = EmployeeVerificationResponseAccept.class; else target = EmployeeVerificationResponseDeny.class; So far, so good - opStatus is 404. I need to get the string which is the response body and then unmarshall it. wsResponse.entity is a SequenceInputStream and one of the input streams appears to be the string I'm expecting from the web service; however, it has been completely consumed (length and position are the same). Where did it go, and how can I get it? Thanks, -Steve