2012-12-19 45 views
2

我有以下格式的XML:JAXB在服務器上改變XML訂單中,但未在localhost

<products> 
    <product> 
      <id>1</id> 
      <name>a</name> 
      <price>24.5</price> 
    </product> 
    <product> 
      <id>2</id> 
      <name>b</name> 
      <price>3.75</price> 
    </product> 
    . 
    . 
    . 
</products> 

我使用JAXB獲得從XML數據。

這是XSD的樣子:

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> 
    <xs:element name="products"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element maxOccurs="unbounded" ref="product"/> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 
    <xs:element name="product"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element ref="id"/> 
     <xs:element ref="name"/> 
     <xs:element ref="price"/> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 
    <xs:element name="id" type="xs:integer"/> 
    <xs:element name="name" type="xs:NCName"/> 
    <xs:element name="price" type="xs:decimal"/> 
</xs:schema> 

我的問題是,在本地主機上我得到的產品一個接一個像XML(id爲1比2號等)但是,當我把它上傳到我的亞馬遜服務器(Linux),我得到不同的順序,我不明白爲什麼。

有沒有人有解釋?

+1

爲什麼沒有明確的想法。如果你發佈你的POJO,它將更容易調查。 –

回答

2

默認情況下JAXB (JSR-222)實現不定義訂單。這意味着Java VM之間的行爲可能會有所不同。定義訂單有幾個選項。

選項#1 - @XmlType(propOrder={"foo", "bar})

在類級別使用此批註允許您指定要在其中看到編組到XML的XML元素的順序。

選項#2 - @XmlAccessorOrder(XmlAccessOrder.ALPHABETICAL)

可以使用@XmlAccessorOrder批註在類級別指定您希望看到以字母順序編組到XML的XML元素。

+0

有沒有辦法保持xml排序? 我不想完全排序元素,我只是想按照它們到達xml的順序一個一個地讀取元素。 – ItayD

+0

@ItayD - 你的意思是'產品'集合的內容是不同的?如果是的話,你使用的是什麼類型的集合類? –

+0

內容沒有區別,只是排序。比方說,在XML,與的產品與的產品之前,這樣在服務器端,我以前這是不是在XML訂單越來越。 我將XSD添加到了我的問題中,以便您可以看到該集合。 – ItayD

相關問題