我有一个来自CXF的web服务,其中defaultElementForm =“unqualified”,使用最新的Java 7托管在Wildfly 8中。当我连接java客户端时,如果从CXF生成它们,它们工作正常,因为它们的soap消息内容看起来像:
<ns:MyCall1 xmlns:ns="http://example.com/">
<MyCall2>
...
.net客户端是完全相同的消息,只有一个区别,这不起作用:
<MyCall1 xmlns="http://example.com/">
<MyCall2 xmlns="">
...
不幸的是,它失败的原因是,看起来JAXB完全忽略了xmlns =“”,所以它认为命名空间仍然是http://example.com/,这与不合格的“”不匹配。如果我将其更改为xmlns =“a”,则会收到错误消息,指出与预期的命名空间“”不匹配,但如果我将其保留为“”,则表示http://example.com/与预期的“”不符。所以它忽略了清除默认命名空间所需的xmlns =“”。
必须有一些设置,或某种方式通过jaxb正确解释java web服务。请帮忙!
答案 0 :(得分:0)
我们刚刚遇到类似Wildfly和.Net服务器的问题。我们通过将我们提供的WSDL更改为wsdl2java
来解决这个问题,以便问题元素是合格的而不是不合格的。
所以我们改变了这个:
<s:schema elementFormDefault="qualified" targetNamespace="http://www.example.com/messageresult/v200">
---snip---
<s:complexType name="SubmissionResponseType">
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" form="unqualified" name="ID" type="s:string"/>
<s:element minOccurs="0" maxOccurs="1" form="unqualified" name="StatusText" type="s:string"/>
</s:sequence>
</s:complexType>
---snip---
</s:schema>
对此:
<s:schema elementFormDefault="qualified" targetNamespace="http://www.example.com/messageresult/v200">
---snip---
<s:complexType name="SubmissionResponseType">
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" form="qualified" name="ID" type="s:string"/>
<s:element minOccurs="0" maxOccurs="1" form="qualified" name="StatusText" type="s:string"/>
</s:sequence>
</s:complexType>
---snip---
</s:schema>
答案 1 :(得分:0)
事实证明,如果其他人(可能没有人)遇到这个问题。它已在Wildfly 8.2中修复,但发生在8.0和8.1 ......所以一定是某种Wildfly或jax-ws或jax-b问题。无论如何,最新版本已经修好了。