Java 如何忽略SOAP响应中的不可用字段

Java 如何忽略SOAP响应中的不可用字段,java,soap,Java,Soap,我有一个用SOAP开发的web服务,已经为它生成了一个客户端。现在,为了响应web服务,我添加了一个新字段。现在,当我调用客户端时,它会给出错误,因为更新的字段在客户端可用的数据类中不可用。在解组时,有没有办法忽略那些在数据类中不可用的属性。这同样适用于休息。TIA这在REST中起作用,因为只有HTTP没有像SOAPoverHTTP那样严格的通信协议。在SOAP中,默认情况下有一个更具限制性和更详细的技术合同,双方必须遵守该合同。如果您想要与REST相同的行为,您必须自己实现验证和规则,因为它有

我有一个用SOAP开发的web服务,已经为它生成了一个客户端。现在,为了响应web服务,我添加了一个新字段。现在,当我调用客户端时,它会给出错误,因为更新的字段在客户端可用的数据类中不可用。在解组时,有没有办法忽略那些在数据类中不可用的属性。这同样适用于休息。TIA

这在
REST
中起作用,因为只有
HTTP
没有像
SOAP
over
HTTP
那样严格的通信协议。在
SOAP
中,默认情况下有一个更具限制性和更详细的技术合同,双方必须遵守该合同。如果您想要与REST相同的行为,您必须自己实现验证和规则,因为它有点开放,这是想法的一部分

为了解决您的问题,您可能需要使用新的
WSDL
文件重新生成客户机代理/存根类,以使客户机意识到已经添加了一个新字段,并且可能会在服务器的响应中出现。您还可以将此字段手动添加到当前存根类中的响应中,并将其标记为可选,而无需使用任何自动生成工具

如果希望在将来引入更改时避免完全中断客户端(以及重新生成/修改类),可以尝试:

  • 为新用户创建新的服务版本,同时维护旧版本和新版本,使新版本仅对新用户可用
  • 为同一服务中的新消费者创建新的服务运营,保持新旧运营,使新运营只对新消费者开放
  • WSDL
    中将字段标记为可选-属性
    minOccurs=0
    (仅当您的用例允许时才可能)。看见简言之,在WSDL中,元素必须如下所示:
    。尝试这种方式,而无需在客户端更新合同。同样,这取决于客户对遵守合同的要求有多严格
  • 请尝试查看Java中是否有任何特定选项,以使客户端更能容忍可选值(例如-)*
  • 如果您有许多无法修改的客户端,并且您不想破坏与它们的通信契约,那么这些方法非常有用。请注意,以上所有选项都是有代价的——您将用更多的维护和治理来换取与客户机的兼容性。所以明智地选择


    希望这有帮助

    嗨@Plamen,目前我们正在使用方法1和2,我对方法3感兴趣。我们使用Jboss公开soap,wsdl是自动生成的。因此,您可以帮助将注释标记为可选字段吗?我已经为所有字段设置了minOccurs=0,但它不适用于meDid。您要更新客户端中的代理存根吗?或者您想在避免更新存根的同时执行此操作?我想在响应中添加更多字段,并使用相同的存根从旧客户机保持运行。我想,您必须使用选项1和2。然而,这里描述了一个Java解决方案(),但它仍然需要一次存根的初始重新生成。我不知道它是否适合你的情况。