gpt4 book ai didi

java - CamelHttpResponseCode 在服务错误时为 null

转载 作者:行者123 更新时间:2023-12-01 17:51:51 28 4
gpt4 key购买 nike

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

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

成功情况下,收到的响应代码 = 201

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

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

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

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

在失败的情况下,收到的响应代码 = null

在 postman 中,我收到以下错误:

org.apache.camel.http.common.HttpOperationFailedException: HTTP operation failed invoking http://xxx:0000/.../.../.../.../abc/... with statusCode: 404 at org.apache.camel.component.http.HttpProducer.populateHttpOperationFailedException(HttpProducer.java:274) at org.apache.camel.component.http.HttpProducer.process(HttpProducer.java:183)

我不知道为什么当 postman 的错误消息中存在http响应代码时,交换不包含http响应代码。

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

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

我认为我可以将 responseCode=null 视为失败并继续执行我的逻辑,但想了解为什么响应代码返回为 null。

提前致谢!

最佳答案

我明白了。似乎在服务异常的情况下,会抛出 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();
}

关于java - CamelHttpResponseCode 在服务错误时为 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49252358/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com