去网上搜,说缺包的,jdk 版本的,myeclipse jar冲突的都有。都不管用。
自己debug桩代码发现,
_serviceClient.addHeadersToEnvelope(env);
// set the message context with that soap envelope
_messageContext.setEnvelope(env);
_operationClient.addMessageContext(_messageContext);
_operationClient.execute(true);
org.apache.axis2.context.MessageContext _returnMessageContext = _operationClient.getMessageContext(
org.apache.axis2.wsdl.WSDLConstants.MESSAGE_LABEL_IN_VALUE);
org.apache.axiom.soap.SOAPEnvelope _returnEnv = _returnMessageContext.getEnvelope();
//当我debug 到这时 鼠标放上查看信息,写的并不是xml,但是我用鼠标点击对象一下,显示的信息变为xml了。而且里面可以看到返回信息,
//更奇怪的是,放行debug 后程序成功执行。但是没有解析到返回值。
//多次debug 发现,只要我在这个位置用鼠标点击查看到xml 程序就可以执行,不点击或者不debug 都会报错Namespace Uri May Not be null
//我就认为是xml解析出现问题,也没有想去反编译什么的。就继续在网上搜
//看到兄弟写的反编译,我决定好好看看,说不定有解决思路。果然。如兄弟所说
可以看到Axis2的内部处理机制,就是一但发现响应报文有Fault节点,它就要抛异常。
于是将options..setExceptionToBeThrownOnSOAPFault(true),改为false,程序立刻好了。执行没问题,返回值也获取到了。
感谢原作者
总结:按兄弟说的,一切的害怕源于对代码的神秘,未知,当你把它当成自己写的代码,去反编译,去阅读,那就不会再害怕!
options.setExceptionToBeThrownOnSOAPFault(false);
_operationClient.getOptions().setExceptionToBeThrownOnSOAPFault(true);
改为
_operationClient.getOptions().setExceptionToBeThrownOnSOAPFault(false);
下边链接是我看到的解决办法的兄弟写的,可以去看看。
https://blog.youkuaiyun.com/wandrong/article/details/70275429#commentsedit点击打开链接
啊啊啊啊啊 还是没解决 你们参考下就算了我自己的还没解决555555
几天后我又来了 这次真的解决了哈哈哈哈。
写服务的终于给回复了,他们使用xfire 写的,不知道什么原因,axis2 和cxf 解析xfire 返回的xml 都报错,可能是不兼容,或者版本问题。实在不行我换了xfire 自己找包,用xfire 来了一版。至于缺少的依赖包,根据报错提示导入就行。最后执行顺利通过,总算解决了。
遇到问题首先查询是否自己环境、代码问题。如果是非常顽固的问题,还是与服务端沟通。最好使用同一工具同一版本。累死啦。。