2016-01-21 54 views
0

我正在尝试使用DynamicEntity解组一些简单的JSON,并且它完全在我身上轰炸。文档相当稀少,甚至可以做到这一点?我基本上是这样做的;带JSON的MOXy DynamicEntity?

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

为了得到DynamicEntity,需要使用DynamicJAXBContext。它可以通过下面的jaxb.properties文件中进行配置:

javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.dynamic.DynamicJAXBContextFactory 

,或者你可以直接使用DynamicJAXBContextFactory

虽然动态MOXY不需要绑定(POJO)的任何Java类,但您需要在创建上下文时提供绑定元数据。它可以是描述映射的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