Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 驼峰HTTP\u响应\u代码设置_Java_Apache Camel - Fatal编程技术网

Java 驼峰HTTP\u响应\u代码设置

Java 驼峰HTTP\u响应\u代码设置,java,apache-camel,Java,Apache Camel,我正在尝试处理路由中的异常,该异常是由我的soap端点使用OneException引发的。我需要实现一些自定义逻辑来将SOAP验证映射到某些HTTP响应头 当我使用 setHeader(Exchange.HTTP_RESPONSE_CODE, constant(502)). 直接在我的路线定义中,标题设置良好。但是,我的自定义逻辑无法实现 我试图在处理器中设置标头 exchange.getOut().setHeader(Exchange.HTTP_RESPONSE_CODE, "502");

我正在尝试处理路由中的异常,该异常是由我的soap端点使用OneException引发的。我需要实现一些自定义逻辑来将SOAP验证映射到某些HTTP响应头

当我使用

 setHeader(Exchange.HTTP_RESPONSE_CODE, constant(502)).
直接在我的路线定义中,标题设置良好。但是,我的自定义逻辑无法实现

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

exchange.getOut().setHeader(Exchange.HTTP_RESPONSE_CODE, "502");
但它被忽略,系统震荡我的响应接收到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");

    }
}

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

您应该使用exchange.getIn()而不是getOut()。太好了,它可以工作了!我想知道为什么没有创建“输出”交换。只有“内部”交换存在。在99%的情况下,您无需担心出局。