【问题标题】:Unnecessary attribute in request XML when using JAX-WS 2.1使用 JAX-WS 2.1 时请求 XML 中的不必要属性
【发布时间】:2012-12-25 17:01:41
【问题描述】:

我在 WAS7.0 应用服务器下使用 JAX-WS 2.1(使用 JAXB 2.1)。我已经编写了一个客户端代码,下面是我的请求 xml 中的 sn-p。

      <additionalCriteria>
         <ns5:keyword xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/>
         <ns5:maxResultsToReturn>10</ns5:maxResultsToReturn>
         <ns5:nextResultBlockKey xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/>
         <ns5:scope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/>
         <ns5:sortBy xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/>
         <ns5:sortOrder xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/>
      </additionalCriteria>

如您所见,xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 属性被添加到每个元素中。我不想在我的请求中这样做。任何人都可以建议,因为它阻碍了我的项目交付?

【问题讨论】:

  • 你为什么在乎?您的所有代码都知道,此 XML 可能是楔形文字。您调用客户端,然后服务器被调用数据。
  • 我同意,但人们不接受这一点,他们希望它在信封级别声明。知道如何解决这个问题吗?
  • 告诉“人们”他们错了。 JAX-WS 需要 xsi:nil 的命名空间,并且无法预测其中一个是否会出现在消息深处的某个地方。
  • 好的,谢谢您的回复。顺便说一句,我们可以管理这个 nsmaespace - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 在信封级别而不是在元素/正文级别声明吗?
  • JAX-WS 拥有信封。 JAX-B 拥有内部。我不记得他们是否交流过。如果您将该名称空间添加到信封中,它可能不会阻止 JAX-B 再次将其添加到正文中。

标签: java web-services jax-ws


【解决方案1】:

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 是必要的,以防消息深处存在任何具有空值的可空字段。 JAX-B 规范要求这些用 xsi:nil 表示。 JAX-WS/JAX-B 不可能预测是否存在这些,因为它在遍历树时流出 XML。所以它总是添加那个命名空间。这是标准的、正常的,任何反对的人都需要重新考虑。

【讨论】:

  • 好的。我可以告诉我的 JAX-WS 客户端(通过绑定文件吗?)不要在我的请求 xml 中包含任何此类元素(当 xsd 将特定元素表示为 nil=true 时)?我同意 minOccurs=0 会这样做。
猜你喜欢
  • 2011-10-20
  • 1970-01-01
  • 2010-12-29
  • 1970-01-01
  • 2011-07-18
  • 1970-01-01
  • 2012-01-05
  • 1970-01-01
  • 2012-04-02
相关资源
最近更新 更多