我有一个用SOAP开发的Web服务,已经为其生成了一个客户端。现在我正在添加一个新的字段来响应Web服务。现在,当我调用客户端时,它会给出错误,因为更新的字段在客户端可用的数据类中不可用。有没有办法忽略那些在解组时在数据类中不可用的属性。同样在REST中工作正常。 TIA
答案 0 :(得分:1)
这适用于REST
,因为HTTP
仅与SOAP
HTTP
SOAP
之间没有如此严格的沟通协议。在REST
中,默认情况下制定了更严格和详细的技术合同,双方必须遵守该合同。如果你想要WSDL
的相同行为,你必须自己实现验证和规则,因为它有点开放,这是这个想法的一部分。
要解决您的问题,您可能需要使用新的minOccurs=0
文件重新生成客户端代理/存根类,以便让客户端知道已添加了一个新字段并且可以在服务器的响应。您也可以手动将此字段添加到当前存根类中的响应中,并将其标记为可选,而不使用任何自动生成工具。
如果您希望在将来引入更改时完全避免破坏客户端(并重新生成/修改类),您可以尝试:
WSDL
中的属性<xs:element name="el_name" type="xs:string" minOccurs="0" maxOccurs="1"/>
(仅当您的用例允许时才可以)。见XML Schema Indicators。简而言之,在您的WSDL中,您的元素必须如下所示:
com.test.dao.java
。尝试这种方式,而无需在客户端更新合同。同样,这取决于客户遵守合同的严格程度。 如果您有许多客户无法修改并且您不想与他们违反通信合同,这些方法很有用。请注意,以上所有选项都需要付出代价 - 您将为您提供更多维护和管理,以提高与客户的兼容性。所以明智地选择。
希望这有帮助!