2010-02-14 7 views
5

Usługa sieci Web REST XML (nie JSON!) Powinna wymieniać XML Schema określonego XML między Google App Engine a aplikacją na Androida.Android i Google App Engine: dostępne narzędzie do bindowania XML?

Chciałem użyć XStream dla obu, jednak nie mogłem go uruchomić dla Google App Engine, dlatego dla mnie Apache XMLBeans jest kolejnym najlepszym wyborem (JAXB nie działa na obu). Jednak z Google App Engine nie ma problemu, ale na Androidzie dostaję kilka poważnych wyjątków (np. Z powodu użycia Stax API z jego pakietami javax.xml. *).

Więc

  1. Czy istnieje inna możliwość wiązania XML do przesyłania dokumentów XML na GAE i Android?
  2. Jeśli nie, czy można załączyć Apache XMLBeans do pracy z systemem Android?

Dzięki!

Odpowiedz

0

Android nie ma wbudowanej obsługi generowania XML, kropka. Android jest silniejszy dzięki JSON, ponieważ może on zarówno analizować, jak i generować dokumenty JSON.

Jeśli chodzi o łatanie XMLBeans, może się okazać, że szybciej znajdziesz inny pakiet, który ma mniej zależności. Nie można łatwo zaimportować żadnego nowego kodu, który znajduje się w pakietach java.* lub javax.*.

2

ja grzebie w ciemności tutaj, ponieważ nie próbowałem coś z tym jeszcze:

Jest this blog entry z XBinder który twierdzi, że są one zwolnieniu android kompatybilnych wersji „w ciągu kilku tygodni” . Choć może to nie być opcja w tej chwili, wyjaśniają też trochę, jak to zrobili, owijając lekkie opakowanie podobne do Stax na obsłudze XmlPull już obecnej w systemie Android.

(moja odpowiedź pierwotnie miał inny paragraf na XStream pracuje na Androidzie, ale potem znowu przeczytać pytanie i zobaczył, że problem był z coraz XStream do pracy po stronie AppEngine ...)

+0

Podsumowując z tego tekstu, właśnie tego szukam, teraz oceniam http: //vtd-xml.sourceforge.net/, który działa dobrze, ale nie jest żadnym segregatorem danych.Jeśli tylko wersja kompatybilna z Androidem się wyłączy, sprawdzę ją – Ice09

+0

jakiej funkcji szukasz w segregatorze danych xml? –

2

danych XML wiążąca struktura, która działa zarówno na Google App Engine, jak i na Androida, to Simple. Używa adnotacji podobnych do JAXB do adnotacji POJO, które można następnie serializować i deserializować w XML. Na przykład wyglądałby obiekt z adnotacjami.

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

    public String getName() { 
     return name; 
    } 

    public String getValue() { 
     return value; 
    } 
} 

Następnie, aby wygenerować XML, wszystko, co musisz zrobić, to.

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

Aby przeczytać można zrobić

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

I to wszystko! Jest to dość potężny framework z wieloma innymi funkcjami i adnotacjami. Działa na Androida, Google App Engine i dowolną wersję JDK 1.5+. Nie ma zależności i jest bardzo lekki. Aby uzyskać więcej informacji, patrz Tutorial.

0

Możesz użyć Castora. Po prostu upewnij się, że w systemie Android 2.1 nie będzie używany domyślny Android SAXParser. Otrzymasz błędy przestrzeni nazw. Robisz to, definiując parser jako np. Xerces (i dodajesz wymagane JARS) w pliku core.properties. W systemie Android 2.2 może być OK. Zauważ, że jeśli utworzysz xmlcontext dla unmarsheler z xerces, to nadal nie zadziała, ponieważ samo mapowanie będzie parsowane z SAXem androida.Musi to być zrobione w rdzeniu (plik właściwości najwyższego poziomu), aby nawet mapowanie było analizowane przez xerces. wreszcie - wydajność jest tak powolna, jak można się spodziewać ... :(Powodzenia SM

1

Inną opcją jest Pulloid (pulloid.org), który bazuje na API XmlPull zawartym w systemie Android. musiałbym użyć na razie implementacji XmlPull, takiej jak XPP3 - nie wiem, czy to jest korek, czy nie.