2010-02-14 9 views
5

Ein REST XML-Webdienst (nicht JSON!) Sollte XML-Schema-spezifizierte XML zwischen einer Google App Engine und einer Android-App austauschen.Android und Google App Engine: unterstützt XML-Bindungstool verfügbar?

Ich wollte XStream für beide verwenden, aber ich konnte es nicht für die Google App Engine verwenden, daher ist Apache XMLBeans für mich die nächstbeste Wahl (JAXB funktioniert nicht bei beiden). Allerdings, mit Google App Engine gibt es kein Problem, aber auf Android bekomme ich mehrere schwerwiegende Ausnahmen (zB wegen der Verwendung der Stax-API mit ihren javax.xml. * - Paketen).

So

  1. Gibt es eine andere XML-Bindung Möglichkeit XML-Dokumente auf GAE und Android zu streamen?
  2. Wenn nicht, ist es möglich, Apache XMLBeans mit Android zu patchen?

Vielen Dank!

Antwort

0

Android fehlt integrierte Unterstützung für die XML-Generierung, Punkt. Android ist stärker mit JSON, da es JSON-Dokumente analysieren und generieren kann.

In Bezug auf das Patchen von XMLBeans finden Sie es möglicherweise schneller, ein anderes Paket mit weniger Abhängigkeiten zu finden. Sie können nicht einfach neuen Code importieren, der sich in den Paketen java.* oder javax.* befindet.

2

Ich bin hier im Dunkel Stossen, da ich nichts von diesem versucht habe, noch:

Es gibt this blog entry von XBinder, die behaupten, dass sie eine Android-kompatible Version „in wenigen Wochen“ veröffentlichen . Obwohl das momentan keine Option ist, erklären sie auch ein bisschen wie sie es gemacht haben, indem sie einen leichten StAX-ähnlichen Wrapper auf die XmlPull-Unterstützung, die bereits in Android vorhanden ist, bringen.

(meine Antwort hatte ursprünglich eine anderen Absatz auf XStream auf Android zu arbeiten, aber dann las ich die Frage wieder und sah, dass das Problem mit dem Erhalten XStream war ... auf der App Engine-Seite zu arbeiten)

+0

Abschließend aus dem Text, das ist genau das, was ich suche. Im Moment evaluiere ich http: //vtd-xml.sourceforge.net/, das funktioniert gut, aber ist keine Datenmappe.Sobald die Android-kompatible Version heraus ist, werde ich es überprüfen .. – Ice09

+0

Welche Funktion suchen Sie in XML Data Binder? –

2

Ein XML-Daten bindendes Framework, das sowohl für Google App Engine als auch für Android funktioniert, ist . Es verwendet Annotationen ähnlich JAXB, um ein POJO zu kommentieren, das dann in XML serialisiert und deserialisiert werden kann. Zum Beispiel würde ein mit Anmerkungen versehenes Objekt aussehen.

@Root 
public class Pojo { 
    @Attribute 
    private String name; 
    @Element 
    private String value 

    public String getName() { 
     return name; 
    } 

    public String getValue() { 
     return value; 
    } 
} 

Dann um XML zu generieren alles, was Sie tun müssen, ist.

Serializer serializer = new Persister(); 
serializer.write(instance, outputSteam) 

lesen Sie

Serializer serializer = new Persister(); 
Pojo pojo = serializer.read(Pojo.class, inputSteam) 

tun können, und das ist es! Es ist ein sehr leistungsfähiges Framework mit vielen anderen Funktionen und Anmerkungen. Es funktioniert für Android, Google App Engine und jedes JDK 1.5+. Es hat keine Abhängigkeiten und ist sehr leicht. Weitere Informationen finden Sie unter Tutorial.

0

Sie können Castor verwenden. Nur sicher sein, in Android 2.1, nicht standardmäßig Android SAXParser verwenden. Sie erhalten Namespace-Fehler. Dazu definieren Sie in core.properties den Parser als Xerces (und fügen Sie die erforderlichen JARS hinzu) hinzu. In Android 2.2 kann es in Ordnung sein. Beachten Sie, dass wenn Sie einen xmlcontext für den unmarsheler mit xerces erstellen, es immer noch nicht funktioniert, da das Mapping selbst mit dem SAX von android analysiert würde.Es muss im Kern (Eigenschaftsdatei der obersten Ebene) erfolgen, so dass selbst das Mapping von xerces analysiert wird. endlich - Leistung ist so langsam, wie Sie erwarten können ... :(Viel Glück SM

1

Eine andere Option ist Pulloid (pulloid.org). Es beruht auf der XmlPull API, die in Android enthalten ist. Auf der App Engine Seite Sie würde jetzt eine XmlPull-Implementierung wie XPP3 verwenden müssen - ich weiß nicht, ob es ein Show-Stopper ist oder nicht.