Java 如何忽略SOAP响应中的不可用字段
我有一个用SOAP开发的web服务,已经为它生成了一个客户端。现在,为了响应web服务,我添加了一个新字段。现在,当我调用客户端时,它会给出错误,因为更新的字段在客户端可用的数据类中不可用。在解组时,有没有办法忽略那些在数据类中不可用的属性。这同样适用于休息。TIA这在Java 如何忽略SOAP响应中的不可用字段,java,soap,Java,Soap,我有一个用SOAP开发的web服务,已经为它生成了一个客户端。现在,为了响应web服务,我添加了一个新字段。现在,当我调用客户端时,它会给出错误,因为更新的字段在客户端可用的数据类中不可用。在解组时,有没有办法忽略那些在数据类中不可用的属性。这同样适用于休息。TIA这在REST中起作用,因为只有HTTP没有像SOAPoverHTTP那样严格的通信协议。在SOAP中,默认情况下有一个更具限制性和更详细的技术合同,双方必须遵守该合同。如果您想要与REST相同的行为,您必须自己实现验证和规则,因为它有
REST
中起作用,因为只有HTTP
没有像SOAP
overHTTP
那样严格的通信协议。在SOAP
中,默认情况下有一个更具限制性和更详细的技术合同,双方必须遵守该合同。如果您想要与REST相同的行为,您必须自己实现验证和规则,因为它有点开放,这是想法的一部分
为了解决您的问题,您可能需要使用新的WSDL
文件重新生成客户机代理/存根类,以使客户机意识到已经添加了一个新字段,并且可能会在服务器的响应中出现。您还可以将此字段手动添加到当前存根类中的响应中,并将其标记为可选,而无需使用任何自动生成工具
如果希望在将来引入更改时避免完全中断客户端(以及重新生成/修改类),可以尝试:
WSDL
中将字段标记为可选-属性minOccurs=0
(仅当您的用例允许时才可能)。看见简言之,在WSDL中,元素必须如下所示:
。尝试这种方式,而无需在客户端更新合同。同样,这取决于客户对遵守合同的要求有多严格李>
希望这有帮助 嗨@Plamen,目前我们正在使用方法1和2,我对方法3感兴趣。我们使用Jboss公开soap,wsdl是自动生成的。因此,您可以帮助将注释标记为可选字段吗?我已经为所有字段设置了minOccurs=0,但它不适用于meDid。您要更新客户端中的代理存根吗?或者您想在避免更新存根的同时执行此操作?我想在响应中添加更多字段,并使用相同的存根从旧客户机保持运行。我想,您必须使用选项1和2。然而,这里描述了一个Java解决方案(),但它仍然需要一次存根的初始重新生成。我不知道它是否适合你的情况。