Es konnte keine Verbindung zum Tridion Core Service von einem Android-Client hergestellt werden

9

Ich entwickle eine Android App für die Verbindung zum Tridion 2011 SP1 Core Service. Bis jetzt habe ich Android WS Stubs aus dem Kerndienst wsdl mit wsclient erstellt.

Diese Stubs wurden importiert, die den Zugriff auf alle Hauptdienstmethoden ermöglichen.

Ich kann mich jetzt über die Android-Anwendung bei Tridion authentifizieren, aber sobald ich versuche, selbst grundlegende Webservice-Aufrufe wie getApiVersion() auszuführen, erhalte ich den Fehler:

  

ReflectionHelper * java.lang.NoSuchFieldException: GetApiVersionResult.

Ich frage mich, ob es jemand anderem gelungen ist, eine Java Android App zu erstellen, die mit dem Core Service kommuniziert?

Interessanterweise funktioniert alles, wenn ich den Code als Java-Anwendung mit wsimport stubs ausführe.

Jede Hilfe wird geschätzt. Als Referenz hier ist ein Code-Snippet:

Um sich mit Tridion zu verbinden:

%Vor%

Um die ApiVersion zu erhalten

%Vor%     
Allan Kane 08.01.2013, 16:17
quelle

1 Antwort

1

Frank,

Das ist aus mehreren Gründen nicht möglich.

Wenn Sie wsimport verwenden, um den coreservice-Proxy zu erstellen, wird die javax-Bibliothek verwendet, die in der JRE vorhanden ist. Dalvik implementiert jedoch nur eine Teilmenge der javax-Bibliothek, was bedeutet, dass dieser Ansatz in der Android-Umgebung unmöglich ist.

Ich habe mir dann die Ksoap2-Tools zum Erstellen des Proxys angesehen. Dies schien OK zu funktionieren, da es zwar einen Proxy erstellt hat, jedoch nicht mit dem Core Service übereinstimmt, so dass ich mich nicht authentifizieren konnte. Ich kam mit diesem Ansatz nicht weiter, als den JRE-Proxy über den KSoap2-Proxy zu untersuchen. Sie waren ganz anders.

An diesem Punkt trat ich einen Schritt zurück, trank eine Tasse Tee und überarbeitete den Ansatz.

Ich habe einen c # -REST-Dienst erstellt, der zwischen der Android-App und dem Kerndienst verwendet wird.

Dieser Ansatz schien ein wenig komplex, bietet aber viele Vorteile. Viele der Spatenarbeiten können im REST-Dienst erledigt werden, der viel schneller ist als ähnlicher Code auf einem Tablet oder Telefon.

Zweitens befindet sich der REST-Dienst auf demselben Server wie der CMS / CoreService, so dass die Kommunikation schneller ist und Sie die REST-Anforderungen der Android-App viel leichter machen können.

Ich habe die Anwendung an dem Punkt, wo Sie sich bei Tridion authentifizieren können, eine Publikation auswählen und Komponenten, die dann in einem dynamischen Layout gerendert werden, bereit zum Aktualisieren / Speichern / Veröffentlichen.

Der große Nachteil dieses Ansatzes besteht darin, dass der REST-Dienst "zustandslos" sein sollte, sodass Sie sich oberflächlich für jede Anfrage beim Core-Service authentifizieren müssen. Natürlich mache ich das nicht, aber Sie müssen sich einen alternativen Ansatz ausdenken, Oauth, geteiltes Geheimnis usw.

In ersten Tests schien dieser Ansatz auf einem Android-Gerät ziemlich glatt zu sein.

    
Josanne Kane 19.01.2013, 12:03
quelle

Tags und Links