Wednesday 10 May 2017

Cxf Content Transfer Encoding Binär Optionen


Umgang mit Binärdaten mit Axis2 (MTOMSwA) Einleitung Trotz Flexibilität, Interoperabilität und globaler Akzeptanz von XML gibt es Zeiten, in denen Serialisierung von Daten in XML nicht sinnvoll ist. Web-Services-Benutzer können Binär-Attachments von verschiedenen Sorten wie Bilder, Zeichnungen, XML-Dokumente usw. zusammen mit einer SOAP-Nachricht übertragen. Solche Daten sind oft in einem bestimmten Binärformat. Traditionell wurden zwei Techniken für den Umgang mit opaken Daten in XML verwendet. Das Senden von binären Daten durch den Wert wird durch Einbettung von opaken Daten (natürlich nach irgendeiner Form von Codierung) als Element - oder Attributinhalt der XML-Komponente von Daten erreicht. Der Hauptvorteil dieser Technik ist, dass es Anwendungen die Möglichkeit gibt, Daten zu verarbeiten und zu beschreiben, die nur auf der XML-Komponente der Daten basieren. XML unterstützt undurchsichtige Daten als Inhalt durch die Verwendung von entweder base64 oder hexadezimaler Textcodierung. Beide Techniken blasen die Größe der Daten auf. Für die UTF-8-zugrunde liegende Textcodierung erhöht die Base64-Codierung die Größe der Binärdaten um einen Faktor von 1,33x der ursprünglichen Größe, während die Hexadezimalcodierung Daten um den Faktor 2x erweitert. Die obigen Faktoren werden verdoppelt, wenn UTF-16 Textcodierung verwendet wird. Auch von besorgniserregend ist der Overhead in den Bearbeitungskosten (sowohl real als auch wahrgenommen) für diese Formate, vor allem bei der Dekodierung wieder in rohe Binärdatei. Das Senden von Binärdaten durch Referenz wird durch das Anfügen von reinen Binärdaten als externe, nicht gepardete allgemeine Entitäten außerhalb des XML-Dokuments und anschließendes Einbetten von Referenz-URIs an diese Entitäten als Elemente oder Attributwerte erreicht. Dies verhindert das unnötige Aufblasen von Daten und Verschwendung von Rechenleistung. Das primäre Hindernis für die Nutzung dieser unparsed Entities ist ihre starke Abhängigkeit von DTDs, die Modularität sowie die Verwendung von XML-Namespaces beeinträchtigt. Es gab mehrere Spezifikationen, die in der Web-Service-Welt eingeführt wurden, um mit diesem binären Attachment-Problem unter Verwendung der quotby-Referenzquot-Technik umzugehen. SOAP mit Attachments ist ein solches Beispiel. Da SOAP Dokumenttyp-Deklarationen (DTD) in Meldungen verbietet, führt dies zu dem Problem, Daten nicht als Teil des Meldungs-Infosets darzustellen und damit zwei Datenmodelle zu erzeugen. Dieses Szenario ist wie das Senden von Anhängen mit einer E-Mail-Nachricht. Auch wenn diese Anhänge mit dem Nachrichteninhalt zusammenhängen, sind sie nicht in der Nachricht. Dies führt dazu, dass die Technologien, die die Daten auf der Grundlage der XML-Komponente der Daten verarbeiten und beschreiben, zu Fehlfunktionen führen. Ein Beispiel ist WS-Security. Wo ist MTOM Come In MTOM (SOAP Message Transmission Optimization Mechanism) ist eine weitere Spezifikation, die auf die Lösung der quotAttachmentsquot Problem konzentriert. MTOM versucht, die Vorteile der beiden oben genannten Techniken zu nutzen, indem man versucht, die beiden Techniken zusammenzuführen. MTOM ist eigentlich ein quotby-Referenzquot-Verfahren. Das Drahtformat einer MTOM-optimierten Nachricht ist dasselbe wie die SOAP mit Attachments-Nachricht, die es auch rückwärts kompatibel mit SwA-Endpunkten macht. Das bemerkenswerteste Merkmal von MTOM ist die Verwendung des XOP: Include-Elements, das in der XML Binary Optimized Packaging (XOP) - Spezifikation definiert ist, um auf die binären Attachments (externe ungepufferte allgemeine Entitäten) der Nachricht zu verweisen. Mit der Verwendung dieses exklusiven Elements wird der angehängte Binärinhalt logisch inline (mit dem Wert) mit dem SOAP-Dokument, obwohl er tatsächlich separat angehängt ist. Dies verschmilzt die beiden Bereiche, indem es möglich ist, nur mit einem Datenmodell zu arbeiten. Dies ermöglicht es den Anwendungen zu verarbeiten und zu beschreiben, indem man nur den XML-Teil betrachtet, wodurch die Abhängigkeit von DTDs veraltet ist. Auf einer leichteren Note hat MTOM den Referenzmechanismus von SwA standardisiert. Das folgende ist ein Auszug aus der XOP-Spezifikation. Auf der konzeptionellen Ebene können diese Binärdaten als Basis64-codiert im XML-Dokument betrachtet werden. Da diese konzeptionelle Form bei einer Verarbeitung des XML-Dokuments erforderlich ist (z. B. zum Signieren des XML-Dokuments), ist es notwendig, eine Eins-zu-Eins-Korrespondenz zwischen XML-Infosets und XOP-Paketen zu haben. Daher ist die konzeptionelle Darstellung solcher Binärdaten so, als wäre sie base64-codiert, wobei die kanonische lexikalische Form des XML-Schema base64Binary-Datentyps verwendet wurde (siehe XML-Schema Teil 2: Datentypen Second Edition 3.2.16 base64Binary). In umgekehrter Richtung ist XOP in der Lage, nur base64-codierte Infoset-Daten zu optimieren, die in der kanonischen lexikalischen Form vorliegen. Apache Axis2 unterstützt Base64-Codierung. SOAP mit Attachments und MTOM (SOAP Message Transmission Optimization Mechanism). MTOM mit Axis2 Programmiermodell AXIOM ist (und kann das erste) Objektmodell sein, das die Fähigkeit hat, binäre Daten zu halten. Es hat diese Fähigkeit, wie OMText rohen binären Inhalt in Form von javax. activation. DataHandler halten kann. OMText wurde zu diesem Zweck aus zwei Gründen ausgewählt. Einer ist, dass XOP (MTOM) in der Lage ist, nur base64-codierte Infoset-Daten zu optimieren, die sich in der kanonischen lexikalischen Form des XML-Schema base64Binary-Datentyps befinden. Anderes ist, das Infoset sowohl im Sender als auch im Empfänger zu bewahren. (Um den Binärinhalt in der gleichen Art von Objekt zu speichern, unabhängig davon, ob es optimiert ist oder nicht). MTOM ermöglicht die selektive Verschlüsselung von Teilen der Nachricht, die es uns ermöglicht, basendecodierte Daten sowie extern angehängte rohe Binärdaten zu senden, die durch das in einer SOAP-Nachricht zu sendende quotXOPquot-Element (optimierter Inhalt) referenziert werden. Sie können festlegen, ob ein OMText-Knoten, der rohe Binärdaten oder base64encodierte Binärdaten enthält, qualifiziert ist, um zum Zeitpunkt des Aufbaus dieses Knotens oder später optimiert zu werden. Für eine optimale Effizienz von MTOM empfiehlt es sich, kleinere Binär-Anhänge mit Base64encoding (nicht optimiert) und größeren Anhängen als optimierten Inhalt zu versenden. Außerdem kann ein Benutzer einen optimierbaren Binärinhaltsknoten unter Verwendung eines base64-codierten Strings erstellen, der einen codierten Binärinhalt enthält, der mit dem MIME-Typ der tatsächlichen Binärdarstellung versehen ist. Axis2 verwendet javax. activation. DataHandler, um die Binärdaten zu verarbeiten. Alle optimierten Binärinhaltsknoten werden als Base64-Strings serialisiert, wenn quotMTOM nicht aktiviert ist. Sie können auch binäre Content-Knoten erstellen, die auf keinen Fall optimiert werden. Sie werden serialisiert und als Base64 Strings gesendet. Aktivieren der MTOM-Optimierung auf der Client-Seite In Optionen setzen Sie die quotenableMTOMquot-Eigenschaft auf True beim Senden von Nachrichten. Wenn diese Eigenschaft auf True gesetzt ist, wird jede SOAP-Hüllkurve, unabhängig davon, ob sie einen optimierbaren Inhalt enthält oder nicht, als MTOM-optimierte MIME-Nachricht serialisiert. Axis2 serialisiert alle Binär-Content-Knoten als Base64-codierte Strings, unabhängig davon, ob sie qualifiziert sind, um optimiert zu werden oder nicht, wenn die quotenableMTOMquot-Eigenschaft auf False gesetzt ist. Wenn der Umschlag enthält Elementinformationen des Namens xop: Include (siehe XML-Binär optimierte Verpackung 3. XOP Infosets Constructs). Der Benutzer muss nichts angeben, damit Axis2 MTOM-optimierte Nachrichten empfangen kann. Axis2 identifiziert und de-serialisiert entsprechend, wie und wann eine MTOM-Nachricht eintrifft. Aktivieren der MTOM-Optimierung auf der Serverseite Der Axis 2-Server identifiziert automatisch eingehende MTOM-optimierte Meldungen basierend auf dem Content-Typ und de-serialisiert sie entsprechend. Der Benutzer kannMTOM auf der Serverseite für ausgehende Nachrichten aktivieren, Um MTOM global für alle Dienste zu aktivieren, können Benutzer den quotenableMTOMquot-Parameter in der Axis2.xml auf True setzen. Wenn es gesetzt ist, werden alle ausgehenden Nachrichten serialisiert und als MTOM-optimierte MIME-Nachrichten gesendet. Wenn es nicht gesetzt ist, werden alle Binärdaten in den Binärinhaltsknoten als Base64-codierte Zeichenfolgen serialisiert. Diese Konfiguration kann in services. xml auf der Basis von pro Service und pro Operation überschrieben werden. Sie müssen den Server nach der Einstellung dieses Parameters neu starten. Zugriff auf empfangene Binärdaten (Beispielcode) Im Schreiben eines einfachen Webservers in Python, der es einem Benutzer ermöglicht, eine Datei mit Multipartform-Daten hochzuladen. Soweit ich sagen kann, werden Multipart-MIME-Daten linienbasiert sein. Zum Beispiel muss die Grenze am Anfang einer Linie sein. Ich kann nicht herausfinden, wie Binärdaten in dieser Hinsicht behandelt werden. Mein Client (Firefox) kodiert es nicht in 7bit ASCII oder irgendetwas, seine nur rohen Binärdaten sein Senden. Ist es aufgeteilt die Daten in Zeilen an beliebigen Orten Gibt es eine maximale Zeilenlänge für Multipart-Daten angegeben Ive versucht, durch die RFC für Multipartform-Daten suchen, aber nichts gefunden. Fragte Mar 27 13 um 16:54 Nach dem Graben durch die RFCs, ich glaube ich habe endlich alles in meinem Kopf. Die Körperteile (d. h. der Körpergehalt eines einzelnen Teils in einer mehrteiligen Nachricht) müssen nur so sein, daß die Grenze am Ende des Teils mit einer CRLF beginnt. Andernfalls müssen die Daten nicht linienbasiert sein, und wenn der Inhalt in diesem Fall Zeilenumbrüche hat, gibt es keinen maximalen Abstand zwischen ihnen, noch müssen sie in irgendeiner Weise entkommen sein (gut, wenn nicht vielleicht die Content-Transfer - Encoding ist zitiert-String). Die 7-Bit-, 8-Bit - und Binäroptionen für Content-Transfer-Encoding zeigen nicht wirklich an, dass irgendeine Codierung auf den Daten durchgeführt wurde (und daher keine Codierung rückgängig gemacht werden muss), sie sind nur dazu gedacht, die Art der Daten anzugeben Sie können erwarten, im Körperteil zu sehen. Was ich in meiner schlecht ausgedrückten Frage wirklich bekam, war, wie man die Daten aus der Steckdose lernte, damit ich sicher sein konnte, dass ich die Grenze erwischte und ohne einen beliebig großen Puffer zu haben musste (zB wenn es keine Zeilenumbrüche gab Der Inhalt, und so eine readline bis zum Pufferung der ganzen Sache). Was ich am Ende tat, war die Pufferung aus der Steckdose mit einer Leseleitung mit einer maximalen Länge, so dass der Puffer würde nie länger als das sein, aber würde auch sicherstellen, zu beenden, wenn ein Zeilenumbruch angetroffen wurde. Dies stellte sicher, dass, wenn die Grenze kam (nach einem CRLF), wäre es am Anfang des Puffers. Ich musste ein bisschen extra monkeying herum, um sicherzustellen, dass ich nicht enthalten, dass endgültige CRLF in den tatsächlichen Körper Inhalt, weil nach dem RFC seine erforderlich vor der Grenze, und daher nicht Teil des Inhalts selbst. Beantwortet Apr 5 13 um 12:02 Versuchen Sie, RFC 2045 zu überprüfen. Typischerweise wird binärer Inhalt von Ihrer Anwendung in BASE64 umgewandelt und in der Multi-Part-Nachricht mit Content-Transfer-Encoding aufgenommen. Base64 Es gibt andere Mechanismen, um binäre Daten zu übertragen, aber das ist ziemlich häufig. Binäre Daten werden in Oktette umgewandelt und in beliebigen Längenfolgen ausgeteilt (abhängig von der Codierungsvariante - siehe BASE64 Link oben). Die empfangende Anwendung decodiert sie dann in den ursprünglichen Binärinhalt. Ich bin kein Python-Programmierer, aber ich wäre überrascht, dass du das wirklich selbst beherrschen musst. Ich vermute, es gibt vorgebaute Python-Bibliotheksfunktionen, um dies für Sie zu tun. Antwortete Mar 27 13 um 17:43 Danke, ich war auf der Suche nach einem anderen RFC, die nicht so informativ war. Ich habe auch gefunden RFC 2046, die spezifisch definiert mehrteilige Nachrichten in Abschnitt 5. Notieren Sie dort39s ein bisschen eine Subtilität in diesen RFCs, die durch mich aus: es heißt, multipart Nachrichten können keine anderen Kodierungen als 7-Bit, 8-Bit und binär (Dh nicht Base-64). Allerdings geht es weiter darauf hin, dass die einzelnen Teile innerhalb des Multi-Parts dort eigene Content-Codierungen haben können, also sind Sie richtig, dass Base-64 möglich ist. Ndash brianmearns 28. März um 13:20 Ihre Antwort 2017 Stack Exchange, IncSending Attachments mit SOAP SOAP Anwendungen müssen oft mit mehr als nur einfache Nachrichten zu tun haben. Die Nutzlast für eine SOAP-Nachricht kann oft eine Textverarbeitung oder ein PDF-Dokument, ein Bild oder eine andere Binärdatei enthalten. Dieser Artikel beschreibt, wie man den Message Transmission Optimization Mechanism (MTOM) zum Senden und Empfangen dieser Nachrichten verwendet. Laden Sie diese kostenlose Anleitung frei Gratis Handbook: Java App Entwicklung in der Cloud Software-Ingenieure nähern sich der Entwicklung und dem Enterprise Design auf eine ganz neue Art und Weise dank der Cloud. In diesem Experten-Handbuch, erkunden Sie, wie Ihre Kollegen die Cloud nutzen, um App-Lifecycle-Management zu optimieren, Geld zu sparen und Produktion und Sicherheit effizienter zu machen. Mit der Absendung Ihrer persönlichen Daten erklären Sie sich damit einverstanden, dass TechTarget und seine Partner Sie über relevante Inhalte, Produkte und Sonderangebote kontaktieren können. Sie stimmen auch zu, dass Ihre personenbezogenen Daten in den Vereinigten Staaten übertragen und verarbeitet werden können und dass Sie die Nutzungsbedingungen und die Datenschutzbestimmungen gelesen und akzeptiert haben. Voraussetzungen Dieser Artikel verwendet den WSO2 Web Services Application Server (WSAS). Es wird empfohlen, dass Sie WSO2 WSAS 2.0 herunterladen und installieren. Der Artikel verwendet die Servlet Edition, die auf Apache Tomcat installiert ist. Jeder Anwendungsserver kann mit der Servlet-Version verwendet werden, folgen Sie einfach den Installationsanweisungen, die mit WSO2 WSAS enthalten sind. Du musst überhaupt keinen Applikationsserver benutzen, da WSO2 WSAS in einem eigenständigen Format hervorragend arbeitet. WSO2 WSAS benötigt Java 1.4 oder 1.5, aber es gibt keine anderen Voraussetzungen dafür. Natürlich werden Web-Services und SOAP besonders genutzt, so dass die Vertrautheit mit dem hilft. Wenn XML nicht genug ist: Binärdaten Es gibt endlose Möglichkeiten, Daten über das Netzwerk zu senden. Es gibt zahlreiche Protokolle und Datenformate. Die Standardisierung um SOAP hat eine Menge von Vermutungen beim Senden von Daten zwischen Systemen weggenommen. SOAP standardisiert das Protokoll (HTTP) und das Datenformat (XML). Eine der Hauptkritiken von SOAP ist die Verwendung von XML. XML ist textbasiert. Dies macht nicht nur große Nachrichten, sondern macht es auch mit Binärdaten kompatibel. Zum Beispiel können wir sagen, dass Ihre Nachricht ein Bild enthalten muss. Dies stellt ein Problem dar, wenn Ihr Nachrichtenformat Text ist. Kombinieren von Binärdaten mit SOAP Ok, also müssen Sie Binärdaten zwischen Anwendungen senden. Youd mag SOAP verwenden, aber es ist beschränkt auf Text. Also solltest du einfach auf SOAP alles aufgeben. Natürlich gibt es zu viele Vorteile für SOAP. Sie brauchen nur einen Weg, um es mit binären Daten zu kombinieren. Sie sehen Web-Seiten tun dies die ganze Zeit kann es nicht so hart sein, richtig Lets erkunden einige Lösungen für dieses Problem. Eine Möglichkeit, die du vielleicht ausprobieren möchtest, ist einfach die Binärdatei in einen Textknoten zu löschen. Es könnte so aussehen wie Listing 1. Listing 1. XML mit Binärdaten: Erster Versuch Denken Sie daran, dass Zeichen auch Bytes sind, genau wie Binärdaten. Ein XML-Parser, ob es sich um einen DOM-, SAX - oder StAX-Parser handelt, muss die Zeichensatz-Codierung des Dokuments verwenden, um alle Bytes im Dokument als Zeichen zu interpretieren. So konnten unsere Binärdaten einfach Zeichen haben, die reservierten XML-Zeichen entsprechen, wie lt oder gt oder amp. Eine solche Byte-Sequenz im Textknoten oben wird dazu führen, dass der Parser auf der anderen Seite zu brechen. So wird dieser Ansatz nicht funktionieren. Aber warten, vielleicht theres eine Möglichkeit, diesen Ansatz zu beheben. Was ist mit der Verwendung eines CDATA-Blocks, der dem Parser mitteilt, die Zeichen im Block zu ignorieren. Dieser modifizierte Ansatz könnte aussehen wie Listing 2. Listing 2. XML mit Binary: Verwenden von CDATA Nun, wenn wir Bytes haben, die als gt interpretiert würden (zB), werden sie ignoriert. Allerdings muss der Parser herausfinden, wo der CDATA-Abschnitt endet. Dies geschieht durch die Suche nach der Bytefolge, die den Zeichen gt entspricht. Es scheint unwahrscheinlich, aber unsere Binärdaten könnten so eine Byte-Sequenz in der Mitte haben. Das würde dazu führen, dass jeder Parser denkt, dass der CDATA-Abschnitt beendet war und die nachfolgenden Charaktere genau wie bei unserem ersten Versuch interpretiert würden. Also das geht auch nicht. Wir brauchen einen Weg, um sicherzustellen, dass diese Bytes arent überhaupt interpretiert werden. Basis 64 Kodierung: Arbeitet aber aufgebläht Es gibt eine Lösung für diese Variante unseres Problems. Eine gemeinsame Möglichkeit, dies zu tun ist, Base 64-Codierung zu verwenden. Diese Technik gibt es seit den 80er Jahren als Standard. Es handelt sich dabei um ein 64-stelliges Alphabet, das aus den Kleinbuchstaben, a-z, den Großbuchstaben, A-Z, den Ziffern 0-9 und den Symbolen besteht. Jedes Byte wird diesen Charakteren zugeordnet, also gibt es keine Möglichkeit für ein Byte, falsch interpretiert als alles, was einen XML-Parser würgen würde. Also dort, Problem gelöst, richtig ja, aber es ist eine eher ineffiziente Lösung. Base 64 codierte Binärwicklungen, die im Durchschnitt 37 größer (Anzahl der Bytes) als die rohen, nicht-codierten Binärdaten sind. Darüber hinaus muss der Parser auf der anderen Seite über die Codierung wissen, damit er die Nutzlast decodieren kann. Man könnte sich vorstellen, dass, wenn Base 64-Codierung Teil des SOAP-Standards war, dann würde es einige Standard-Weg, um diese SOAP-Message-Prozessoren anzuzeigen. Das ist doch nicht der Fall. Es kann eine Lösung sein, aber es ist sowohl ineffizient als auch nicht standardmäßig. Wir brauchen etwas, das sowohl effizienter als auch standardisiert ist. SOAP mit Attachments: Arbeitet aber fehlerhaftes Design Eine Lösung für das Problem ist, das zu verwenden, was als SOAP mit Attachments bekannt ist. Die Idee hier ist, nur die Binärdaten außerhalb der SOAP-Nachricht vollständig zu setzen. Abbildung 1 bietet eine schöne Visualisierung. Abbildung 1. SOAP mit Attachments Dies ist sehr ähnlich, wie Binärdateien an E-Mails angehängt werden können. Die SOAP-Nachricht enthält einen Verweis auf die Binärdatei, die an die Nachricht angehängt ist. Dies ist sowohl effizienter als auch standardisiert, aber es hat einige Mängel in seinem Design. Die binäre Anlage ist nicht Teil der SOAP-Nachricht überhaupt. Es ist ähnlich in vielen Möglichkeiten, nur einen URI für die binären Daten zu übergeben und es bis zum Nachrichtenprozessor zu lassen, um die tatsächlichen Binärdaten abzurufen. Es stellt einige echte Probleme für Dinge wie WS-Security. Dennoch ist das, was für eine Weile verwendet wurde, bis eine bessere Lösung vorgeschlagen wurde: MTOM. MTOM: Das Beste aus beiden Welten MTOM steht für SOAP Message Transmission Optimization Mechanism. Es kombiniert die Effizienz von SOAP mit Attachments, aber das tut es, ohne die Binärdaten außerhalb der SOAP-Nachricht zu brechen. Wie kann das sein Der Schlüssel ist eine Technologie namens XML-binary Optimized Packaging oder XOP. Mit XOP können binäre Daten als Teil des XML Infosets aufgenommen werden. In der Tat wird das XML Infoset zu einer Superset der traditionellen Infoset, die als XOP Infoset bekannt ist. Damit können die Binärdaten außerhalb des XML-Dokuments gespeichert werden, genau wie in SOAP mit Attachments. Es verwendet ein spezielles XOP: include-Element, um dem Prozessor zu sagen, dass er den Inhalt durch die referenzierten Binärdaten ersetzen soll, wodurch die Logik der diskreten Speicherung und Abfrage der Binärdaten eingekapselt wird. Diese Logik wird dem XML-Parser inhärent und ermöglicht dem SOAP-Parser, die Binärdaten als Teil des XML-Dokuments zu behandeln, ohne spezielle Abruflogik. Ähnlich erlaubt es einem SOAP-Server, eine SOAP-Nachricht auf eine einheitliche Weise zu erstellen, keine spezielle Logik zum Ausbrechen dieser Binärdaten aus der SOAP-Nachricht. MTOM in WSO2 WSAS Weve hat viel über die Notwendigkeit von MTOM gesprochen und wie es in der Theorie funktionieren sollte. Es macht uns nicht viel gut ohne eine echte Umsetzung. Zum Glück gibt es eine einfache Möglichkeit, eine tolle MTOM-Implementierung zu bekommen, benutze einfach WSO2 WSAS. WSO2 WSAS basiert auf bewährten Technologien wie Apache Axis2. Axis2 gibt WSO2 WSAS seine MTOM-Implementierung. Lassen Sie uns einen Blick darauf werfen, wie man die Macht der WSASAxis2s MTOM-Implementierung erschließt. Senden einer MTOM-Nachricht von einem Web Service mit der Axiom API MTOM-Unterstützung auf Axis2 baut auf denselben Klassen auf, die in Axis2 verwendet werden. Es verwendet Axis2s Object Model (OM). Axis2 unterstützt sowohl Base 64-Codierung als auch MTOM und macht es relativ einfach, zwischen ihnen zu wechseln. Warum gut für sehr kleine Dateien, kann es tatsächlich effizienter sein, Base 64-Codierung zu verwenden. Um diese nahtlose Umschaltung zwischen optimiertem und nicht optimiertem Transport zu erreichen, behandelt Axis2 binäre Daten als XML-Textknoten. Der einzige Unterschied besteht darin, dass Sie eine javax. activation. DataHandler für den Zugriff auf die Daten übergeben müssen, wie in Listing 3. Listing 3. Hinzufügen von Binärdaten mit der Axiom API Im Beispiel in Listing 3 eine javax. activation. FileDataSource Wird verwendet, um dem DataHandler den Zugriff auf die Binärdaten zu ermöglichen. Sie können jede Klasse verwenden, die die Schnittstelle javax. activation. DataSource implementiert. Zum Beispiel kann bei der Arbeit mit Bildern die org. apache. axis2.attachments. ImageDataSource verwendet werden. Es implementiert die DataSource-Schnittstelle und kann bei der Arbeit mit Bildern bequemer sein. Also, wie funktioniert Axis2 und damit WSO2 WSAS, um MTOM zu verwenden, um die Binärdaten zu optimieren. Das ist eigentlich das, was Axis2 standardmäßig macht. Sie können dies manuell überschreiben, indem Sie nur eine Zeile des Codes hinzufügen, wie in Listing 4 angezeigt. Listing 4. MTOM ausschalten Diese einzelne Zeile des Codes wird Axis2 nicht optimieren, d. h. verwenden Sie nicht MTOM. So wird Axis2 die Base 64-Codierung der Binärdaten verwenden, und es wird wirklich ein Textknoten sein. Andernfalls wird MTOM eintreten, und ein XOP-Include wird verwendet, um den Transport der Binärdaten innerhalb der SOAP-Nachricht zu optimieren. Aktivieren von MTOM auf dem Server Natürlich, um all das wunderbare, automatisch optimierte Verhalten zu erhalten, musst du MTOM aktivieren. Sie können dies durch Ihre axis2.xml Datei sehr leicht machen, wie in Listing 5 angezeigt. Listing 5. Aktivieren von MTOM in axis. xml Es kann nicht mehr schmerzlos als das, rechts Dies ist eine globale Einstellung und ist die Standardeinstellung auf WSO2 WSAS Sie können MTOM auf vier verschiedenen Ebenen aktivieren: global, Servicegruppe, Service und Betrieb. Sie verwenden die gleiche Semantik für jede Ebene. Sie können die Management Console verwenden, um MTOM auf jeder dieser Ebenen zu verwalten. Zum Beispiel sehen Sie sich die Abbildung 2 an. Abbildung 2. Verwalten von MTOM auf der Service Group Level Hier sehen wir, dass MTOM auf Service-Ebene verwaltet wird. Jeder Dienst in der Gruppe kann auch individuell verwaltet werden, wie in Abbildung 3 dargestellt. Abbildung 3. Verwalten von MTOM auf Service-Ebene Natürlich kann jeder Service eine oder mehrere Operationen haben. Mit WSAS können Sie MTOM auch auf dieser Ebene verwalten, wie in Abbildung 4 dargestellt. Beachten Sie, dass MTOM auf jeder Ebene drei mögliche Werte hat: true, false und optional. Wenn die Eigenschaft auf true gesetzt ist, sendet der Dienst bei Bedarf eine optimierte Nachricht, d. h. wenn Binärdaten enthalten sind. Wenn der Wert auf false gesetzt ist, wird die Optimierung niemals verwendet und die Base 64-Codierung wird für alle Binärdaten verwendet. Wenn es auf optional eingestellt ist, dann wird WSAS optimieren, wenn und nur wenn die Anfrage eingegangen wurde optimiert wurde. Die Art der Anfrage zeigt WSAS an, wenn es MTOM verwenden soll oder nicht. Warum brauchen wir diese Art von Flexibilität Wie bereits erwähnt, ist es oft vorteilhaft, Base 64-Codierung auf kleinen Dateien zu verwenden. So könntest du entscheiden, dass bestimmte Operationen MTOM verwenden sollten und andere nicht. Oder Sie können es bei einer Operation optional machen, programmgesteuert eine Überprüfung für die Größe der gesendeten Daten durchführen und dann die Standard-MTOM überschreiben, wenn die Datei klein ist. Dann schickst du MTOM. Lassen Sie uns einen Blick darauf werfen, wie einfach WSAS es macht, eine MTOM-Nachricht von einem Web-Service-Client zu senden. Erstellen eines SOAP-Clients, der MTOM-Nachrichten sendet Das Senden einer MTOM-Nachricht von einem Client ist genauso einfach wie das Senden einer MTOM-Nachricht von einem Webdienst. Axis2 bietet mehrere komfortable APIs. Ein Beispiel wird in Listing 6 angezeigt. Listing 6. Client-Code für das Senden der MTOM-Nachricht Wie Sie in Listing 6 sehen können, ist es wichtig, MTOM in Optionen für den Web Service Client zu aktivieren. Sobald Sie das tun, dann Axis2 optimiert alle Binärdaten, die Sie an den Web-Service mit MTOM automatisch senden. Weve gesehen, wie man MTOM-Nachrichten von einem Web-Service und einem Web-Service zu senden, jetzt können wir sehen, wie man mit Daten, die mit MTOM gesendet wurde zu arbeiten. Umgang mit einer MTOM-Nachricht in einem Web Service Jetzt können Sie davon ausgehen, dass Sie einen Webdienst haben, der binäre Daten als Teil einer SOAP-Nachricht von einem Client akzeptiert. Wenn Ihr Web-Service auf WSAS läuft, müssen Sie nichts Besonderes tun, um in der Lage zu sein, optimierte Binärdaten von Ihren Kunden zu behandeln. Ihre Clients können SOAP-Nachrichten senden, die MTOM - oder Base 64-Codierung verwenden. Es ist alles nahtlos mit WSAS. Listing 7 zeigt ein Beispiel für das Empfangen von optimierten Daten. Listing 7. Web Service Empfangen von optimiertem SOAP Wie wir schon früher gesehen haben, behandelt die Axiom API die Binärdaten als Textknoten. Dies ermöglicht eine einzige API für den Umgang mit optimierten und nicht optimierten (Base 64 codierten) Daten. Sie greifen einfach auf den DataHandler zu, der dem Textknoten zugeordnet ist (der die Binärdaten enthält) und verwenden Sie diese, um einen InputStream zu erhalten. Sobald Sie die InputStream haben, können Sie alle Bytes lesen und verarbeiten, aber Sie müssen. WSAS macht es einfach, SOAP-Nachrichten mit optimierten Binärdaten-Nutzlasten zu verarbeiten. Lassen Sie uns einen Blick darauf werfen, wie einfach es ist, mit MTOM auf Kunden zu arbeiten. Umgang mit einer MTOM-Nachricht in einem Client Theres keine Magie zur Handhabung einer MTOM-Web-Service-Antwort. Weve schon gesehen, wie man die Anfrage einrichtet. In Abbildung 8 sehen Sie, wie man mit einer Antwort umgehen kann, die binäre Daten enthält, die mit MTOM optimiert sind. Der Schlüssel hier ist die Verwendung der Axiom API. Es lässt uns die Binärdaten als Textknoten behandeln und dann den DataHandler verwenden, um ein InputStream zu den Daten zu erhalten. Wenn du einmal den InputStream hast, kannst du die Daten aber auch verarbeiten Weve gesehen, wie MTOM die perfekte Kombination von SOAP-Standardisierung und Effizienz für den Transport von binären Daten innerhalb einer Web-Service-Nachricht bietet. Weve gesehen, wie WSO2 WSAS die MTOM-Spezifikation mit Axis2 implementiert. Weve hat einen Blick darauf gelegt, wie man sowohl Web-Service-Server als auch Clients eingerichtet hat, um MTOM-optimierte Nachrichten zu senden und zu empfangen. Jetzt haben wir alles, was wir für das Hinzufügen von binären Daten zu unseren Web Services mit WSO2 WSAS benötigen. Du willst WSO2 WSAS herunterladen. Lesen Sie mehr über die neuesten Funktionen von WSO2 WSAS 2.0. Erlernen Sie und interagieren Sie mit der WSO2-Community im WSAS Wiki. Erfahren Sie mehr über die Bereitstellung Ihrer Dienste als Web-Services mit Axis2. Erfahren Sie, wie Axis2 Ihre SOA-Designs im DeveloperWorks Artikel SOA mit Axis2 aktivieren kann. Erfahren Sie alles über Axis Interoperabilität mit anderen Web Service Implementierungen in diesem Eintrag im TSS Interoperability Blog. Tauchen Sie in die AXIOM API in den EntwicklerWorks Artikel Holen Sie das Beste aus der XML-Verarbeitung mit AXIOM. Lesen Sie alles über XOP und MTOM in diesem Blog-Eintrag von Mark Nottingham. Interoperabilität ist der Name des Spiels, wenn es um Web-Service geht, also lernen Sie über die Verwendung von MTOM mit in dem Artikel Senden von Dateien in Chunks mit MTOM Web Services und 2.0. Über den Autor Michael Galpin ist ein Architekt bei eBay in San Jose, CA. Seit 1998 entwickelt er Software und hat einen Abschluss in Mathematik vom California Institute of Technology.

No comments:

Post a Comment