Маршал и демаршал разных классов с одинаковыми именами (в xml) - PullRequest
0 голосов
/ 21 мая 2019

Что является лучшим решением для маршалирования и демаршализации двух разных объектов с одинаковыми именами с использованием JAXB или другого решения. Я получаю часть этого класса из схемы. Мне нужно обработать обе версии "ext".

// JAXB Classes

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "ContentType", propOrder = {
        "ext",
        "ext2"
})

public class ContentType {

    @XmlElement(name = "Extensions", namespace = "urn_1")
    protected urn_1.ExtensionsType ext;

    @XmlElement(name = "Extensions", namespace = "urn_2")
    protected urn_2.DianExtensionsType ext2;

    @XmlAnyElement
    protected Element any;

    public Element getAny() {
        return any;
    }

    /**
     * Sets the value of the any property.
     * 
     * @param value
     *     allowed object is
     *     {@link Element }
     *     
     */
    public void setAny(Element value) {
        this.any = value;
    }

    public ExtensionsType getExt() {
    return ext;
    }

    public void setExt(ExtensionsType ext) {
    this.ext = ext;
    }
    public ExtensionsType getExt2() {
    return ext2;
    }

    public void setExt2(ExtensionsType ext2) {
    this.ext2 = ext2;
    }
}
package urn_1;

@XmlRegistry
public class ObjectFactory {

    private final static QName _Extensions_QNAME = new QName("urn_1", "Extensions");

@XmlElementDecl(namespace = "urn_1", name = "Extensions")
    public JAXBElement<ExtensionsType> createExtensions(ExtensionsType value) {
        return new JAXBElement<ExtensionsType>(_Extensions_QNAME, ExtensionsType.class, null, value);
    }

}
package urn_2;

@XmlRegistry
public class ObjectFactory {

    private final static QName _Extensions_QNAME = new QName("urn_2", "Extensions");

@XmlElementDecl(namespace = "urn_2", name = "Extensions")
    public JAXBElement<ExtensionsType> createExtensions(ExtensionsType value) {
        return new JAXBElement<ExtensionsType>(_Extensions_QNAME, ExtensionsType.class, null, value);
    }

}

То, что я хочу, выглядит так: JAXB @XmlElements, разные типы, но с одинаковым именем? но в моем случае мои классы Extension - это две разные версии, и они не являются расширением другой.

Я пытаюсь изменить имена, чтобы установить различия между версиями "ext" и "ext2", но я не могу правильно маршалировать или деархивировать XML-файл, я прекращаю пропускать элементы, если я изменяю имя с '@XmlElement (name = "Extensions")'. Также я пытался использовать элемент «any», но я не знаю, как создать такой объект.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...