【问题标题】:Wildfly Web Service JAXB Unmarshall Error when coming from .net client来自 .net 客户端时的 Wildfly Web 服务 JAXB 解组错误
【发布时间】:2014-09-20 12:54:05
【问题描述】:

我有一个来自 CXF 的 web 服务,其中 defaultElementForm="unqualified",托管在 Wildfly 8 中,使用最新的 Java 7。当我有 java 客户端连接时,如果从 CXF 生成,它们可以正常工作,因为它们的肥皂消息内容看起来像:

 <ns:MyCall1 xmlns:ns="http://example.com/">
      <MyCall2>
...

.net 客户端是完全相同的消息,只有一个区别,这不起作用:

<MyCall1 xmlns="http://example.com/">
    <MyCall2 xmlns="">

...

不幸的是,它失败的原因是,它看起来像 JAXB 完全忽略了 xmlns="",所以它认为命名空间仍然是 http://example.com/,这与不合格的 "" 不匹配。如果我将其更改为 xmlns="a",则会收到错误消息,指出 a 与预期的命名空间“”不匹配,但如果我将其保留为“”,则会显示 http://example.com/ 与预期的“”不匹配。所以它忽略了清除默认命名空间所需的 xmlns=""。

必须有某种设置或某种方式使通过 jaxb 的 java web 服务正确解释。请帮忙!

【问题讨论】:

    标签: java .net web-services soap jaxb


    【解决方案1】:

    我们刚刚在 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>
    

    【讨论】:

    • 如果您能够更改架构以符合元素的要求(并希望这样),这将起作用并提供与 .net 的互操作性,但它会使 XML 消息更长一些并且需要更改wsdl。另一种解决方案,就是做一个soap处理程序,并在必要时将soap消息从.net样式转换为我们的格式——虽然很差,但我希望有一个更好的,你会认为这是一个常见的问题,而且看起来很奇怪jaxb/wildfly 沿线某处的问题。
    【解决方案2】:

    事实证明,如果其他人(可能没有人)遇到这个问题。它在 Wildfly 8.2 中得到修复,但在 8.0 和 8.1 中发生……所以一定是某种 Wildfly 或 jax-ws 或 jax-b 问题。无论如何,谢天谢地,最新版本已修复。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-01
      • 2011-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-07
      相关资源
      最近更新 更多