8

我正在使用Rest-Webservicein AndroidWeb Service可以处理JSON和,XMLAPI 被描述为XSD. 所以我曾经JAXB从 生成类XSD,然后我使用杰克逊JSON处理器JSON从我的实例中生成。

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

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

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

谢谢,cathixx

4

2 回答 2

5

因为我是 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.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要注释掉 XML 导入和注释的文件放在与 build.xml 文件相同的目录中。

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

您应该看到如下输出:

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

...并且 XML 导入和注释应该从您的文件中注释掉。

完毕!

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

<fileset dir="." >
    <include name="**/*.java" />
</fileset>
于 2012-11-14T17:29:47.540 回答
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>
于 2012-09-10T14:42:28.687 回答