2012-06-11 66 views
0

我有了數據的這樣一個塊的REST XML響應:XSD架構是JAXB會發現接受

<tag> 
    <total-pages type="integer">5</total-pages> 
    <previous-page nil="true"></previous-page> 
    <next-page nil="true"></next-page> 
    <offset type="integer">5</offset> 
</tag> 

現在,有時數據可以回來像這樣:

<tag> 
    <total-pages type="integer">5</total-pages> 
    <previous-page type="integer">0</previous-page> 
    <next-page type="integer">1</next-page> 
    <offset type="integer">5</offset> 
</tag> 

我一直在想出一個XSD模式結構,它將考慮到JAXB可以接受的兩種可能性。

我曾嘗試:

<tag> 
    <total-pages type="numeric-type" /> 
    <previous-page type="numeric-type" /> 
    <next-page type="numeric-type" /> 
    <offset type="numeric-type" /> 
</tag> 

<xsd:complexType> 
    <xsd:simpleContent> 
     <xsd:extension base="xsd:integer"> 
      <xsd:attribute type="xsd:string" name="type" use="optional"> 
      <xsd:attribute type="xsd:boolean" name="nil" use="optional"> 
     </xsd:extension> 
    </xsd:simpleContent> 
</xsd:complexType> 

但是JAXB與解組錯誤炸燬。

關於什麼XSD模式結構我可以用來說明返回的XML中的可變性(我無法更改XML,它來自我無法控制的第三方)。

謝謝

佩裏

+0

你會得到什麼解組錯誤? –

回答

0

我已經(在你的情況下,兩個)從XML樣本生成一個XSD開始:

<?xml version="1.0" encoding="utf-8"?> 
<!--XML Schema generated by QTAssistant/XML Schema Refactoring (XSR) Module (http://www.paschidev.com)--> 
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="tag"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element name="total-pages"> 
      <xs:complexType> 
      <xs:simpleContent> 
       <xs:extension base="xs:unsignedByte"> 
       <xs:attribute name="type" type="xs:string" use="required" /> 
       </xs:extension> 
      </xs:simpleContent> 
      </xs:complexType> 
     </xs:element> 
     <xs:element name="previous-page"> 
      <xs:complexType> 
      <xs:simpleContent> 
       <xs:extension base="xs:string"> 
       <xs:attribute name="type" type="xs:string" use="optional" /> 
       <xs:attribute name="nil" type="xs:boolean" use="optional" /> 
       </xs:extension> 
      </xs:simpleContent> 
      </xs:complexType> 
     </xs:element> 
     <xs:element name="next-page"> 
      <xs:complexType> 
      <xs:simpleContent> 
       <xs:extension base="xs:string"> 
       <xs:attribute name="type" type="xs:string" use="optional" /> 
       <xs:attribute name="nil" type="xs:boolean" use="optional" /> 
       </xs:extension> 
      </xs:simpleContent> 
      </xs:complexType> 
     </xs:element> 
     <xs:element name="offset"> 
      <xs:complexType> 
      <xs:simpleContent> 
       <xs:extension base="xs:unsignedByte"> 
       <xs:attribute name="type" type="xs:string" use="required" /> 
       </xs:extension> 
      </xs:simpleContent> 
      </xs:complexType> 
     </xs:element> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 
</xs:schema> 

當你與你的XSD比較,你請注意使用字符串而不是整數作爲基本類型。這就解釋了爲什麼你有解組問題:一個空字符串不是一個有效的數字。

如果不是「nil」,你會得到一個xsi:nil屬性,那麼XSD將會以不同的方式產生,也就是說,你的元素會有nillable =「true」。

由於您無法更改XML,因此您堅持使用字符串;或者,你可以創建一個空字符串和數字值之間的聯合......至於如何看待JAXB,你可以試試它...

+0

這似乎有伎倆。由於材料在數據返回時是整數,所以我在考慮整數而不是字符串。 –