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

时间:2016-01-13 09:03:56

标签: java soap

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

1 个答案:

答案 0 :(得分:1)

这适用于REST,因为HTTP仅与SOAP HTTP SOAP之间没有如此严格的沟通协议。在REST中,默认情况下制定了更严格和详细的技术合同,双方必须遵守该合同。如果你想要WSDL的相同行为,你必须自己实现验证和规则,因为它有点开放,这是这个想法的一部分。

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

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

  1. 为新消费者创建新服务版本,同时维护旧版本和新版本,使新版本仅供新用户使用;
  2. 为同一服务中的新消费者创建新的服务操作,同时维护旧操作和新操作,使新服务仅供新消费者使用;
  3. 将字段标记为可选 - WSDL中的属性<xs:element name="el_name" type="xs:string" minOccurs="0" maxOccurs="1"/>(仅当您的用例允许时才可以)。见XML Schema Indicators。简而言之,在您的WSDL中,您的元素必须如下所示: com.test.dao.java。尝试这种方式,而无需在客户端更新合同。同样,这取决于客户遵守合同的严格程度。
  4. 尝试查看Java中是否有任何特定选项使客户端更容忍可选值 - 例如 - this one)*
  5. 如果您有许多客户无法修改并且您不想与他们违反通信合同,这些方法很有用。请注意,以上所有选项都需要付出代价 - 您将为您提供更多维护和管理,以提高与客户的兼容性。所以明智地选择。

    希望这有帮助!