2009-12-12 161 views

回答

4

請求和響應數據,則不能做到這一點那麼容易。通常,xsd定義輸入和輸出消息的結構(類型)。 wsdl使用xsd來定義將由服務公開的操作。一個operation通常有一個名字和一對輸入和輸出消息。

我沒有看到一個工具如何能「重建」只有xsd的操作,除非它使用命名約定。例如。消息requestDoItresponseDoIt→操作DoIt。如果xsd已經包含可能正常的操作(這很不尋常),但它似乎不是你的情況。

手動創建wsdl不應該太長。

<types> 
    <xsd:schema xmlns="..." targetNamespace="..."> 
     <xsd:import namespace="..." schemaLocation="MySchema.xsd"/> 
    </xsd:schema> 
</types> 
... 
<wsdl:portType name="..."> 
    <wsdl:operation name="doIt"> 
     <wsdl:input message="tns:requestDoIt"/> 
     <wsdl:output message="tns:responseDoIt"/> 
    </wsdl:operation> 
</wsdl:portType> 

看看WSDL essentials得到wsdl的一般結構。

或者您可以嘗試一下工具WSDL Generator(來自http://www.theprogrammerfactory.com/),其目的顯然是爲了緩解這項任務。 (請注意,我從來沒有使用它)。

另一種方法是從xsd中生成類,然後使用它們手動定義服務類(這是匹配類型一起進入相應操作的繁瑣部分),然後使用另一個工具來轉換服務類回到完整的wsdl。有多種工具可用於轉換爲xsd和wsdl,或者用於Java或C#:wsgen,wsimport,xsd.exe和wsdl.exe。

+0

另請參閱http://stackoverflow.com/questions/920086/generating-a-wsdl-from-a-xsd-file – ewernli

+0

嘗試使用http:// www的WSDL Generator。 theprogrammerfactory.com/並且它沒有創建符合提供的XSD的WSDL。例如,它無法正確創建消息元素,因爲它忽略了任何輸入參數。 – toc777