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

我有一个用SOAP开发的Web服务,已经为其生成了一个客户端.现在我正在添加一个新的字段来响应Web服务.现在,当我调用客户端时,它会给出错误,因为更新的字段在客户端可用的数据类中不可用.有没有办法忽略那些在解组时在数据类中不可用的属性.同样在REST中工作正常. TIA 最佳答案 这在REST中有效,因为只有HTTP才能与SOAP over HTTP一样具有如此严格的通信协议.在SOAP中,默认情况下制定了更严格和详细的技术合同,双方必须遵守该合同.如果你想要REST的相同行为,你必须自己实现验证和规则,因为它有点开放,这是想法的一部分.

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

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

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

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

希望这可以帮助!

点赞