【问题标题】:How to unmarshall a file using JAXB having shared references in multiple file (.xml)如何使用在多个文件 (.xml) 中具有共享引用的 JAXB 解组文件
【发布时间】:2013-12-30 10:52:42
【问题描述】:

JAXB 用于将 java 对象编组到文件中。

@XmlRootElement
public class CompleteCollectionInfo {

    @XmlElement(required = true)
    @XmlID
    @XmlSchemaType(name = "ID")
    protected String uid;
}

@XmlRootElement
public class AssociationInfo {

    @XmlElement(required = true)
    @XmlIDREF
    @XmlSchemaType(name = "IDREF")
    @XmlJavaTypeAdapter(type= CompleteCollectionInfo.class , value =AssociationCompleteCollectionInfoAdapter.class)
    protected CompleteCollectionInfo associatedcollection;
}

适配器将确保所有 CompleteCollectionInfo 引用(如果之前未编组)在关联信息中正确设置

public class AssociationCompleteCollectionInfoAdapter extends XmlAdapter<String, CompleteCollectionInfo>{

    @Override
    public CompleteCollectionInfo unmarshal(String v) throws Exception {

        CompleteCollectionInfo completeCollectionInfo = UnBlobUtil.completeCollectionCache.get(v);

        if (completeCollectionInfo == null )
            completeCollectionInfo = new CompleteCollectionInfo();

        completeCollectionInfo.setUid(v);

        return completeCollectionInfo;
    }

    @Override
    public String marshal(CompleteCollectionInfo v) throws Exception {

        return v.getUid();
    }

}

编组时遇到的异常: com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException:1 个 IllegalAnnotationExceptions 计数 XmlIDREF 属性引用了没有 XmlID 属性的类型“java.lang.String”。

【问题讨论】:

  • 你能发布 Group.xml 吗?

标签: java xml jaxb


【解决方案1】:

您的XmlAdapter 告诉JAXBCompleteCollectionInfo 视为String。所以String 确实没有用@XmlID 注释的属性。 @XmlID/@XmlIDREF 用于文档中的引用,因此无论如何它都不适用于您的用例。

您已经在使用XmlAdapter 为您的用例做正确的事情。要使事情正常工作,您只需要删除@XmlID/@XmlIDREF

【讨论】:

  • 谢谢@blaise,我明白你想说的是,我会在实施后回复你
【解决方案2】:

为了让JAXBContext 知道如何解组Student,您必须执行以下操作:

JAXBContext theContext = JAXBContext.newInstance (Group.class, Student.class);

【讨论】:

  • 但是学生的详细信息存储在一个单独的文件中,交叉引用,即使我做了你提到的更改也不起作用
  • 你能同时发布两个xml文件吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-23
  • 2015-08-20
  • 2012-10-12
  • 2021-05-12
相关资源
最近更新 更多