2009-05-03 10 views
3

Ich bin gerade dabei, einen Document-Literal-SOAP-Service für eine Business-App zu modifizieren, die Daten über Kunden hin und her überträgt.Alternativen zum Senden eines Bildes in base64 über Dokumentenliteral SOAP

Eine neue Anforderung für die Übertragung gescannter Dokumentbilder wurde gerade identifiziert. Das Problem, das ich habe, ist, dass die proprietäre Sprache, die ich verwende, keine SOAP-Anhänge unterstützt.

Die übertragenen Bilder können bis zu 32 KB groß sein.

Die einzige Lösung, die ich mir vorstellen kann, ist, Base64 das Bild zu kodieren und es als ein Element des XML-Dokuments durchzugeben.

Das fühlt sich an wie eine wirklich schlechte Idee, aber ich kann mir nichts besseres vorstellen.

Irgendwelche Ideen?

EDIT: Ich vergaß zu erwähnen, dass das Bild nicht aus der Ferne in einem Dateisystem gehalten wird, wird es in einer Oracle-Datenbank gespeichert, die es nicht direkt die Fähigkeit hat, zu verbinden,

Antwort

5

Wenn Sie‘ Wenn Sie XML als Datenübertragungsmechanismus verwenden, müssen Sie das Bild irgendwie kodieren. Der Grund dafür ist, dass XML ein Textformat ist und ein XML-Prozessor versucht, binäre Daten so zu dekodieren, als wäre es Text (genauer gesagt, als wäre es UTF-8, außer Sie geben eine andere Kodierung an). Darüber hinaus erlaubt XML explizit mehrere Zeichen (die meisten nicht druckbaren ASCII-Dateien für XML 1.0, für XML 1.1), so dass Sie Ihre Daten beschädigen, wenn Sie die Bilddaten einfach in (etwa) einen CDATA-Abschnitt ablegen.

Bearbeiten: XML Schema definiert einen "base64Binary" Typ, so dass Sie in der Lage sein sollten, Ihre WSDL entsprechend zu definieren (vorausgesetzt, Sie verwenden einen automatisierten Marshaller). Zumindest sollten Sie das Attribut "xsi:type" für das Element verwenden, das Ihren codierten Inhalt enthält.

+0

Das funktioniert für mich! – kingmunkyman

+0

base64Binary und hexBinary funktionieren beide. Gute Antwort! –

Verwandte Themen