Zum Inhalt springen

SOAP, AXIS, Deserializer kann Response nicht auswerten


Aiun

Empfohlene Beiträge

hu,

wie in einem anderen Thema im Script/Webserver-Forum beschrieben muss ich größere Datenmengen aus einer SOAP-Schnittstelle abfragen.

Da die PHP Version Probleme hat, habe ich einen versuch gestartet das über Java anzusteuern, was wir eh in hinsicht auf Performance testen wollten.

Zuerst habe ich einen Client (ohne WSDL) per hand programmiert, basierend auf Apache AXIS 1.4.

Eine Abfrage mit leerem ergebnis scheint auch zu funktionieren, aber sobald ein INhalt drin ist (Objekte von eigenen Klassen)

gibt es folgenden Fehler:

org.xml.sax.SAXException: SimpleDeserializer encountered a child element, which is NOT expected, in something

Nach einiger Zeit der suche in Google & Co habe ich wsdl2java ausprobiert.

Leider mit dem gleichen Ergebnis.

php liefert dank nusoap ja array() - elemente, ist es nicht möglich das in java durch ein generic-Object oder Hashmap-Verzweigungen zu erreichen ?

das response an sich ist ok, funktioniert in php ja auch, nur das parsen schafft er nicht.

Jemand Infos, Tips, Lösung für mich ?

danke

Link zu diesem Kommentar
Auf anderen Seiten teilen

Informationen über die jdk version und die API mit der du die schnittstelle ansprichst wären hilfreich.

Kann dir nur sagen, dass du per SOAP nicht einfach Objekte hin & her schicken kannst.

In Java 6 wird dies mit Holder Objekten der JAX-WS API gemacht.

Dabei brauchst du Serverseitig eine Methode die ein ein Holder<T> Objekt als Parameter übergeben bekommt.

Diese könnte z.B. so aussehen:



	public void listBestellung(Holder<List<Bestellung>> holder)

	{

		this.liste.add(new Bestellung ("Hans", "Wurst", "13.55"));

		holder.value=this.liste;

	}

Nachdem was du geschrieben hast, sollte es ja kein Problem für dich sein, diese Methode ansprechen zu können. Clientseitig würdest du dir jetzt dieses Holder Objekt erzeugen, und die funktion mit dem erzeugten Holder aufrufen.

	Holder<List<Bestellung>> holder = new Holder<List<Bestellung>>();

	webServiceObjekt.listBestellung(holder);


	for (Bestellung temp : holder.value) {

		System.out.println(temp.getNachname());

                         System.out.println(temp.getVorname());

             }

Nach deinem Funktionsaufruf ist dein Holder also mit den Daten der Servermethode gefüllt. holder.value gibt die Liste der Bestellungen zurück. Die verschachtelten generics können manchmal echt nervig sein. Achja ... was ebenfalls im jdk6 enthalten ist, ist ein kleines Tool namens wsimport. dies generiert die deine Interface klassen automatisch mit allen Annotations. Beispiel:
wsimport -d <Pfad der Kompilierten ServiceKlassen> -s <zielverzeichnis für die generierten Klassen> -p <name des Paketes für generierte Klassen> -keep <URL der WSDL>

Hoffe das hilft dir irgendwie weiter.

Gruß Rufus

Link zu diesem Kommentar
Auf anderen Seiten teilen

als laufzeitumgebung ist eine JRE 1.5 installiert. Alle benötigten Jars werden bisher über das Manifest der jar angegeben und mit der eigentlichen Programm-Jar im Ordner gespeichert.

Alle verwendeten Jars kommen aus Axis 1.4

zur verbindung wird ein org.apache.axis.client.call

verwendet und die Rückgabe kommt als object aus call.invoke();

falls die Klasse des Objekts bekannt ist, wird es konviertiert, aber soweit ich es verstehe scheitert es schon beim Parsen des Response innerhalb des Invoke()

ich hoffe die Infos sagen dir genug

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...