2011-10-19 105 views

回答

0

解組

您可以用它去上課參數的unmarshal方法。當指定一個類時,JAXB實現不需要使用根元素來確定要解組到的類。

編組

當編組你可以用根對象中一個的JAXBElement提供根元素的信息。

+1

謝謝。這有助於。 – user1004086

1

根據你的意思是「我不希望另一個階級」,也許這將制定出你到底是什麼:

import javax.xml.bind.JAXBContext; 
import javax.xml.bind.Unmarshaller; 
import javax.xml.bind.annotation.XmlElement; 
import javax.xml.bind.annotation.XmlRootElement; 
import javax.xml.bind.annotation.XmlSeeAlso; 
import java.io.StringReader; 

public class JaxbBindTwoRootElementsToSameClass { 
    public static void main(String[] args) throws Exception { 
     String xml1 = "<abc><name>hello</name></abc>"; 
     String xml2 = "<xyz><name>hello</name></xyz>"; 
     Unmarshaller unmarshaller = JAXBContext.newInstance(Foo.class).createUnmarshaller(); 
     Object o1 = unmarshaller.unmarshal(new StringReader(xml1)); 
     Object o2 = unmarshaller.unmarshal(new StringReader(xml2)); 
     System.out.println(o1); 
     System.out.println(o2); 
    } 

    @XmlSeeAlso({Foo.Foo_1.class, Foo.Foo_2.class}) 
    static class Foo { 
     @XmlRootElement(name = "abc") 
     static class Foo_1 extends Foo {} 

     @XmlRootElement(name = "xyz") 
     static class Foo_2 extends Foo {} 

     @XmlElement 
     String name; 

     @Override 
     public String toString() { 
      return "Foo{name='" + name + '\'' + '}'; 
     } 
    } 
} 

輸出:

Foo{name='hello'} 
Foo{name='hello'} 

它的好處使用JAXB幾乎與您平常一樣。這只是一個非傳統的階級組織。您甚至只需在創建時將Foo.class傳遞給JAXBContext即可。沒有修補JAXB內部需要。

相關問題