Camel HTTP_RESPONSE_CODE设置

时间:2018-04-17 09:16:23

标签: java apache-camel

我试图处理我的路由中的异常,这是我的soap端点使用onException抛出的。我需要实现一些自定义逻辑来将SOAP exeption映射到某些HTTP响应头。​​

当我使用

 setHeader(Exchange.HTTP_RESPONSE_CODE, constant(502)).

直接在我的路线定义中,标题设置正常。但是我的自定义逻辑无法实现。

我尝试在处理器中设置标头

exchange.getOut().setHeader(Exchange.HTTP_RESPONSE_CODE, "502");

但它被忽略,系统结束我的resoponse收到HTTPCode = 200。 完整的路由代码如下:

 rest().post("/mypost")                
            .type(MyRequest.class)
            .outType(MyResponse.class)
            .route().routeId("rst_myrest")
            .log(LoggingLevel.DEBUG,"recived: ${body}")
            .to("direct:drt_addData")
            .endRest();

 onException(ServiceException.class).
            handled(true).
            setHeader(Exchange.HTTP_RESPONSE_CODE, constant(502)). //i remove this line when using processor header setup
            onExceptionOccurred(serviceExceptionProcessor).
            marshal(new JsonDataFormat(JsonLibrary.Jackson)).end();


public class ServiceExceptionProcessor implements Processor{
    @Override
    public void process(Exchange exchange) throws Exception {
        ServiceException request = exchange.getException(ServiceException.class);
        //preparing body, etc
        exchange.getOut().setBody(message, Errors.class);       
        // some logic for defining header response code
        // for example response code is 502
        exchange.getOut().setHeader(Exchange.HTTP_RESPONSE_CODE, "502");

    }
}

如何在处理器中设置标头?标题设置如何工作?

0 个答案:

没有答案