我有一个关于输出消息中选择上下文中 Web 服务接口的向后兼容性的问题。实在找不到答案。
假设我有一个带有操作“getData”的 Web 服务,它具有以下响应消息(这是 Web 服务的 V1)。响应消息包括一个选择元素,该元素返回“指令”或“KeyTranslation”的有效负载。这个 V1 WSDL 被各种消费者使用,它们生成 java 绑定并在生产中推出应用程序。
<xsd:complexType name="GetInstructionListResponse">
<xsd:sequence>
<xsd:element name="ContinueInfo" type="tns:ContinueInfo" form="qualified" />
<xsd:element name="ResultLength" type="xsd:integer" form="qualified" />
<xsd:element name="Payload">
<xsd:complexType>
<xsd:choice>
<xsd:element name="DataObjectList1" type="tns:Instruction" form="qualified" minOccurs="1" maxOccurs="50" />
<xsd:element name="DataObjectList2" type="tns:KeyTranslation" form="qualified" minOccurs="1" maxOccurs="50" />
</xsd:choice>
</xsd:complexType>
</xsd:element>
<xsd:element name="ReturnCodeList" type="tns:ReturnCodeList" form="qualified" minOccurs="0">
<xsd:annotation>
<xsd:documentation>Description: List of error descriptions</xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
作为此界面的提供者,我们现在将在推出 V1 之后引入第三个选择元素“建议”。
<xsd:complexType name="GetInstructionListResponse">
<xsd:sequence>
<xsd:element name="ContinueInfo" type="tns:ContinueInfo" form="qualified" />
<xsd:element name="ResultLength" type="xsd:integer" form="qualified" />
<xsd:element name="Payload">
<xsd:complexType>
<xsd:choice>
<xsd:element name="DataObjectList1" type="tns:Instruction" form="qualified" minOccurs="1" maxOccurs="50" />
<xsd:element name="DataObjectList2" type="tns:KeyTranslation" form="qualified" minOccurs="1" maxOccurs="50" />
<xsd:element name="DataObjectList2" type="tns:Advice" form="qualified" minOccurs="1" maxOccurs="50" />
</xsd:choice>
</xsd:complexType>
</xsd:element>
<xsd:element name="ReturnCodeList" type="tns:ReturnCodeList" form="qualified" minOccurs="0">
<xsd:annotation>
<xsd:documentation>Description: List of error descriptions</xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
现在的问题是,输出消息中的这种变化是否是一个重大变化,即现有消费者(使用不需要新选择元素的 V1)是否必须做任何事情(例如,重新生成 java 绑定、任何编组问题? ) 以防我们将 V1 WSDL 提供者接口替换为具有此扩展响应结构的提供者,或者只要他在其处理中不需要第三个选择元素,这对他来说是透明的?