我正在尝试使用DynamicEntity来解组一些简单的JSON,而且它完全是对我的轰炸。文档相当稀疏,甚至可以这样做吗?我基本上是这样做的;
JAXBContext jaxbContext = JAXBContext.newInstance(DynamicEntity.class);
DynamicEntity entity = (DynamicEntity) jaxbContext.createUnmarshaller().unmarshal(entityStream);
这可以直接来自此处的XML文档:https://wiki.eclipse.org/EclipseLink/Examples/MOXy/Dynamic/XmlToDynamicEntity
我得到了; 引起:
com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException: 1 counts of IllegalAnnotationExceptions
org.eclipse.persistence.dynamic.DynamicEntity is an interface, and JAXB can't handle interfaces.
this problem is related to the following location:
at org.eclipse.persistence.dynamic.DynamicEntity
有没有人设法让这个工作?我基本上试图避免构建POJO,因为我的后端存储无论如何都不关心它们,我只是想反序列化为通用对象并传递它。在.NET中,我只使用dynamic
,但我对如何使用Moxy做这件事感到非常难过。
答案 0 :(得分:0)
要获得DynamicEntity
,必须使用DynamicJAXBContext
。可以使用 jaxb.properties 文件中的以下内容进行配置:
javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.dynamic.DynamicJAXBContextFactory
或者您可以直接使用DynamicJAXBContextFactory
。
虽然Dynamic MOXY不需要任何Java类用于绑定(POJO),但您需要在创建上下文时提供绑定元数据。它可以是描述映射的XSD或binding.xml。因此,不需要使用JAXBContext.newInstance(DynamicEntity.class)
创建上下文,而是需要使用其他方法 - 请参阅下面的链接。
请参阅此处的示例(使用XSD): https://wiki.eclipse.org/EclipseLink/Examples/MOXy/Dynamic/JAXBContextFromXMLSchema
使用binding.xml和JSON的或更复杂的示例: https://wiki.eclipse.org/EclipseLink/Examples/MOXy/Dynamic/Flickr