Использование @XmlPath с jaxb / MOXy для сопоставления сложного типа

У меня есть глубокая структура XML с множеством бессмысленных обертокм отображение на один класс Java. Отображение простых типов данных с помощью @XmlPath - это прогулка по парку, но когда дело доходит до типов, которые действительно требуют своего собственного класса I 'Я не совсем уверен, как это сделать, особенно когда эти типы должны быть помещены в список.

у меня возникли проблемы, чтобы отобразить всеelement Типы в приведенном ниже примере к моемуElement учебный класс. Посколькуelements Оболочка находится в ресурсе, который отображается с помощью@XmlPath Я не могу использовать@XmlElementWrapper, который иначе был бы способом, которым я обычно делал бы это.

Пример структуры XML



    
        
            2013-07-04
            This example does not work
        
        
            
                1
                First Source
            
            
                2
                Second Source
            
            
                5
                Fifth Source
            
        
    

Root.java

@XmlRootElement(name = "root")
@XmlAccessorType(XmlAccessType.FIELD)
public class Root {

    @XmlPath("resource/information/date/text()")
    private String date;

    @XmlPath("s:resource/s:information/s:name/text()")
    private String name;

    @XmlPath("resource/elements/refobj")
    private List refObjs;

    public String getDate() {
        return date;
    }

    public void setDate(String date) {
        this.date = date;
    }

    public String getName() {
        return name;
    }

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

}

RefObj.java

@XmlRootElement(name = "refobj")
@XmlAccessorType(XmlAccessType.FIELD)
public class RefObj {

    @XmlElement(name = "id")
    private int id;

    @XmlElement(name = "source")
    private String source;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getSource() {
        return source;
    }

    public void setSource(String source) {
        this.source = source;
    }

}

ИАС / Unmarshaller

public static void main(String[] args) {
    String xml = getXML();

    Root root = null;
    try {
        JAXBContext context = JAXBContext.newInstance(Root.class);

        Unmarshaller unmarshaller = context.createUnmarshaller();

        StringReader stringReader = new StringReader(xml);

        root = (Root) unmarshaller.unmarshal(stringReader);
    } catch (Exception ex) {
        System.err.println("Failed to unmarshal XML!");
    }

    try {
        JAXBContext context = JAXBContext.newInstance(Root.class);
        Marshaller marshaller = context.createMarshaller();

        marshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8");
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
        marshaller.setProperty(Marshaller.JAXB_SCHEMA_LOCATION, "http://www.example.eu/test ResourceSchema.xsd");

        StringWriter stringWriter = new StringWriter();
        marshaller.marshal(root, stringWriter);

        System.out.println(new String(stringWriter.toString().getBytes(Charset.forName("UTF-8"))));
    } catch (Exception ex) {
        System.err.println("Failed to marshal object!");
    }

}

package-info.java

@XmlSchema(
        namespace = "http://www.example.eu/test",
        attributeFormDefault = XmlNsForm.QUALIFIED,
        elementFormDefault = XmlNsForm.QUALIFIED,
        xmlns = {
    @XmlNs(
            prefix = "s",
            namespaceURI = "http://www.example.eu/test")
},
        location = "http://www.example.eu/test ResourceSchema.xsd")
package se.example.mavenproject1;

import javax.xml.bind.annotation.XmlNs;
import javax.xml.bind.annotation.XmlNsForm;
import javax.xml.bind.annotation.XmlSchema;

Я могу выполнить приложение, но ни один элемент не отображается, когда я демаршалю / маршалирую содержимое XML, вместо этого я получаю представление XML, содержащее только информацию.

Обновить

После публикации предыдущего примера я понял, что на самом деле он работает как задумано, что еще больше запутало меня. Хотя я'я пытался повторить (ранее) рабочий пример в моем рабочем коде, но безуспешнонам удалось на самом деле представить проблемы, которые ям в пример кода. Так как мне нужно было добавить пространство имен для появления проблем, ям, если предположить, что это как-то связано с соглашениями об именах и X (ml) Path.I '

мы также добавилиpackage-info.java и маршаллер / демаршаллер I 'м при работе с этими объектами. Поскольку jaxb.properties нене содержит ничего захватывающегомы оставили это.

Ответы на вопрос(2)

Ваш ответ на вопрос