2014-09-03 3 views
2

Давайте предположим, что мы имеем XML consnensual с Schema и Java класса с некоторыми общими полями:Две различные схемы и JAXB ИАС

<objectFromSchema1> 
    <element1/> 
    <commonElement1/> 
    <commonElement2/> 
    <element2/> 
    </objectFromSchema1> 

    public class X { 
    private String element1; 
    private String commonElement1; 
    private String commonElement2; 
    private String element2; 
    } 

Есть хороший способ unmarschall такого рода XML в объект Java? Это означает: конвертировать все консенсуальные поля и устанавливать нулевое значение для отдыха.

+0

может я знаю причину, почему вы спрашиваете это? Это очень удобный и простой способ – Vihar

ответ

1

"ДА"

Если у вас есть XSD вы также можете автоматически генерировать эти классы от <artifactId>maven-jaxb2-plugin</artifactId> Maven плагин.

Пример вашего класса

import java.io.Serializable; 

import javax.xml.bind.annotation.XmlAccessType; 
import javax.xml.bind.annotation.XmlAccessorType; 
import javax.xml.bind.annotation.XmlRootElement; 
import javax.xml.bind.annotation.XmlType; 

@XmlAccessorType(XmlAccessType.FIELD) 
@XmlType(name = "objectFromSchema1", propOrder = { 

}) 
@XmlRootElement(name = "objectFromSchema1") 
public class ObjectFromSchema1 
implements Serializable 
{ 

    private final static long serialVersionUID = 12343L; 
    protected String element1; 
    protected String element2; 
    protected String commonElement1; 
    protected String commonElement2; 
    public String getElement1() { 
     return element1; 
    } 
    public void setElement1(String element1) { 
     this.element1 = element1; 
    } 
    public String getElement2() { 
     return element2; 
    } 
    public void setElement2(String element2) { 
     this.element2 = element2; 
    } 
    public String getCommonElement1() { 
     return commonElement1; 
    } 
    public void setCommonElement1(String commonElement1) { 
     this.commonElement1 = commonElement1; 
    } 
    public String getCommonElement2() { 
     return commonElement2; 
    } 
    public void setCommonElement2(String commonElement2) { 
     this.commonElement2 = commonElement2; 
    } 

} 

Основной метод, чтобы использовать его

public static void main(String[] args) throws JAXBException { 
     final JAXBContext context = JAXBContext.newInstance(ObjectFromSchema1.class); 
     final Marshaller m = context.createMarshaller(); 
     m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); 

     final ObjectFromSchema1 objectFromSchema1 = new ObjectFromSchema1(); 

     objectFromSchema1.setCommonElement1("commonElement1"); 
     objectFromSchema1.setCommonElement2("commonElement2"); 
     objectFromSchema1.setElement1("element1"); 
     objectFromSchema1.setElement2("element2"); 

     m.marshal(objectFromSchema1, System.out); 
    } 

выход

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<objectFromSchema1> 
    <element1>element1</element1> 
    <element2>element2</element2> 
    <commonElement1>commonElement1</commonElement1> 
    <commonElement2>commonElement2</commonElement2> 
</objectFromSchema1> 
Смежные вопросы