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

Reply via email to