关于使用Axis2 webservice 处理Fault响应时抛org.apache.axis2.AxisFault的分析

在使用Axis2进行Web服务通信时,遇到服务端返回SOAP异常报文导致客户端抛出org.apache.axis2.AxisFault的问题。深入源码发现,Axis2在检测到响应中有Fault节点时会自动抛出异常。解决方法在于调整options参数,设置isExceptionToBeThrownOnSOAPFault为FALSE,阻止 Axis2 在接收到SOAP Fault时直接抛异常,从而能够正常接收响应报文。
摘要由CSDN通过智能技术生成

使用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的获取,也就拿不到响应

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值