我试图处理我的路由中的异常,这是我的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");
}
}
如何在处理器中设置标头?标题设置如何工作?