我正在从OSB代理服务调用REST服务,如果其余服务响应是有效响应,则该服务正常工作,即没有错误。但是,如果其余服务使用http错误代码(例如400 Bad Request)回复,我除了http错误代码之外无法捕获任何其他内容:
OSB中的$ fault变量:
<con:fault xmlns:con="http://www.bea.com/wli/sb/context">
<con:errorCode>BEA-382502</con:errorCode>
<con:reason>
OSB Service Callout action received an error response
</con:reason>
<con:details>
<con1:ErrorResponseDetail xmlns:con1="http://www.bea.com/wli/sb/stages/transform/config">
<con1:http-response-code>400</con1:http-response-code>
</con1:ErrorResponseDetail>
</con:details>
<con:location>
<con:node>PipelinePairNode1</con:node>
<con:pipeline>PipelinePairNode1_request</con:pipeline>
<con:stage>stage1</con:stage>
<con:path>request-pipeline</con:path>
</con:location>
</con:fault>
但是其他服务,不仅回复了400 Bad Request,还添加了一条消息:
<Error>
<Message>The message header contains an invalid brand code.</Message>
</Error>
我无法在我的代理服务中处理。有谁知道是否可以在OSB中访问此消息详细信息,还是有限制?
其他服务显然正在发送消息,因为直接通过soap-ui调用它我会得到以下响应:
HTTP/1.1 400 Bad Request
Cache-Control: no-cache
Pragma: no-cache
Content-Length: 84
Content-Type: application/xml; charset=utf-8
Expires: -1
Server: Microsoft-IIS/8.5
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Mon, 09 Feb 2015 16:15:32 GMT
<Error><Message>The message header contains an invalid brand code.</Message></Error>
由于
答案 0 :(得分:1)
我发现这是一个OSB错误,如果返回了HTTP错误代码400,如果http内容是&#34;应用程序/ XML&#34;消息被忽略。
甲骨文在上个月底发布了一个修补程序来修复这个问题,我已经测试了它并且它可以运行。我现在可以在$ body变量中获取消息详细信息。
补丁:16986497
答案 1 :(得分:0)
如果我理解你的问题,你想获得除http代码之外的消息错误吗?
我认为您应该在消息流中使用errorHandler,这样您就可以捕获错误并执行任何操作。
答案 2 :(得分:-1)
代理服务操作选择算法无法从请求中确定操作名称或返回无效操作(不在WSDL中的操作或null)。可能的原因包括:
计算操作时发生错误。
操作选择算法返回null。
操作选择算法返回的操作不属于WSDL声明的操作。