2011-05-18 15 views
1

我正在嘗試爲傳統服務編寫WSDL 1.1定義,該服務的文檔指定了XML模式,該模式使用不同消息的不同定義對超負載的根(和其他)元素進行了定義。傳統服務中過載元素的WSDL

一個小示例包括下列架構一個消息:

<schema xmlns="http://www.w3.org/2001/XMLSchema" 
    targetNamespace="urn:example:namespace"> 
    <element name="message" type="boolean"/> 
</schema> 

和用於另一以下:

<schema xmlns="http://www.w3.org/2001/XMLSchema" 
    targetNamespace="urn:example:namespace"> 
    <element name="message" type="date"/> 
</schema> 

人們不能因此直接導入每個消息的架構給出到WSDL,如它在{urn:example:namespace}message的定義中引入了模糊性。

也可以改寫的模式使得這樣的過載元件同時驗證消息類型,因爲這將錯誤地暗示任一類型是有效的任一消息:

<schema xmlns="http://www.w3.org/2001/XMLSchema" 
    targetNamespace="urn:example:namespace"> 
    <element name="message"> 
     <simpleType> 
      <union memberTypes="boolean date"/> 
     </simpleType> 
    </element> 
</schema> 

它令我每個消息在其自己的命名空間中定義,或者在相同的命名空間中使用明確的元素名稱。但是,這樣的改變會破壞傳統的服務合同,因此可悲的是不是一種選擇。

感謝您對如何解決這個難題的想法和建議!

回答

0

Richard Schneideranswer促使我意識到,我能夠克服下列方式原題:

<schema xmlns="http://www.w3.org/2001/XMLSchema" 
    targetNamespace="urn:example:namespace"> 
    <complexType name="booleanMessageType"> 
     <xs:sequence> 
      <element name="message" type="boolean"/> 
     </xs:sequence> 
    </complexType> 
    <complexType name="dateMessageType"> 
     <xs:sequence> 
      <element name="message" type="date"/> 
     </xs:sequence> 
    </complexType> 
</schema> 

然後WSDL:

<definitions xmlns="http://schemas.xmlsoap.org/wsdl/" 
    xmlns:ns="urn:example:namespace" 
    targetNamespace="urn:example:wsdl"> 
    <import namespace="urn:example:namespace" location="schema.xsd"/> 
    <message name="BooleanMessage"> 
     <part name="body" type="ns:booleanMessageType"/> 
    </message> 
    <message name="DateMessage"> 
     <part name="body" type="ns:dateMessageType"/> 
    </message> 
    <!-- remainder of WSDL omitted for brevity --> 
</definitions> 

這引起了次要的問題,我將作爲評論鏈接到這個答案一旦公佈。

+1

此樣式不符合WS-I BP 1.1標準。您必須使用'element'屬性,而不是使用消息部分的'type'屬性來符合。另外,順便說一句,這種風格往往不起作用,因爲它參數名稱空間的模糊不清。 – 2011-05-18 14:05:33

+0

@John Saunders:如果沒有更好的解決方案即將出現,我們可以容忍缺乏WS-I BP 1.1合規性;不確定參數名稱空間爲什麼不明確 - 它是不是WSDL定義的「targetNamespace」(即'urn:example:wsdl')? – eggyal 2011-05-18 14:20:41

+0

[後續問題](http://stackoverflow.com/questions/6046477/referring-to-overloaded-elements-from-different-schema)我參考。 – eggyal 2011-05-18 14:36:28

0

也許你不應該使用名爲'message'的全局元素。如果「信息」是anoither元素中,那麼你可以使用這樣的事情:

<xs:element name="m1"> 
    <xs:complexType> 
     <xs:sequence> 
      <xs:element name="message" type="data"/> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 

<xs:element name="m2"> 
    <xs:complexType> 
     <xs:sequence> 
      <xs:element name="message" type="boolean"/> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 
+0

我已經更新了這個問題,以澄清指定的元素形成消息的根。 – eggyal 2011-05-18 13:41:40

+0

那麼我沒有任何其他想法。祝你好運。 – 2011-05-18 13:44:21

+0

雖然這使我想,也許我可以使用XPath明確地引用每個這樣的消息元素?是否有可能做類似''? – eggyal 2011-05-18 13:45:54