来自.net客户端的Wildfly Web服务JAXB Unmarshall错误

时间:2014-09-20 12:54:06

标签: java .net web-services soap jaxb

我有一个来自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服务。请帮忙!

2 个答案:

答案 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问题。无论如何,最新版本已经修好了。