我们有一个大型项目,由JEE模块,JAVA客户端应用程序,Android应用程序和其他自制的Java项目组成。
由于项目的多样性,我们决定制作JEE,Java客户端应用程序和Android应用程序通用的Java库项目和Java实体项目,以限制项目之间的代码冗余。
开始时,我们在JEE服务器端只有Java客户端和Restfull Web服务,它们使用JAXB XML Binding API交换数据。因此,很容易在实体项目中的类上使用JAXB批注(该批注设置为对Java Client项目和JEE项目的依赖)。双方都可以使用相同的注释轻松地对XML数据进行编码和解码。
现在我们有了一个Android应用程序,我想使用相同的方式来交换数据。事实是,JAXB在Android上已“贬值”。因此,我在Jackson图书馆中发现,有一个JaxbAnnotation
参数用于获取与JAXB绑定的数据,但是我对解决方案的完全兼容性不满意。
我也尝试过使用JSON绑定,因为我看到JSON-B将成为JavaEE 8中的标准,但是似乎它需要JavaEE API类,并且我认为将其添加到Android项目中并不是一件好事。
所以我的问题是:使用相同的实体依赖关系(和相同的解析API)并限制实体对象的XML或JSON绑定注释,在JEE Restfull Web服务和Android应用程序之间交换数据的最佳实践是什么?
我希望您能很好地理解问题。
谢谢。
答案 0 :(得分:0)
将您的实体项目命名为entities-module
。该项目包含POJO
个类,这些类带有JAXB
注释,例如:@XmlElement
,@XmlType
等。由于就像您所写的那样,“ JAXB在' Android ”,您需要选择以下选项:通过其他工具阅读JAXB
批注或创建新的自定义POJO
结构。
JAXB
批注 Jackson
库对JAXB
注释具有良好的支持。您需要做的就是使用jackson-module-jaxb-annotations
模块。这很容易注册,如果您已经使用Jackson
进行JSON
的序列化/反序列化,这是显而易见的选择。该怎么做,您可以在Using JAXB with Google Android上找到有关此问题的阅读答案。
优点:
POJO
架构。Restful API
中有更改,请使用entities-module
项目的下一个版本。缺点:
JAXB
上启用 Android
的问题。JAXB
和Jackson
模块层有关的性能问题。第二种选择是使用POJO
创建新模块,并使用更快更小的库,例如SimpleXML
。
优点:
JAXB
类构建应用程序没有问题。缺点:
API
中有更改,则需要在几个模块中重复更改。您需要查看pros and cons
列表上方的内容,然后确定最适合您的内容。
我还要添加两个选项:
JAXB
注释替换为Jackson
注释。 Jackson
确实具有很好的XML
支持,同时也为JSON
提供了出色的支持。它将为您轻松支持JSON
中的XML
和API
格式。另外,您可以在Jackson
上使用Android
库。Android
应用创建新的JSON
API
。通常,UI
应用上的Android
流与Web App
上的流不同,并且您可能最终还是会想到这个想法。