我正在使用第三方Web服務,其定義和實現超出了我的控制範圍。 此Web服務將在未來發生變化。從WSDL自動提取內聯XSD到XSD文件
Web服務應該用於生成一個XML文件,其中包含一些與Web服務相同的數據(由相同的XSD類型表示)以及該程序生成的一些額外信息。
我的方法:
- 創建自己的XSD指稱爲Web服務的WSDL的XSD定義
- 使用Java(這XSD還包括XSD類型的額外信息很明顯。)使用具有相同數據綁定框架的Java SOAP框架(如Axis2或CXF)從WSDL生成數據綁定類的XML數據綁定框架(如ADB或JiXB)這將使我能夠直接在一般情況下使用Web服務檢索的對象)
我將在我自己的XSD文件中使用但在WSDL中定義的XSD類型可能會發生更改。無論何時他們改變,我想再次自動處理XSD和WSDL數據綁定。 (如果改變是不夠顯著,這可能會引發一些開發工作(但通常不)。)
我的問題:
在步驟1中,我需要一個XSD指的是同一類型,由Web服務。
WSDL指的是另一個WSDL,它指的是另一個WSDL等。最終有一個WSDL需要內聯的XSD類型。據我所知,沒有辦法直接從XSD引用WSDL的內聯XSD類型。
我認爲最可行的方法是在自動處理(數據綁定之前)中包含額外的步驟,將WSDL中的內聯XSD提取到其他XSD文件中。這些其他XSD文件可以通過我自己的XSD文件引用。
事情,我想避免:
- 手動複製粘貼內聯XSD到XSD文件
- 任何手動步驟(如確定(我找了一個自動的過程)。手動包含內聯類型的WSDL(WSDL的位置確實也會發生變化))
- 在我自己的XSD中使用xsd:any。我想我自己的XSD文件是正確的。
- 使用非Java技術(如.NET)
- 大量的執行情況(但你將如何實現這樣的提取線索,歡迎反正)
PS:我發現了一些類似的問題,但他們都有這樣的回答:WTH你想這麼做嗎?這是我相當大的背景故事的原因。
我早就猜到了這樣的事情是必要的。我實際上希望有更多的框架,例如:** for(XmlSchema xmlSchema:wsdl.extractNamespaceSchemas())xmlSchema.writeFile(ns2FileName(xmlSchema.getTargetNamespace())); **啊,一個不完美的世界... – 2010-04-07 08:27:17
@Steven :聽起來像是一個開源項目的機會,讓世界更接近完美;-) – 2010-04-07 11:33:45