[英]JAX-WS Force use of xmlns prefix in SOAP request?
我有一个从JAX-WS 2.1调用的ASP.NET 2.0 Web服务。 如果我使用SOAP UI进行测试,则可以正常工作。 SOAP UI生成以下形式的请求
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sup="abc.123">
<soapenv:Header/>
<soapenv:Body>
<sup:Method>
<sup:element>GBA</sup:element>
<sup:attributes>
<sup:Attribute>
<sup:attributeName>XYZ</sup:attributeName>
<sup:attributeValue>123</sup:attributeValue>
</sup:Attribute>
</sup:attributes>
<sup:nop>abc</sup:nop>
<sup:data>1</sup:data>
</sup:Method>
</soapenv:Body>
</soapenv:Envelope>
这可以正常工作,并且Web服务将接收并正确处理数据。 但是,JAX-WS客户端创建以下形式的请求:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<Method xmlns="abc.123">
<element>
<name>GBA</name>
</element>
<attributes>
<Attribute>
<attributeName>XYZ</attributeName>
<attributeValue>123</attributeValue>
</Attribute>
</attributes>
<nop>abc</nop>
<data>1</data>
</Method>
</soapenv:Body>
</soapenv:Envelope>
这不能正常工作。 ASP.NET Web服务将除 element
以外的所有参数解释为null
。 显然,这会导致处理失败。 JAX-WS代理返回并正确解释了一条消息。
如何强制JAX-WS(在客户端生成或代码中)使用名称空间前缀? 或者,有没有一种方法可以告诉ASP.NET如何按原样解释SOAP消息?
到目前为止,我已经阅读了JAX-WS,它似乎提供了许多用于定制所创建的Java的选项,但是我还没有找到用于定制其创建SOAP的任何参数或绑定规则。
我发现唯一看起来很有希望的是使用SoapHandler
手动编辑xml构造,如本答案所示 。 但是,这涉及编写代码以遍历DOM并在每个节点之前添加前缀。 我尚未成功测试此选项...
<element>
属性在第一条消息和第二条消息之间有所不同。 那将是问题的根源。
SOAP UI:
...
<sup:element>GBA</sup:element>
JAX-WS:
....
<element>
<name>GBA</name>
</element>
xml名称空间是等效的。 元素名称本身有所不同。
客户端是使用旧版本的WSDL生成的。 使用当前版本的WSDL更正了该问题。
始终检查以确保客户机和服务器的WSDL匹配。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.