我目前正在开发一个使用webservices(SOAP 1.2)的应用程序。我很想知道我是否可以依赖xmlschema序列中无界元素的顺序。这是我在wsdl中使用的那个序列的定义。
<xsd:complexType name="IdList">
<xsd:sequence>
<xsd:element maxOccurs="unbounded" minOccurs="0" name="id" type="xsd:integer"/>
</xsd:sequence>
</xsd:complexType>
这是否能给我任何关于元素顺序的保证?假设这是相关肥皂消息的摘录:
<web:globalRecipientIds>
<!--Zero or more repetitions:-->
<web:id>1</web:id>
<web:id>15</web:id>
<web:id>7</web:id>
</web:globalRecipientIds>
这是否意味着接收端会按照它在SOAP消息中出现的顺序对待它?这取决于接收端的实现吗?如果是这样,我使用来自apache轴的wsdl2java生成接收端,以从wsdl文件生成java代码。你能告诉我一些具体的事情吗?
答案 0 :(得分: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放入字典或其他散列结构中,则命令会丢失。