Java 使用JAX-WS 2.1时请求XML中不必要的属性

Java 使用JAX-WS 2.1时请求XML中不必要的属性,java,web-services,jax-ws,Java,Web Services,Jax Ws,我正在WAS7.0AppServer下使用JAX-WS2.1(使用JAXB2.1)。我已经编写了一个客户机代码,下面是来自我的请求xml的片段 <additionalCriteria> <ns5:keyword xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/> <ns5:maxResultsToReturn>10</

我正在WAS7.0AppServer下使用JAX-WS2.1(使用JAXB2.1)。我已经编写了一个客户机代码,下面是来自我的请求xml的片段

      <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>

10

如您所见,属性
xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance“
将添加到每个元素中。我不想在我的请求中包含这个。有谁能建议一下,因为它阻碍了我的项目交付?

xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance“
是必要的,以防在消息的深处有任何带有空值的可为零的字段。JAX-B规范要求用xsi:nil表示这些内容。JAX-WS/JAX-B不可能预测其中是否存在任何一种,因为它在遍历树时会输出XML。所以它总是添加名称空间。这是标准的、正常的,任何反对的人都需要重新思考。

你为什么在意?您的代码都知道,这个XML可能是楔形文字。你调用客户端,服务器就会被调用数据。我同意,但人们不接受这一点,他们希望在信封级别声明它。知道怎么解决吗?告诉“人们”他们错了。JAX-WS需要xsi:nil的名称空间,并且无法预测其中一个名称空间是否会出现在消息的深处。ok会这样做,谢谢您的回复。顺便问一下,我们可以管理这个nsmaespace-
xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance“
将在信封级别而不是在元素/正文级别声明?JAX-WS拥有信封。JAX-B拥有内部信息。我不记得他们是否交流过。如果将该名称空间添加到信封中,可能不会阻止JAX-B再次将其添加到body.OK中。我是否可以告诉我的JAX-WS客户端(通过绑定文件?)不要在我的请求xml中包含任何这样的元素(当xsd将特定元素表示为nil=true时)??我同意minOccurs=0将执行此操作。