2017-04-17 58 views
0

我有3個輸入XML,它們幾乎都具有相同的元素和屬性,實際上它們表示相同的東西,所以我想將它們編組到相同的對象,類似於這樣的:JAXB:解組不同的xml到同一個對象

請求一:

<?xml version="1.0" encoding="UTF-8"?> 
<RequestOne> 
    <id>123</id> 
    <name>foo</name> 
</RequestOne> 

請求二:

<?xml version="1.0" encoding="UTF-8"?> 
<RequestTwo> 
    <id>123</id> 
    <value>val</value> 
</RequestTwo> 

要求三:

<?xml version="1.0" encoding="UTF-8"?> 
<RequestThree> 
    <name>foo</name> 
    <value>val</value> 
</RequestThree> 

所需的對象(像):

@XmlRootElement 
public class Resource{ 

    @XmlElement 
    private String id; 
    @XmlElement 
    private String name; 
    @XmlElement 
    private String value; 

    //(...) more code 
} 

但我不能使用多個rootElement的註解問JAXB所有3請求解組的類Resource

的對象有一種方法來做到這一點?或者我必須做3個Sepparated類?

感謝您使用重載的通用unmarshal方法的幫助

回答

0

選項1

解組:

public static class Base { 
    private String name ; 

    @XmlElement(name = "name") 
    public String getName() { 
     return name; 
    } 

    public Base setName(String name) { 
     this.name = name; 
     return this; 
    } 
} 

public static void main (String [] args) throws JAXBException { 
    JAXBContext jaxbContext = JAXBContext.newInstance(Base.class); 
    Unmarshaller unmarshaller = jaxbContext.createUnmarshaller(); 
    JAXBElement<Base> basea = unmarshaller.unmarshal(new StreamSource(new StringReader("<RootA><name>nanana</name></RootA>")), Base.class); 
    System.out.println(basea.getValue().getName()); 
    JAXBElement<Base> baseb = unmarshaller.unmarshal(new StreamSource(new StringReader("<RootB><name>nbnbnb</name></RootB>")), Base.class); 
    System.out.println(baseb.getValue().getName()); 
} 

選項2

您可以隨時使用Java的類子類型功能嗎? JAXB也對父類進行註釋掃描。這個例子的作品

public static class Base { 
    private String name ; 

    @XmlElement(name = "name") 
    public String getName() { 
     return name; 
    } 

    public Base setName(String name) { 
     this.name = name; 
     return this; 
    } 
} 

@XmlRootElement(name = "RootA") 
public static class RootA extends Base{ 
} 

@XmlRootElement(name = "RootB") 
public static class RootB extends Base { 
} 


public static void main (String [] args) throws JAXBException { 
    JAXBContext jaxbContext = JAXBContext.newInstance(RootA.class,RootB.class); 
    Unmarshaller unmarshaller = jaxbContext.createUnmarshaller(); 
    RootA rootA = (RootA)unmarshaller.unmarshal(new StringReader("<RootA><name>nanana</name></RootA>")); 
    System.out.println(rootA.getName()); 
    RootB rootB = (RootB)unmarshaller.unmarshal(new StringReader("<RootB><name>nbnbnb</name></RootB>")); 
    System.out.println(rootB.getName()); 
} 
+0

非常感謝,我用第一個選項,並完美地工作:D – Numpakov

相關問題