繁体   English   中英

JAX-WS是否在SOAP请求中强制使用xmlns前缀?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM