Schnittstelle SAAJ (SOAP with Attachments API for Java)
Die Schnittstelle SOAP with Attachments API for Java™ (SAAJ) wird für SOAP-Messaging verwendet und unterstützt eine standardisierte Methode, um von einem Java-Programmiermodell XML-Dokumente über das Internet zu senden. SAAJ wird verwendet, um die SOAP-Nachricht während der Übertragung in der Laufzeitumgebung für den entsprechenden Kontext zu ändern.
Das Programmiermodell Java API for XML-Based RPC (JAX-RPC) unterstützt SAAJ 1.2 für die Bearbeitung der XML.
Das Programmiermodell JAX-WS unterstützt SAAJ 1.2 und 1.3. SAAJ 1.3 beinhaltet die Unterstützung für SOAP-1.2-Nachrichten.
Die Unterschiede zwischen den Spezifikationen SAAJ 1.2 und SAAJ 1.3 sind im Artikel "Unterschiede zwischen den SAAJ-Versionen" beschrieben.
Verwendung von Nachrichten in Web-Services
Web-Services verwenden für den Nachrichtenaustausch die XML-Technologie. Diese Nachrichten entsprechen dem XML-Schema. Bei der Entwicklung von Web-Service-Anwendungen ist nur eine begrenzte Anzahl von XML-APIs für die Arbeit vorhanden, z. B. Document Object Model (DOM). Es ist effizienter, die Java-Objekte zu bearbeiten und die Serialisierung und Entserialisierung während der Laufzeit ausführen zu lassen.
Web-Services verwenden SOAP-Nachrichten, um die Fernprozeduraufrufe zwischen Client und Server darzustellen. Gewöhnlich wird die SOAP-Nachricht in eine Reihe von Java-ValueType-Geschäftsobjekten entserialisiert, die die Parameter und Rückgabewerte darstellen. Daneben stellt das Java -Programmiermodell APIs bereit, die die direkte Bearbeitung der SOAP-Nachricht durch Anwendungen und Handler unterstützen. Weil nur eine begrenzte Anzahl von XML-Schematypen von den Programmiermodellen unterstützt werden, stellt die Spezifikation das SAAJ-Datenmodell als Erweiterung für die Bearbeitung der Nachricht bereit.
Damit Sie die XML-Schematypen bearbeiten können, müssen Sie die XML-Schematypen mit einem angepassten Datenbinder Java-Typen zuordnen.
SAAJ-Schnittstelle
Die SAAJ-bezogenen Klassen sind im Paket "javax.xml.soap" enthalten. SAAJ stützt sich auf die Schnittstellen und abstrakten Klassen. Viele Klassen beginnen mit dem Aufruf von Factory-Methoden, um eine Factory, wie z. B. SOAPConnectionFactory und SOAPFactory, zu erstellen.

Permission:
/opt/IBM/WebSphere/AppServer/java/jre/lib/jaxm.properties : access denied
(java.io.FilePermission /opt/IBM/WebSphere/AppServer/java/jre/lib/jaxm.properties
read)
Code:
com.ibm.ws.wsfvt.test.binding.addr1.binder.AddressBinder
in {file:/opt/IBM/WebSphere/AppServer/profiles/AppSrv01/installedApps/
ahp6405Node01Cell/DataBinding.ear/address1.war/WEB-INF/lib
/addressbinder1.jar}
Stack Trace:
java.security.AccessControlException: access denied (java.io.FilePermission
/opt/IBM/WebSphere/AppServer/java/jre/lib/jaxm.properties read)
.
Die SOAPFactory ignoriert die Ausnahme und fährt mit der nächsten Methode zur Feststellung der zu ladenden Implementierung fort. Daher können Sie den Protokolleintrag für diese Sicherheitsausnahme ignorieren.
Da dieses Produkt die SOAPFactory verwendet, um andere Web-Service-Technologien, wie z. B. WS-Addressing (WS-A), WS-Atomic Transaction (WS-AT) und WS-Notification, zu unterstützen, können Sie diese SecurityException in allen Web-Service-Anwendungen, in denen die Java-Sicherheit aktiviert ist, ignorieren.
gotcha- SOAPMessage: Enthält die Nachricht, sowohl die XML- als auch die Nicht-XML-Abschnitte
- SOAPHeader: Stellt das XML-Element für den SOAP-Header dar
- SOAPBody: Stellt das XML-Element für den SOAP-Hauptteil dar
- SOAPElement: Stellt die anderen Elemente in der SOAP-Nachricht dar
- MessageContext: Enthält eine SOAP-Nachricht und zugehörige Eigenschaften.
- AttachmentPart: Stellt einen binären Anhang dar.
- SOAPPart: Stellt einen XML-Abschnitt der Nachricht dar.
- SOAPEnvelope: Stellt das XML-Element für die SOAP-Rahmenanweisung (Envelope) dar.
- SOAPFault: Stellt das XML-Element für SOAP-Fehler dar.
Die primäre Schnittstelle des SAAJ-Modells ist "javax.xml.soap.SOAPElement", auch "SOAPElement" genannt. Mit diesem Modell können Anwendungen ein SAAJ-Modell mit bereits vorhandenem DOM-Code verarbeiten. Außerdem können vorhandene DOM-Objekte so leichter in SAAJ-Objekte konvertiert werden.
Nachrichten, die über die Schnittstelle SAAJ erstellt werden, folgen den SOAP-Standards. Eine SOAP-Nachricht wird im SAAJ-Modell als ein javax.xml.soap.SOAPMessage-Objekt dargestellt. Der XML-Inhalt der Nachricht wird von einem javax.xml.soap.SOAPPart-Objekt dargestellt. Jeder SOAP-Abschnitt hat ein SOAP-Envelope. Dieses Envelope wird von dem SAAJ-Objekt javax.xml.SOAPEnvelope dargestellt. Die SOAP-Spezifikation definiert verschiedene Elemente im SOAP-Envelope und SAAJ definiert Objekte für diese Elemente.
Die SOAP-Nachricht kann auch Daten enthalten, die keine XML-Daten sind. Solche Daten werden als Anlage bezeichnet. Anlagen werden von SAAJ-AttachmentPart-Objekten dargestellt, auf die das SOAPMessage-Objekt zugreifen kann.
- Der Web-Service könnte eine Verbindung zu einem anderen Web-Service herstellen. In diesem Fall wird die SOAP-Nachricht nur weitergeleitet.
- Der Web-Service könnte die Nachricht nach einem anderen Datenmodell bearbeiten, z. B. SDO (Service Data Objects). Es ist einfacher, die Nachricht von SAAJ DOM in ein anderes Datenmodell zu konvertieren.
- Ein Handler für die Validierung digitaler Signaturen könnte die Nachricht generisch bearbeiten wollen.
Möglicherweise müssen Sie noch einen Schritt weiter gehen, um Ihre XML-Schematypen zuzuordnen, weil die Schnittstelle "SOAPElement" für traditionelle Systeme nicht immer die beste Alternative darstellt. In diesem Fall könnten Sie ein generisches Programmiermodell wie Service Data Object (SDO) verwenden, das sich für datenzentrierte Anwendungen besser eignet.
Das XML-Schema kann so konfiguriert werden, dass es eine angepasste Datenbindung enthält, die das SDO oder Datenobjekt dem Java -Objekt zuordnet. Beispielsweise übergibt die Laufzeit eine ankommende SOAP-Nachricht an eine Schnittstelle "SOAPElement" und leitet sie zwecks Weiterverarbeitung an den angepassten Datenbinder weiter. Falls die ankommende Nachricht ein SDO enthält, erkennt die Laufzeit den Datenobjektcode, fragt seine Typenzuordnung ab, um einen angepassten Binder zu lokalisieren, und erstellt die Schnittstelle "SOAPElement", das den SDO-Code darstellt. Das SOAPElement wird an den SDOCustomBinder weitergegeben.
Der Prozess für die Entwicklung von Anwendungen mit SOAPElement, SDO und angepassten Bindern ist in den Informationen zu angepassten Datenbindern beschrieben.

Das vorherige Verhalten, bei dem standardmäßig ein Nullwert zurückgegeben wurde, ist mit der Spezifikation nicht kompatibel.
trnsEine vollständige Liste der unterstützten Standards und Spezifikationen finden Sie in der Dokumentation zu den Web-Service-Spezifikationen und den Anwendungsprogrammierschnittstellen.