在android中使用JAXB(xjc)生成的类

我在Android使用Rest-WebserviceWeb Service可以处理JSONXML ,API被描述为一个XSD 。 所以我使用JAXBXSD生成类,然后使用jackson JSON处理器从我的实例生成JSON

问题是, JAXBxjc )生成带有JAXB注释的类, Android无法处理这些类。 我试图添加jaxb-api.jar到我的android项目,但Dalvik不会使用核心类。

对于我的第一个实现,我手动删除了注释。 但现在XSD已经更新了,我不想每次都这样做。

你有什么想法如何更好地处理这个问题? 有没有可能使用jaxb/xjc没有注释或有另一个代码生成器可以做到这一点? 你知道一个简单的方法来从Java类中删除注释(即使它们被打印成多行)吗? 有没有Android Eclipse项目的项目设置,这使得达尔维克允许核心库?

thx,cathixx

因为我是Ant新手,所以我不得不做一些额外的研究来使cathixx的答案有用,所以我会分享这个来帮助别人。

这些说明将带有类似于以下代码的Java文件:

 import javax.xml.bind.annotation.XmlElement; @XmlRootElement public class Response {... 

…并注释这些事件,所以它看起来像:

 /*import javax.xml.bind.annotation.XmlElement;*/ /*@XmlRootElement*/ public class Response {... 

首先,在一个新的Eclipse项目(一个“常规”项目是好的)中创build一个文件build.xml (或任何你想要调用它 – 必须是.xml)。

然后,将以下文本添加到build.xml文件中:

 <?xml version="1.0"?> <project name="CommentOutXmlAnnotations" basedir="." default="commentOutXmlAnnotations" > <!-- This Ant script comments out the following lines from the Java files in this directory: import javax.xml.bind.annotation.*; @Xml* --> <target name="commentOutXmlAnnotations" description="Run" > <replaceregexp byline="false" flags="g" > <regexp pattern="(@Xml[A-Za-z0-9]+(\([^)]+\))?|import javax\.xml\.bind\.annotation\.[A-Za-z0-9.]+;)[ \t]*(\r?\n)" /> <substitution expression="/*\1*/\3" /> <fileset dir="." > <include name="*.java" /> </fileset> </replaceregexp> </target> </project> 

*.java文件放入与build.xml文件相同的目录中,以便注释掉XML导入和注释。

在Eclipse中右键单击build.xml文件,然后单击“Run As-> Ant Build”。

你应该看到如下输出:

 Buildfile: D:\Eclipse_Projects\StripAnnotations\build.xml commentOutXmlAnnotations: BUILD SUCCESSFUL Total time: 403 milliseconds 

…和XML的导入和注释应该从你的文件中注释掉。

完成!

注意:如果要将所有*.java文件包含在build.xml文件的所有子目录中(例如,注释为多个包中的一堆JAXB类生成的所有XML注释/导入),请将fileset标记更改为:

 <fileset dir="." > <include name="**/*.java" /> </fileset> 

现在,我用下面的ant脚本评论所有注释,我自己解决了这个问题:

 <replaceregexp flags="g" byline="false"> <regexp pattern="(@Xml[A-Za-z0-9]+(\([^)]+\))?|import javax\.xml\.bind\.annotation\.[A-Za-z0-9.]+;)[ \t]*(\r?\n)"/> <substitution expression="/*\1*/\3"/> <fileset dir="path/to/files"> <include name="*.java"/> </fileset> </replaceregexp>