根據你的意思是「我不希望另一個階級」,也許這將制定出你到底是什麼:
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內部需要。
謝謝。這有助於。 – user1004086