我在輸出消息中的選擇上下文中有關於Webservice接口的向後兼容性的問題。無法真正找到答案。在xsd選項擴展的情況下向後兼容Webservice操作輸出消息
我們假設我有一個帶有「getData」操作的Webservice,它有以下響應消息(這是Web服務的V1)。響應消息包含一個選擇元素,它返回「指令」或「密鑰翻譯」的有效負載。這個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的推出後引入第三個選擇元素「Advise」。
<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提供者接口替換爲提供者,或者只要他不需要處理中的第三個選擇元素,它就對他來說是透明的?
選擇不是那種可擴展的;作爲示例,沒有定製綁定文件的JAXB版本將根據選擇的內容創建時髦的命名get/set選項。所以問題可能在於,即使接受更改並重新創建代碼(使用xjc),您也會得到破壞代碼的類(除非使用自定義綁定)。你使用枚舉的方法是正確的。另一種達到相同的機制,就默認綁定而言更好,是考慮替代組而不是選擇。 – 2013-05-01 13:53:29
thx爲答案和附加點。考慮到替代組我會檢查出來。我必須補充一點,web服務外觀由基於ibm zos cobol的服務實現支持。目前的wsdl2cobol編譯器在其wsdl功能豐富性方面有所限制。從部署的角度來看,我們的消費者將在編譯時使用wsdl,而不是運行時。任何新的編譯和部署都將包含兩個獨立測試環境階段的傳遞。 – talfco 2013-05-02 19:15:41
只是好奇,是由於REDEFINES的這個選擇? – 2013-05-02 19:23:03