使用Jboss 4.2.3ga的没有名称空间前缀的JAXWS问题

时间:2011-02-18 16:56:03

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

我有一个使用@WebServiceannotation作为JAXWS webservice发布的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的预期行为还是bug?我没有找到任何一个或另一个的参考。

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

1 个答案:

答案 0 :(得分:4)

在工作代码中没有默认命名空间,<mymethod>绑定到带有前缀的mynamespace。 由于<arg0>元素没有前缀,因此它位于 null命名空间

在失败的代码mynamespace中设置为默认命名空间。由于<mymethod><arg0>没有任何前缀,因此 都有mynamespace作为其名称空间URI。

不允许将空名称空间URI绑定到任何前缀。因此,您需要继续在<mymethod>中使用名称空间前缀,或者需要覆盖<arg0>中的默认名称空间,如下所示:

<arg0 xmlns="">

请注意,这会将<arg0>的所有未加前缀的子元素设置为null命名空间,除非您再次覆盖默认命名空间。

相关问题