【问题标题】:JAXWS problem without namespace prefix using Jboss 4.2.3ga使用 Jboss 4.2.3ga 没有命名空间前缀的 JAXWS 问题
【发布时间】:2011-06-29 23:19:18
【问题描述】:

我有一个使用@WebServiceannotation 发布为JAXWS web 服务的java 服务。该服务很好地部署在 Jboss 应用服务器 4.2.3ga 上(应用服务器提供了 Jax-ws 实现)。

当 Soap 消息如下所示时,服务运行良好:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:pref="mynamespace">
   <soapenv:Header/>
   <soapenv:Body>
        <pref:mymethod>
            <arg0>value</arg0>
        </pref:mymethod>
   </soapenv:Body>
</soapenv:Envelope>

当 Soap 消息如下所示时失败:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns="mynamespace">
   <soapenv:Header/>
   <soapenv:Body>
        <mymethod>
            <arg0>value</arg0>
        </mymethod>
   </soapenv:Body>
</soapenv:Envelope>

失败是指调用了“mymethod”,但 arg0 为空。

有人知道这是 JAX-WS api 的预期行为还是错误?我发现没有提到任何一个。

是否有人在使用另一个 JAX-WS 堆栈时遇到过同样的问题(或成功)?

【问题讨论】:

    标签: web-services jboss jax-ws xml-namespaces


    【解决方案1】:

    在工作代码中没有默认命名空间,&lt;mymethod&gt; 绑定到带有前缀的mynamespace。 因为&lt;arg0&gt;元素没有前缀,所以它在null namespace中。

    在失败的代码中,mynamespace 被设置为默认命名空间。因为&lt;mymethod&gt; 和&lt;arg0&gt; 没有任何前缀,所以它们都将mynamespace 作为它们的命名空间URI。

    不允许将空的命名空间 URI 绑定到任何前缀。因此,您要么需要继续在&lt;mymethod&gt; 中使用命名空间前缀,要么需要像这样覆盖&lt;arg0&gt; 中的默认命名空间:

    <arg0 xmlns="">
    

    请注意,这会将 &lt;arg0&gt; 的所有无前缀子元素设置为 null 命名空间,除非您再次覆盖默认命名空间。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-01
      • 2014-02-05
      相关资源
      最近更新 更多