2011-08-23 27 views
1

在JAXB中是否存在對於java.lang.Object的「XML Schema類型爲Java數據類型」綁定?如何在JAXB中指定對象引用數據類型

簡單的例子

<Channels> 
     <EChannel> 
     <Number>1</Number> 
     <Format>0</Format> 
     <VarNumber>11</VarNumber> 
     <Name>First Channel</Name> 
     <ChannelHandler></ChannelHandler> 
     </EChannel> 
     <EChannel> 
     <Number>2</Number> 
     <Format>0</Format> 
     <VarNumber>22</VarNumber> 
     <Name>Second Channel</Name> 
     <ChannelHandler></ChannelHandler> 
     </EChannel> 
    </Channels> 

基本上我會先解組XML樹成的POJO的ArrayList(列表)

然後在運行時我想一個Java對象附加到的ChannelHandler屬性。

我不想手動做任何事情EChannel POJO裏面,因爲我想這些自動使用XJC

感謝

回答

1

Object類型的屬性使用@XmlAnyElement(lax=true)應該給你你的行爲會產生尋找。

從XML模式開始時,類似於以下的模式結構將導致此註釋。

<xs:element name="ChannelHandler"> 
    <xs:complexType> 
     <xs:sequence> 
      <xs:any processContents="lax"/> 
     </xs:sequence> 
    </xs:complexType> 
</xs:element> 

完整的XML Schema

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="Channels"> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element name="EChannel" maxOccurs="unbounded"> 
        <xs:complexType> 
         <xs:sequence> 
          <xs:element name="Number" type="xs:int"/> 
          <xs:element name="Format" type="xs:int"/> 
          <xs:element name="VarNumber" type="xs:int"/> 
          <xs:element name="Name" type="xs:string"/> 
          <xs:element name="ChannelHandler"> 
           <xs:complexType> 
            <xs:sequence> 
             <xs:any processContents="lax"/> 
            </xs:sequence> 
           </xs:complexType> 
          </xs:element> 
          <xs:any/> 
         </xs:sequence> 
        </xs:complexType> 
       </xs:element> 
      </xs:sequence> 
     </xs:complexType> 
    </xs:element> 
</xs:schema> 

更多信息

+1

謝謝布萊斯。大範 - 過去我從你博客上的例子中學到了很多東西。關於上面的soln - 如何在XSD中指定它以使用xjc自動生成類,而不是手動添加註釋? – FatherFigure

+0

@Amit Phatarphekar - 我已經更新了我的答案,以包含將導致此註釋的示例XSD。我很高興聽到您發現我的博客(http://blog.bdoughan.com/)有用。 –

相關問題