我正在从OSB代理服务调用REST服务,如果rest服务响应是有效的响应,即没有错误,该服务运行良好。但是,如果rest服务使用http错误代码(例如400坏请求)进行应答,除了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>但是rest服务,不仅响应了400坏请求,而且还添加了一条消息:
<Error>
<Message>The message header contains an invalid brand code.</Message>
</Error>我无法在代理服务中处理。是否有人知道在OSB中是否可以访问此消息细节,或者这是否是一个限制?
rest服务显然是在发送消息,因为直接通过soap调用它,我将得到以下响应:
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>谢谢
发布于 2015-02-20 16:41:12
我刚刚发现这是一个OSB错误,如果返回HTTP错误代码400,如果http内容是"Application/XML“,则忽略消息。
甲骨文在上月底发布了一个修补程序来解决这个问题,我已经测试过这个问题,而且它是有效的。我现在可以在$body变量中获得消息详细信息。
修补程序: 16986497
发布于 2015-02-19 12:17:24
如果我明白你的问题,你想得到除了http代码之外的信息错误吗?
我认为您应该在您的消息流中使用一个errorHandler,这样您就可以捕获错误并随心所欲地使用它。
发布于 2015-12-01 11:15:14
代理服务操作选择算法不能从请求中确定操作名称,也不能返回无效操作(一个不在WSDL或null中)。可能的原因包括:
计算操作时发生错误。
操作选择算法返回null。
操作选择算法返回不属于WSDL声明的操作的操作。
https://stackoverflow.com/questions/28450646
复制相似问题