CamelHttpResponseCode因服务错误

时间:2018-03-13 09:20:25

标签: java spring apache-camel

我是骆驼新手并编写一个小POC来在现有应用程序中实现。应用程序将xml请求作为输入,其中包含所请求的服务和相关数据。然后它逐个调用这些服务。 成功调用服务后,我将在下面的处理器中检索http响应代码并执行进一步的逻辑:

Object code = exchange.getIn().getHeader(Exchange.HTTP_RESPONSE_CODE);
    if(null!=code && code instanceof Integer)
    {
        responseCode = (Integer) code;
    }

成功案例中,responseCode收到= 201

根据responseCode,我知道服务调用是否成功,然后继续下一个。

但是,我尝试通过使服务网址不正确并且无法再看到http响应代码来产生负面情况:

原始服务网址 - http://xxx:0000/.../.../.../.../...

修改后的服务网址 - http://xxx:0000/.../.../.../.../abc/...

在失败的情况下,responseCode收到= null

在邮递员中,我收到以下错误:

  

org.apache.camel.http.common.HttpOperationFailedException:HTTP   操作失败,调用http://xxx:0000/.../.../.../.../abc/...   statusCode:404 at   org.apache.camel.component.http.HttpProducer.populateHttpOperationFailedException(HttpProducer.java:274)     在   org.apache.camel.component.http.HttpProducer.process(HttpProducer.java:183)

我不知道为什么交换在邮递员的错误消息中出现时不包含http响应代码。

我使用onException来处理任何异常,然后调用处理器来进一步处理流程:

<camel:onException>
                <camel:exception>java.lang.Exception</camel:exception>
                <camel:process ref="xxxProcessor" />
            </camel:onException>

我认为我可以将responseCode = null视为失败并继续我的逻辑但是想要理解为什么响应代码被返回为null。

提前致谢!

2 个答案:

答案 0 :(得分:2)

我明白了。似乎在服务异常的情况下,抛出org.apache.camel.http.common.HttpOperationFailedException的实例并且其中存在http状态代码。它可以在处理器中检索,如下所示:

Exception e = exchange.getProperty(Exchange.EXCEPTION_CAUGHT, Exception.class);
if(null!=e && e instanceof HttpOperationFailedException)
        {
            HttpOperationFailedException httpOperationFailedException = (HttpOperationFailedException)e;
            responseCode=httpOperationFailedException.getStatusCode();
        }

答案 1 :(得分:0)

被接受的答案对我有所帮助,它可能是有效的!在我使用的骆驼版本(2.20.1)中,通过属性获取异常似乎不起作用。以下是

HttpOperationFailedException httpOperationFailedException  = exchange.getException(HttpOperationFailedException.class);
if(null!=e) {
    responseCode = httpOperationFailedException.getStatusCode());
}