2

我有一些用 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 库并对其进行修改

4

2 回答 2

2

有几种方法可以处理这个用例:


选项 #1 - 指定 Impl 类@XmlElement

对于接口类型的字段/属性,可以使用@XmlElement注解来指定具体实现。

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

了解更多信息


选项 #2 - 使用XmlAdapter

AnXmlAdapter允许您在编组/解组过程中将不可映射的对象转换为可映射的对象。您可以使用它来转换JgraphX为您自己的域对象。

了解更多信息

于 2013-09-05T16:29:04.683 回答
1

我无法使用 JAXB 转换内部有 mxCell 的程序的对象,所以我的解决方案是使用 JgraphX“getXml”来转换图形元素和每个单元格的值。之后,我得到了单元格的值并在我的代码中使用。

将图形传递给 xml 的代码:

        mxCodec codec = new mxCodec();


    String xml = mxXmlUtils.getXml(codec.encode(graph.getModel()));
于 2013-10-10T02:12:20.380 回答