Als Erstes muss mithilfe eines MessageFactory-Objekts eine Nachricht erstellt werden. Die SAAJ-API bietet eine Standard-Implementierung der MessageFactory-Klasse, so dass problemlos eine Instanz erzeugt werden kann. Wenn man keine Argumente für die newInstance-Methode festlegt, erstellt diese eine Message-Factory für SOAP-1.1-Nachrichten. Um eine Message-Factory zu erstellen, die das Verarbeiten von SOAP-1.2-Nachrichten ermöglicht, wird der folgenden Methoden-Aufruf eingegeben:
MessageFactory factory = MessageFactory.newInstance (SOAPConstants.SOAP_1_2_PROTOCOL); SOAPMessage message = factory.createMessage();
Ruft man createMessage ohne Argumente auf, umfasst die automatisch erstellte Nachricht folgende Bestandteile: ein SOAPPart-Objekt, das ein SOAPEnvelope-Objekt enthält, welches wiederum ein leeres SOAPHeader-Objekt und ein leeres SOAPBody-Objekt aufweist.
Das SOAPHeader-Objekt ist optional, und man kann es löschen, wenn es nicht benötigt wird. Soll es beibehalten werden, muss es vor dem SOAPBody-Objekt stehen. Das SOAPBody-Objekt kann entweder den Inhalt der Nachricht enthalten oder eine Fehlermeldung, die Statusinformationen oder Details über ein Problem mit der Nachricht liefert.
Der nächste Schritt beim Erstellen einer Nachricht besteht im Zugriff auf ihre Teile, um Inhalte hinzufügen zu können:
SOAPHeader header = message.getSOAPHeader(); SOAPBody body = message.getSOAPBody();
Um Inhalte zum Textkörper hinzuzufügen, erstellt man normalerweise ein oder mehrere SOAPBodyElement-Objekte zur Aufnahme des Inhalts. Es lassen sich Unterelemente zu den SOAPBodyElement-Objekten erstellen, indem man die addChildElement-Methode benutzt. Für jedes Element oder Kind-Element werden dann Inhalte mithilfe der addTextNode-Methode hinzugefügt. Für jedes neue Element muss zur eindeutigen Identifizierung ein zugeordnetes javax.xml.namespace.QName-Objekt erstellt werden. QName-Objekte, die SOAPBodyElement– oder SOAPHeaderElement-Objekten zugeordnet werden, müssen voll qualifiziert sein.
Der folgende Code-Ausschnitt fragt den Textkörper des SOAPBody-Objekts aus der Nachricht ab, erstellt ein QName-Objekt für das zusätzliche Element und fügt ein neues SOAPBodyElement-Objekt zum Körper hinzu:
Um das neue Element mit Inhalten zu füllen, muss mittels der Methode addChildElement ein Kind-Element erstellt werden. Anschließend füllt man das Element mittels der Methode addTextNode mit Text. Der gesamte Vorgang wird wie das Erstellen von DOM-Dokumenten ausgeführt, was den Rahmen dieses Artikels allerdings sprengen würde. Weitere Informationen über das Erstellen von DOM-Dokumenten findet man bei den Java-XML-APIs (JAXP, JAX-RPC, JAXM und so weiter).
Ein AttachmentPart-Objekt kann jeden Inhaltstyp enthalten, auch XML. Da der SOAP-Teil nur XML enthalten darf, muss man also ein AttachmentPart-Objekt für jegliche Inhalte verwenden, die nicht im XML-Format vorliegen. Inhalte lassen sich mithilfe der AttachmentPart-Methode setContent dem Anhang hinzufügen. Diese Methode benötigt zwei Parameter: ein Java-Objekt für den Inhalt und ein String-Objekt für den MIME-Inhaltstyp, der zur Codierung des Objekts benutzt wird.
Inhalte im SOAPBody-Teil der Nachricht besitzen automatisch einen Content-Type-Header mit dem Wert „text/xml“, da der Inhalt in XML sein muss. Dagegen muss der Inhaltstyp in einem AttachmentPart-Objekt angegeben werden, da ja jeder Typ möglich ist. Weitere Informationen über das Erstellen komplexerer Anhänge, etwa mit Binärdaten, finden sich unter SAAJ API JavaDocs.
Neueste Kommentare
Noch keine Kommentare zu Online XML-Dokumente versenden: Mit SAAJ klappt es
Kommentar hinzufügenVielen Dank für Ihren Kommentar.
Ihr Kommentar wurde gespeichert und wartet auf Moderation.