Используете 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 и изменять ее
2 ответа
Я не мог преобразовать объекты программы, у которых внутри был mxCell, используя JAXB, поэтому для меня решение было использовать JgraphX "getXml" для преобразования элементов графа и значений каждой ячейки. После этого я получаю значение ячеек и использую его в своем коде.
Код для передачи графика в xml:
mxCodec codec = new mxCodec();
String xml = mxXmlUtils.getXml(codec.encode(graph.getModel()));
Есть несколько способов справиться с этим вариантом использования:
Вариант № 1 - Укажите класс Impl с помощью @XmlElement
Для полей / свойств, которые имеют тип интерфейса, можно использовать @XmlElement
аннотация для указания конкретной реализации.
@XmlElemen(type=mxCellImpl.class)
protected mxCell cell;
Для дополнительной информации
Вариант № 2 - использовать XmlAdapter
XmlAdapter
позволяет вам преобразовать не отображаемый объект в сопоставляемый во время процесса маршалинга / демаршаллинга. Вы можете использовать это для конвертации JgraphX
в свой собственный объект домена.
Для дополнительной информации