[英]Apache CXF client soap fault handling
我在一个独立的Java应用程序中使用apache cxf client 3.2.2来调用某些soap webservices。
尝试以单向操作获取soap故障代码和故障字符串但没有成功。
我已经定义了一个自定义拦截器,但它永远不会到达handleMessage
IncomingFaultInterceptor faultInterceptor = new IncomingFaultInterceptor();
cxfEndpoint.getInFaultInterceptors().add(faultInterceptor);
来自自定义拦截器的代码
public class IncomingFaultInterceptor extends AbstractSoapInterceptor {
public IncomingFaultInterceptor(){
super(Phase.RECEIVE);
}
@Override
public void handleMessage(SoapMessage message) throws Fault {
if(message != null){
/* log fault string , fault code*/
}
}
}
我得到的例外是MessageSenderEndingInterceptor(在PREPARE_SEND阶段)。
它正在抛出一个新故障,文本“无法发送消息”。 奇怪的是,当与...通信时,捕获的异常是“HTTP响应'500:内部服务器错误'”
如果我用soapui发送相同的请求,我会看到故障代码和故障字符串
HTTP/1.1 500 Internal Server Error
Accept: text/xml, text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
SOAPAction: ""
Content-Type: text/xml;charset=utf-8
Content-Length: 396
Date: Thu, 05 Apr 2018 15:32:27 GMT
Connection: close
Server: Test
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header/>
<SOAP-ENV:Body>
<SOAP-ENV:Fault>
<faultcode xmlns:ns0="http://company.com/services/fault">THE_FAULT_CODE</faultcode>
<faultstring xml:lang="en">THE_FAULT_STRING</faultstring>
</SOAP-ENV:Fault>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
任何想法,或者我可以做些什么来获取故障代码和故障字符串? cxf中客户端拦截器的任何好文档?
更新:
似乎无法使用cxf客户端在单向操作中获取故障代码和故障字符串,因为服务器不符合SOAP和WSI标准。
无论如何,我无法绕过异常并记录故障字符串和故障代码。 试图在生成的代码中注释单向注释但仍然不会执行拦截器。 我找不到关于如何在客户端实现拦截器来处理故障的好例子。
更多信息:
单向操作的WS-I规范。 从定义“..例如,”500内部服务器错误“在这种情况下无法返回包含故障的HTTP响应。”
除此之外,错误“无法发送消息”在请求发送时非常混乱,但已在此处报告
不明白你为什么要制作自己的拦截器。
看这里: http : //cxf.apache.org/docs/developing-a-consumer.html
如果您在WSDL中明确描述了错误,则会生成错误类,您可以捕获它。
您可以在那里指定故障消息。
<wsdl:operation name="pingMe">
<wsdl:input name="pingMeRequest" message="tns:pingMeRequest"/>
<wsdl:output name="pingMeResponse" message="tns:pingMeResponse"/>
<wsdl:fault name="pingMeFault" message="tns:pingMeFault"/>
</wsdl:operation>
<wsdl:message name="pingMeFault">
<wsdl:part name="faultDetail" element="x1:faultDetail"/>
</wsdl:message>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.