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

Nis*_*odi 6 java soap

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

Pla*_*rov 3

这是有效的REST,因为 with HTTPonly 你没有像SOAPover那样严格的通信协议HTTP。默认情况下SOAP存在更严格和详细的技术合同,双方都必须遵守。如果你想要相同的行为,REST你必须自己实现验证和规则,因为它有点开放,这是这个想法的一部分。

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

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

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

如果您有许多无法修改的客户端并且您不想破坏与他们的通信合同,那么这些方法非常有用。请注意,上述所有选项都是有代价的 - 您将牺牲更多的维护和管理来提高与客户的兼容性。所以要明智地选择。

希望这可以帮助!