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

cat*_*ixx 8 xml android json xsd xjc

我使用的是Rest-WebserviceAndroid.在Web Service可以处理JSONXML,API被描述为XSD.所以我曾经JAXB从中生成类XSD,然后我使用jackson JSON处理器JSON从我的实例生成.

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

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

你知道如何以更好的方式处理这个问题吗?是否有可能在jaxb/xjc没有注释的情况下使用,或者是否有其他代码生成器可以执行此操作?您是否知道从java类中删除注释的简单方法(即使它们以多行打印)?是否有项目的项目设置Android Eclipse,使得dalvik允许核心库?

thx,cathixx

Sea*_*eau 5

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

这些指令将使用以下代码获取Java文件:

import javax.xml.bind.annotation.XmlElement;

@XmlRootElement
public class Response {...
Run Code Online (Sandbox Code Playgroud)

...并对这些事件进行评论,因此它看起来像:

/*import javax.xml.bind.annotation.XmlElement;*/

/*@XmlRootElement*/
public class Response {...
Run Code Online (Sandbox Code Playgroud)

首先,build.xml在新的Eclipse项目中创建一个文件(或任何你想要的文件- 必须是.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>
Run Code Online (Sandbox Code Playgroud)

*.java要注释的文件放在XML导入和注释中,与build.xml文件放在同一目录中.

右键单击Eclipse中的build.xml文件,然后单击"Run As-> Ant Build".

您应该看到如下输出:

Buildfile: D:\Eclipse_Projects\StripAnnotations\build.xml
commentOutXmlAnnotations:
BUILD SUCCESSFUL
Total time: 403 milliseconds
Run Code Online (Sandbox Code Playgroud)

...并且应该从文件中注释XML导入和注释.

完成!

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

<fileset dir="." >
    <include name="**/*.java" />
</fileset>
Run Code Online (Sandbox Code Playgroud)


cat*_*ixx 2

现在,我自己解决了这个问题,用以下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>
Run Code Online (Sandbox Code Playgroud)