繁体   English   中英

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

[英]How to Ignore unavailable fields from a SOAP Response

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

这在REST有效,因为只有HTTP才能与SOAP over HTTP一样具有如此严格的通信协议。 SOAP中,默认情况下制定了更严格和详细的技术合同,双方必须遵守该合同。 如果你想要REST的相同行为,你必须自己实现验证和规则,因为它有点开放 ,这是想法的一部分。

要解决您的问题,您可能需要使用新的WSDL文件重新生成客户端代理/存根类,以使客户端知道已添加新字段并且可以在服务器的响应中预期。 您也可以手动将此字段添加到当前存根类中的响应中,并将其标记为可选,而不使用任何自动生成工具。

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

  1. 为新消费者创建新的服务版本,维护旧版本和新版本,使新版本仅供新消费者使用;
  2. 为同一服务中的新消费者创建新的服务操作,维护新旧操作,使新服务仅供新消费者使用;
  3. 将字段标记为可选 - WSDL中的属性minOccurs=0 (仅当您的用例允许时才可以)。 请参阅XML架构指示器 简而言之,在您的WSDL中,您的元素必须如下所示: <xs:element name="el_name" type="xs:string" minOccurs="0" maxOccurs="1"/> 尝试这种方式,而无需在客户端更新合同。 同样,这取决于客户遵守合同的严格程度。
  4. 尝试查看Java中是否有任何特定选项使客户端更容忍可选值 - 例如 - 这一个 )*

如果您有许多无法修改的客户端并且您不希望与它们断开通信合同,则这些方法很有用。 请注意,以上所有选项都需要付出代价 - 您将为您提供更多维护和管理,以提高与客户的兼容性。 所以明智地选择。

希望这可以帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM