使用Axis2这个框架进行webservice协议通讯,期间出了个问题,我(CLIENT)请求后,当服务端返回符合协议的SOAP异常报文,例如<soap:fault> ...
我的程序直接抛org.apache.axis2.AxisFault异常,导致连服务端给我们的报文都没有接收成功。
--请注意,是我连报文都没有接收成功,而不是接收成功后我解析失败了。
try {
ServiceClient serviceClient = new ServiceClient();
Options options = new Options();
//设置超时时间,单位毫秒
options.setTimeOutInMilliSeconds(this.wsTimeOut);
options.setTransportInProtocol(Constants.TRANSPORT_HTTP);
options.setTo(new EndpointReference(this.wsEndpointAddress));
options.setSoapVersionURI(org.apache.axiom.soap.SOAP12Constants.SOAP_ENVELOPE_NAMESPACE_URI);
options.setAction(this.wsMethod);
MessageContext requetMessageContext = new MessageContext();
SOAPEnvelope env = this.getRequestEnvelope();
log.info("version : "+ env.getVersion().getEnvelopeURI());
requetMessageContext.setEnvelope(env);
OperationClient opClient = serviceClient.createClient(ServiceClient.ANON_OUT_IN_OP);
opClient.addMessageContext(requetMessageContext);
opClient.setOptions(options);
opClient.execute(true);
MessageContext rspMC = opClient.getMessageContext("In");
response = rspMC.getEnvelope().getBody().getFirstElement();
log.info("应答报文: "+ rspMC.getEnvelope());
} catch (AxisFault e) {
this.errRspDesc = "xxxxx";
log.error("soapDispatch AxisFault!");
throw e;
} catch (Exception e) {
this.errRspDesc = "xxxxxxxxxxxxx!";
log.error("soapDispatch Exception!");
throw e;
}
当执行到发送请求opClient.execute(true);
服务端成功返回格式正常的SOAP异常报文,此时程序直接抛异常,走不到下面rspMC的获取,也就拿不到响应