Missing operation for soapAction and body element

Axis2版本:1.6.2

SoapUI版本:5.0.0

 

使用Eclipse的Axis2插件生成WebServic客户端后,使用同样的WSDL文件通过SoapUI模拟出的WebService服务端进行测试,测试过程中报错如下:

org.apache.axis2.AxisFault: Missing operation for soapAction [urn:add] and body element [{http://sean}add] with SOAP Version [SOAP 1.2]


初看这个问题比较头痛,这是个底层报错,Axis2自动组装的消息无法被解析,首先需要做的就是观察消息是格式

<?xml version='1.0' encoding='utf-8'?>
<soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope">
	<soapenv:Body>
		<ns1:add xmlns:ns1="http://sean">
			<ns1:args0>1</ns1:args0>
			<ns1:args1>2</ns1:args1>
		</ns1:add>
	</soapenv:Body>
</soapenv:Envelope>

通过SoapUI,可以找到正确的消息格式

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:sean="http://sean.com">
   <soap:Header/>
   <soap:Body>
      <sean:add>
         <!--Optional:-->
         <sean:args0>?</sean:args0>
         <!--Optional:-->
         <sean:args1>?</sean:args1>
      </sean:add>
   </soap:Body>
</soap:Envelope>

比较之后可以发现,两者之间的唯一区别就是命名空间不同,一个使用http://sean,而另一个使用http://sean.com

这时想到我手动修改了Axis2自动生成的请求封装类中的命名空间:

public static final javax.xml.namespace.QName MY_QNAME = new javax.xml.namespace.QName(
		"http://sean", "add", "ns1");

而在接口的WSDL文件中定义的命名空间为

<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" 
	xmlns:ns1="http://org.apache.axis2/xsd" 
	xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl" 
	xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" 
	xmlns:xsd="http://sean.com" 
	xmlns:xs="http://www.w3.org/2001/XMLSchema" 
	xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" 
	xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" 
	xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" 
	targetNamespace="http://sean.com">
......

可见客户端和服务端的命名空间对应不上,导致消息内容解析时出现异常

 

修改方式分为2种

1,将代码中的命令空间改回http://sean.com

2,将WSDL文件中的命名空间修改为http://sean,并用新的WSDL文件创建新的SoapUI模拟服务端口(客户端最好重新生成)

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值