Frage

Ich bin völlig festgefahren und brauche Ihre Hilfe ... Ich habe mit JAXB 2.x einen Webservice -Stub für einen Dienst erstellt, der eine binäre Datei (Base64 codierte JPG -Bilder) in einer SOAP -Nachricht sendet. Alles funktionierte gut und ich konnte die Bilder empfangen und anzeigen, bis ich versuchte, die Eclipse RCP -App in ein Produkt zu exportieren, das nicht zu LinkageErrors führte (wie üblich javax.xml.namespace.qname und einige mehr).

Ich konnte dieses Problem bei der "Rebunddle" -Axis2 lösen und jetzt funktioniert alles wieder gut - außer der Analyse des binären Dateiteils innerhalb des Stubes, was jetzt eine Ausnahme (unerwartetes Element) verursacht.

Ein genauerer Blick ergab, dass der Leser (OmStaxWrapper), der im Axis2-JAXB-generierten Stub verwendet wird, jetzt nicht den gesamten Base64-Text, sondern nur die ersten 10000 Bytes liest. Dann findet es nicht das richtige Ende des Elements und macht eine Ausnahme.

Wie bereits erwähnt - dies ist am Anfang nicht passiert, also hoffe ich, dass es sich nur um einen Parameter oder eine Option handelt. Vielen Dank im Voraus für jede Hilfe oder jeden Hinweis!

BearbeitenEs war nicht JAXB, ich habe Jaxws und WSIMport verwendet, um den Stub für die WSDL -Datei zu erstellen ...

War es hilfreich?

Lösung

Für ein wenig Hintergrund ist OmstaxWrapper Teil von Axiom, dem benutzerdefinierten Streaming -Dienstprogramm von AXIS2 für Webdienste, das AXIS2 als Ersatz für SAAJ verwendet. Ich wäre nicht sehr überrascht, wenn es Buggy wäre, wenn meine vorherige Erfahrung mit Achse etwas ist.

Wenn Sie große Binärdateien über die Seife senden möchten, scheint die beste Technologie dafür im Moment MTOM zu sein (siehe hier für die Verwendung mit Achse2). Dies kann die binäre Darstellung besser optimieren, und Ihr Problem kann verschwinden. Sowohl Client als auch Server müssen jedoch in der Lage sein, MTOM zu sprechen, daher ist dies möglicherweise keine Option für Sie.

Alternativ sollte es möglich sein, Achse2 zu überzeugen, die Standard -SAAJ -API anstelle von Axiom zu verwenden. SAAJ ist langsamer, sollte aber weniger fehlerhaft sein.

Mein letzter Vorschlag ist, Axis2 für Ihren Kunden aufzugeben und etwas Leichtes zu verwenden. Spring-Ws Bietet eine sehr nette Client -API, die derzeit mein Tool der Wahl ist, um mit Remote -Webdiensten zu sprechen. Es unterstützt Axiom und Saaj sowie MTOM, und es ist ausreichend leicht, dass es ziemlich einfach ist, herauszufinden, warum etwas schief gelaufen ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top