2012-09-06 56 views
8

我在Android中使用了Rest-WebserviceWeb Service可以處理JSONXML,該API被描述爲XSD。所以我用JAXBXSD生成類,然後我使用jackson JSON處理器從我的實例生成JSON在android中使用JAXB(xjc)生成的類

問題是,JAXBxjc)生成了帶有JAXB註釋的類,而Android無法處理這些類。我試圖將jaxb-api.jar添加到我的android項目中,但Dalvik不會使用核心類。

對於我的第一個實現,我手動刪除了註釋。但現在XSD已更新,我不想在每次發生這種情況時都這樣做。

你有什麼想法如何更好地處理這個問題?有沒有可能使用jaxb/xjc沒有註釋或是否有另一個代碼生成器可以做到這一點?你知道從java類中移除註釋的簡單方法嗎(即使它們是用多行打印的)?是否有項目設置AndroidEclipse項目,這使得達爾維克允許核心庫?

THX,cathixx

回答

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> 
+0

這將是一個巨大的幫助我,如果它的工作原理。不過,我對螞蟻​​很陌生。你能否提供一些關於如何將這個腳本用於新手螞蟻的內容?例如,我在需要轉換的目錄中有一組.java文件,並且我安裝了ant。接下來是什麼? –

5

我不得不做一些額外的研究,使cathixx的答覆工作,因爲我」新的螞蟻,所以我會分享這個幫助別人。

這些指令將Java文件中包含的代碼:

import javax.xml.bind.annotation.XmlElement; 

@XmlRootElement 
public class Response {... 

...和評論這些事件的,所以它看起來像:

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

/*@XmlRootElement*/ 
public class Response {... 

首先,創建一個文件build.xml(或無論你想調用它 - 必須是.xml)在一個新的Eclipse項目(一個「常規」項目是好的)。

接着,下面的文本添加到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> 

將要註釋掉XML進口和註釋在同一目錄中build.xml文件*.java文件。

右鍵單擊Eclipse中的build.xml文件,然後單擊「Run As-> Ant Build」。

應該能看到輸出,如:

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

...和XML進口和註釋要註釋您的文件。

完成!

注意:如果您想要將所有*.java文件包含在構建的所有子目錄中。XML文件(例如,註釋掉所有的XML註釋/爲一堆多個軟件包JAXB類生成的進口),該fileset標籤更改爲:

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

首先,真棒!儘管我遇到了一些問題。它不會過濾掉javax.xml.bind.JAXBElement。某些XmlElementRefs模式會被註釋掉,即當出於某種原因存在子對象時。一些XmlEnumValues沒有被註釋掉,但是其他的是。 @XmlElements不是。 – spy

+0

謝謝!對於javax.xml.bind.JAXBElement,嘗試從正則表達式中刪除「.annotation \」部分 - 我不相信它在包結構中搜索那麼低(javax.xml.bind。*)。對於其他人,不知道爲什麼有時它會適用於某些發生和其他時間不會。 –

+0

@XmlRootElement似乎沒有被拾取 – spy

相關問題