2013-05-02 23 views
2

我目前正在開發一個使用webservices(SOAP 1.2)的應用程序。我很想知道我是否可以依賴xmlschema序列中無界元素的順序。這是我在使用的wsdl中對該序列的定義。xmlschema序列中無界元素的順序

<xsd:complexType name="IdList"> 
    <xsd:sequence> 
    <xsd:element maxOccurs="unbounded" minOccurs="0" name="id" type="xsd:integer"/> 
    </xsd:sequence> 
</xsd:complexType> 

這是否爲我提供了有關元素順序的任何保證?之所以這樣說,是相關聯的SOAP消息的摘錄:

<web:globalRecipientIds> 
    <!--Zero or more repetitions:--> 
    <web:id>1</web:id> 
    <web:id>15</web:id> 
    <web:id>7</web:id> 
</web:globalRecipientIds> 

這是否意味着它出現在SOAP消息的接收端會將其順序?這是否取決於接收端的實現?如果是這樣,我使用wsdl2java從apache軸生成接收端,以從wsdl文件生成java代碼。你能告訴我一些具體的事情嗎?

回答

2

XML元素的順序是有意義的 - 無論模式如何 - 例如

<web:globalRecipientIds> 
    <web:id>1</web:id> 
    <web:id>15</web:id> 
    <web:id>7</web:id> 
</web:globalRecipientIds> 

<web:globalRecipientIds> 
    <web:id>15</web:id> 
    <web:id>1</web:id> 
    <web:id>7</web:id> 
</web:globalRecipientIds> 

是兩個不同的XML和XML工具(應該)保護和識別元素的順序。

話雖如此,這並不能保證'接收端將按照它在SOAP消息中出現的順序來對待它' - 取決於接收端在XML中的作用。它會收到一個有序的ID列表,但是如果(例如)將這些ID放在字典或其他散列結構中,那麼訂單就會丟失。

+0

謝謝,這是我懷疑的。我想,我會爲每個ID添加一個額外的「職位」屬性以確保訂單。 – ixM 2013-05-06 08:10:10

+0

mhh ...你已經在XML中訂購了,添加一個position屬性只會添加冗餘信息。我想說你必須檢查在接收端如何處理XML ......是你控制的代碼? – MiMo 2013-05-06 13:34:02