Hi Steve, Are u logging the Message body somewhere before consuming (say Camel logger in between),that could also lead to input stream consumption.
Regards, Aravind On Tue, Oct 25, 2016 at 1:15 PM, Doug Douglass <douglass.d...@gmail.com> wrote: > I can't say where the response body is being consumed, but try enabling > stream caching[1] and see what you get. > > Doug > > [1] http://camel.apache.org/stream-caching.html > > On Tue, Oct 25, 2016 at 9:31 AM, Steve Huston <shus...@riverace.com> > wrote: > > > 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 = EmployeeVerificationResponseAc > cept.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 > > > > >