我有一个使用@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堆栈遇到同样的问题(或成功)?
答案 0 :(得分:4)
在工作代码中没有默认命名空间,<mymethod>
绑定到带有前缀的mynamespace
。
由于<arg0>
元素没有前缀,因此它位于 null命名空间。
在失败的代码mynamespace
中设置为默认命名空间。由于<mymethod>
和<arg0>
没有任何前缀,因此 都有mynamespace
作为其名称空间URI。
不允许将空名称空间URI绑定到任何前缀。因此,您需要继续在<mymethod>
中使用名称空间前缀,或者需要覆盖<arg0>
中的默认名称空间,如下所示:
<arg0 xmlns="">
请注意,这会将<arg0>
的所有未加前缀的子元素设置为null命名空间,除非您再次覆盖默认命名空间。