gpt4 book ai didi

java - 将 JAXB 与 JgraphX 一起使用?

转载 作者:行者123 更新时间:2023-12-04 04:43:26 24 4
gpt4 key购买 nike

我有一些用 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;
}
}

它给了我以下异常(exception):
 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

当接口(interface)的实现未正确映射到 Jaxb 时会发生该异常,但我不想进入 jgraphx 库并对其进行修改

最佳答案

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

选项 #1 - 使用 @XmlElement 指定 Impl 类

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

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

更多信息
  • http://blog.bdoughan.com/2011/05/jaxb-and-interface-fronted-models.html


  • 选项 #2 - 使用 XmlAdapter
    一个 XmlAdapter允许您在编码/解码过程中将不可映射的对象转换为可映射的对象。您可以使用它来转换 JgraphX到您自己的域对象中。

    更多信息
  • http://blog.bdoughan.com/2010/07/xmladapter-jaxbs-secret-weapon.html
  • 关于java - 将 JAXB 与 JgraphX 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18562716/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com