2012-01-15 26 views
0

我正在使用RESTful WebService(NetBeans + Jersey)并试图为移动应用程序实现UI-Description(标签,按钮......) (安卓)。JAX-B/JSON:继承,复合模式,解组异常

我使用的复合设计模式创建UIContainer,UIBasicElements,UIComplexElements,等等...

我的问题是: 的UIContainer包含 private List<UIComponent> uiComponents;

如果我添加

@XmlSeeAlso({ 
    UIBasicLabel.class, 
    UIBasicIcon.class, 
    UIBasicButton.class, 
    ... 
}) 

到类public abstract class UIComponent我得到的JSON格式的,我想,也就是像

{ ..., uiComponents : [ {Label} , {Icon} , ... ] , ... } 

,我可以在我的Android客户端处理。 我也注意到,@type : ClassName属性被添加到JSON输出。 这是不是给unmarshaller一个提示,什么类使用?

使用Jersey客户端,我得到的解组异常:

Exception in thread "main" javax.ws.rs.WebApplicationException: javax.xml.bind.UnmarshalException 
- with linked exception: 
[com.sun.istack.internal.SAXParseException2; lineNumber: 0; columnNumber: 0; Unable to create an instance of de.materna.mobile.management.entities.uidescription.UIComponent] 

据我了解,我需要修改UIContainer.class到

​​

所以解组知道什么在这里反序列化。

不过,我的问题是,与@XmlElementRef的JSON变成这样的:

{ ..., Label : [ ... ] , Icon : [ ... ], ... } 

代替

{ ..., uiComponents : [ {Label} , {Icon} , ... ] , ... } 

有没有办法做到两者兼而有之?

非常感谢!

PS:我的英语不好对不起 - 我希望这不是太难读/理解

回答

0

开始与介绍对象模型的XML模式,然后(从JDK工具)运行XJC或wsimport的这会为你生成你的Java类。

+0

谢谢你的回答。但是,经过一些研究,我决定去Jackson JSON库。它似乎更适合我的需求,并且很容易融入我的项目。 – MightyFirebird 2012-01-19 13:35:11