2012-09-06 9 views
8

Używam Rest-Webservice w Android. Web Service może obsługiwać JSON i XML, API jest opisane jako XSD. Użyłem więc JAXB do generowania klas z XSD, a następnie użyłem procesora jacksona JSON do wygenerowania JSON z moich instancji.Użyj klas wygenerowanych przez JAXB (xjc) w Androidzie

Problem polega na tym, że JAXB (xjc) generuje klasy z adnotacjami JAXB, a Android nie może ich obsłużyć. Próbowałem dodać do mojego androida projekt jaxb-api.jar, ale Dalvik nie użyje klas podstawowych.

Do mojej pierwszej realizacji ręcznie usunąłem adnotacje. Ale teraz XSD został zaktualizowany i nie chcę tego robić za każdym razem, gdy to się stanie.

Czy masz pojęcie, jak sobie z tym problemem poradzić w lepszy sposób? Czy istnieje możliwość użycia jaxb/xjc bez adnotacji lub czy istnieje inny generator kodu, który mógłby to zrobić? Czy znasz prosty sposób na usunięcie adnotacji z klas java (nawet jeśli są drukowane w wielu wierszach)? Czy istnieje ustawienie projektu dla projektów AndroidEclipse, które sprawia, że ​​dalvik pozwala na podstawowe biblioteki?

thx, cathixx

Odpowiedz

2

teraz, rozwiązać go przez siebie, komentując wszystkie adnotacje o następującej ant skryptu:

<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

Byłoby to ogromna pomoc dla mnie, czy to działa. Jednak jestem nowy dla mrówki. Czy mógłbyś podać nieco więcej kontekstu, jak używać tego skryptu dla kogoś, kto jest nowy w mrówce? Na przykład mam zestaw plików .java w katalogu, który należy przekonwertować, i mam zainstalowaną mrówkę. Co następne? –

5

musiałem zrobić kilka dodatkowych badaniach, aby prace odpowiedź cathixx od czasu I Jestem nowy w Ant, więc podzielę się tym, aby pomóc innym.

Te instrukcje odbędzie plików Java z kodem jak:

import javax.xml.bind.annotation.XmlElement; 

@XmlRootElement 
public class Response {... 

... i komentować tych wystąpień na zewnątrz, tak to wygląda:

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

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

Najpierw utwórz plik build.xml (lub cokolwiek chcesz nazwać - musi to być .xml) w nowym projekcie Eclipse (projekt "General" jest w porządku).

Następnie należy dodać następujący tekst do pliku 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> 

Umieścić *.java pliki, które chcesz skomentować z importu XML i adnotacje w tym samym katalogu co plik build.xml.

Kliknij prawym przyciskiem myszy plik build.xml w Eclipse i kliknij "Uruchom jako-> Kompilacja mrówek".

Powinieneś zobaczyć wyjście jak:

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

... i import XML i adnotacje powinny być komentowane z plikami.

Gotowe!

Uwaga: jeśli chcesz uwzględnić wszystkie pliki *.java we wszystkich podkatalogach kompilacji.plik XML (na przykład, aby skomentować wszystkie adnotacje XML/import generowane przez pęczek klas JAXB w wielu pakietach), zmień tag fileset do:

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

Przede wszystkim niesamowita robota! Ale mam kilka problemów. Nie odfiltrowuje javax.xml.bind.JAXBElement. Niektóre wzorce XmlElementRefs są komentowane, a mianowicie, gdy z jakiegoś powodu istnieją obiekty potomne. Niektóre wartości XmlEnumValues ​​nie są komentowane, ale inne są. @XmlElements też nie jest. – spy

+0

Dzięki! W przypadku pliku javax.xml.bind.JAXBElement spróbuj usunąć część ".annotation \" z wyrażenia regularnego - Nie sądzę, aby wyszukiwanie było tak niskie (javax.xml.bind. *) W strukturze pakietu. Dla innych nie wiem, dlaczego czasami zadziała w przypadku pewnych zdarzeń, a czasami nie. –

+0

@XmlRootElement nie wydaje się być pobrane – spy

Powiązane problemy