Используете JAXB с JgraphX?

У меня есть некоторые объекты, сопоставленные с аннотациями JAXB, чтобы преобразовать их в xml, но внутри этих объектов mxCell есть объект, как я могу сопоставить этот объект без добавления аннотаций в библиотеку кода JgraphX?

Есть мой класс Objeto:

@XmlRootElement
@XmlAccessorType(XmlAccessType.NONE)
@XmlSeeAlso({mxCell.class})
public abstract class ObjetoImpl implements Serializable, Objeto {

    @XmlAttribute
    protected String nome;

    @XmlAnyElement    
    protected mxCell cell;


    @Override
    public String toString() {
        return this.nome;
    }
}

Это дает мне следующее исключение:

 com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException: 1 counts of IllegalAnnotationExceptions
com.mxgraph.model.mxICell is an interface, and JAXB can't handle interfaces.
    this problem is related to the following location:
        at com.mxgraph.model.mxICell
        at public com.mxgraph.model.mxICell com.mxgraph.model.mxCell.getParent()
        at com.mxgraph.model.mxCell
        at @javax.xml.bind.annotation.XmlSeeAlso(value=[class com.mxgraph.model.mxCell])
        at ardis.model.conceitual.atributo.Atributo
        at protected java.util.List ardis.model.conceitual.ObjetoWithAttributeImpl.attributes
        at ardis.model.conceitual.ObjetoWithAttributeImpl
        at ardis.model.conceitual.entidade.Entidade
        at @javax.xml.bind.annotation.XmlSeeAlso(value=[class ardis.model.conceitual.entidade.Entidade])
        at ardis.model.conceitual.ModeloConceitual

Это исключение возникает, когда реализация интерфейса неправильно сопоставлена ​​​​с Jaxb, но я не хочу входить в библиотеку jgraphx и изменять ее.


person Davisson Paulino    schedule 01.09.2013    source источник
comment
Трудно понять вас без фрагмента кода   -  person AlexR    schedule 02.09.2013
comment
Извините, сейчас я вставил фрагмент кода, вы поняли?   -  person Davisson Paulino    schedule 02.09.2013
comment
com.mxgraph.model.mxICell — это интерфейс, а JAXB не может обрабатывать интерфейсы.   -  person Thomas the Tank Engine    schedule 02.09.2013


Ответы (2)


Есть несколько способов, которыми вы можете справиться с этим вариантом использования:


Вариант № 1. Укажите класс внедрения с помощью @XmlElement

Для полей/свойств типа интерфейса можно использовать аннотацию @XmlElement для указания конкретной реализации.

@XmlElemen(type=mxCellImpl.class)    
protected mxCell cell;

Для получения дополнительной информации


Вариант № 2. Используйте XmlAdapter

XmlAdapter позволяет преобразовать несопоставляемый объект в сопоставляемый во время процесса маршалинга/демаршаллинга. Вы можете использовать это, чтобы преобразовать JgraphX в свой собственный объект домена.

Для получения дополнительной информации

person bdoughan    schedule 05.09.2013

Я не мог преобразовать объекты программы, внутри которой был mxCell, с помощью JAXB, поэтому решением для меня было использовать JgraphX ​​«getXml» для преобразования элементов графика и значений каждой ячейки. После этого я получаю значение ячеек и использую их в своем коде.

Код для передачи графика в xml:

        mxCodec codec = new mxCodec();


    String xml = mxXmlUtils.getXml(codec.encode(graph.getModel()));
person Davisson Paulino    schedule 10.10.2013