Usando @XmlPath con jaxb / MOXy para mapear tipos complejos

Tengo una estructura XML profunda con muchos envoltorios sin sentido que estoy asignando a una única clase de Java. Mapear los tipos de datos simples con @XmlPath es un paseo por el parque, pero cuando se trata de tipos que realmente requieren su propia clase, no estoy muy seguro de cómo hacerlo, especialmente cuando esos tipos deberían incluirse en una lista también.

Estoy teniendo problemas para mapear todos loselement escribe en el siguiente ejemplo a miElement clase. Desde elelements la envoltura reside en el recurso que se asigna usando@XmlPath No puedo usar el@XmlElementWrapper, que de lo contrario sería la forma en que normalmente haría esto.

Ejemplo de estructura XML

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<s:root xsi:schemaLocation="http://www.example.eu/test ResourceSchema.xsd" xmlns:s="http://www.example.eu/test" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <s:resource>
        <s:information>
            <s:date>2013-07-04</s:date>
            <s:name>This example does not work</s:name>
        </s:information>
        <s:elements>
            <s:refobj>
                <s:id>1</s:id>
                <s:source>First Source</s:source>
            </s:refobj>
            <s:refobj>
                <s:id>2</s:id>
                <s:source>Second Source</s:source>
            </s:refobj>
            <s:refobj>
                <s:id>5</s:id>
                <s:source>Fifth Source</s:source>
            </s:refobj>
        </s:elements>
    </s:resource>
</s:root>

Raíz.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<RefObj> 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;
    }

}

Marshaller / 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;

Puedo ejecutar la aplicación, pero no se asigna ningún elemento cuando descomprimo / marco el contenido XML, en su lugar, obtengo una representación XML que contiene solo la información.

Actualizar

Después de publicar el ejemplo anterior, me di cuenta de que realmente funcionaba como estaba previsto, lo que me hizo aún más confundido. Aunque he intentado replicar el ejemplo de trabajo (anteriormente) en mi código de producción sin ningún éxito, aunque he logrado introducir los problemas que tengo en el código de ejemplo. Dado que necesitaba agregar un espacio de nombres para que aparecieran los problemas, asumo que tiene algo que ver con las convenciones de nombres y la ruta X (ml).

También he añadidopackage-info.java y el marshaller / unmarshaller que estoy usando cuando trabajo con esos objetos. Dado que jaxb.properties no contiene nada emocionante, lo he dejado fuera.

Respuestas a la pregunta(2)

Su respuesta a la pregunta