1

我有一个关于输出消息中选择上下文中 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 提供者接口替换为具有此扩展响应结构的提供者,或者只要他在其处理中不需要第三个选择元素,这对他来说是透明的?

4

2 回答 2

1

按照严格的定义,我将其称为重大变化。所谓“严格”,我的意思是可以编写一个在更改之前运行并在更改之后中断的程序。任何程序在更改之前将获得两个原始选择之一,但现在将获得第三个选择 - 该程序将被破坏。

此外,任何可以读取 WSDL 的程序都会看到它发生了变化。如果 WSDL 更改,可以合理地允许这样的程序“中断”。

请记住,当在 Visual Studio 中使用 wsdl2java 或“添加服务引用”等工具时,代码是从 WSDL 编写的。WSDL 的更改将导致生成的代码发生更改。不要掉以轻心,您可能会在他们不知情的情况下更改某人的代码。

于 2013-05-01T01:23:18.117 回答
0

与此同时,我正在建立一个测试平台(Eclipse、ApacheV6、Axis2)并运行一个测试:

  • 拥有一个使用服务器 V1 的 WSDL java 绑定的客户端(两个选择元素)
  • 让一个运行 WSDL V2 实现的服务器具有三个选择。
  • 结果:Java 客户端仍然可以连接并从 V2 服务器返回两个选择元素的正确结果(没有编组问题,无需重新编译)。
于 2013-04-30T23:23:38.693 回答