Figured it out; just replying to my own message in case someone else runs into 
the same problem (or in case I forget later ;)  ).

I dug around in the code, and discovered that the HTTP response code can be set 
via the CamelHttpResponseCode message header (defined as a constant: 
Exchange.HTTP_RESPONSE_CODE).  There’s no mention of that header in the 
camel-netty-http or camel-netty4-http documentation (I opened 
https://issues.apache.org/jira/browse/CAMEL-8370 to address that).  So the 
following code works to set the response code and message body:

      exchange.getOut().setBody(myResponseBody);
      exchange.getOut().setHeader(Exchange.HTTP_RESPONSE_CODE, 401);


On Feb 17, 2015, at 11:34 AM, Mark Mindenhall <[email protected]> 
wrote:

> I’m using the camel-netty4-http (latest 2.14.2-SNAPSHOT) component to create 
> an endpoint that receives an HTTP POST from a device, translates the message 
> from binary to JSON, then sends it along to a kafka topic for further 
> processing.  When there are errors in validating or translating the incoming 
> message, I need to be able to return a HTTP response code and response body.
> 
> The camel-netty4-http documentation has an “Access to Netty types” section, 
> which says that I should be able to do the following to access the instance 
> of io.netty.handler.codec.http.HttpResponse:
> 
>     HttpResponse response = 
> exchange.getIn(NettyHttpMessage.class).getHttpResponse();
> 
> Regardless of where I access the exchange within the route, getHttpResponse() 
> is always returning null.  On the "happy path” I can return 200 by calling 
> exchange.getOut().setBody(myResponse), but I have been unable to figure out 
> how to return another response code.
> 
> Is this a bug?  Or is there another way to accomplish what I’m trying to do?
> 
> Thanks,
> Mark
> 

Reply via email to