1. Vad är SAAJ?
SAAJ (SOAP with Attachments API for Java) är en specifikation för ett Java-API med vilket man kan mappa Java-objekt till SOAP-meddelanden som skickas (som XML) över internet. De klasser som används ligger i paktet javax.xml.soap. Det finns i dagsläget följande SAAJ-specifikationer:
- SAAJ 1.1: Denna specifikation kom ut Juni 2002 och finns på
java.sun.com/xml/downloads/ . Denna specifikation lyftes ur JAXM 1.0 eftersom man tyckte att den behövde en egen linje.
- SAAJ 1.2: När man försöker ladda ner denna specifikation på SUNs hemsida är den satt till att peka på SAAJ 1.3. Så får man väl inte göra?. SAAJ 1.2 är viktig eftersom det är den som finns i Java EE 1.4-specifikationen.
- SAAJ 1.3: Denna specifikation kom ut Juli 2005 och finns på
java.sun.com/xml/downloads/saaj.html .
Den viktigaste användningen av SAAJ 1.2 är att JAX-RPC 1.1 använder den för att skicka SOAP-meddelanden. Men man kan även använda SAAJ direkt för att bygga applikationer som pratar över SOAP. På så sätt behövs ingen WSDL-fil och JAX-RPC används inte.
- SAAJ Project: För den som vill veta mer om SAAJ kan man surfa till
saaj.dev.java.net . Detta är hemsidan för Glassfish-projektets SAAJ-implementation.
2. Översikt över klasserna
Bilden nedan visar de viktigaste klasserna:
Bilden ovan illustrerar hur "SOAPMessage" motsvarar ett SOAP-meddelande. "SOAPMessage" består av följande underobjekt:
- SOAPPart: är den del som innehåller själva SOAP-meddelandet. SOAPMessage måste innehålla exakt ett av detta objekt.
- AttachmentPart: motsvarar eventuella bilagor till meddelandet. En bilaga består av ett "MimeHeaders"-objekt och ett "Content"-objekt. "Content"-objektet kan innehålla vilken typ av data som helst, vanligast är dock binär data som lagras som en array av bytes.
Eftersom vi är mest intresserade av SOAP-meddelandet kommer vi att koncentrera oss på "SOAPPart". "SOAPPart" måste innehålla exakt 1 "SOAPEnvelope"-objekt, som består av:
- SOAPBody: innehåller SOAP-meddelandets Body-element. Det måste finnas exakt 1 sådan objekt. "SOAPBody"-objektet kan innehålla "SOAPBodyElement"-objekt som representerar underelement för Body-elementet.
- SOAPHeader: innehåller SOAP-meddelandets Header-element. Det kan finnas 0 eller 1 av detta objekt, beroende på om meddelandet har en Header eller ej. "SOAPHeader"-objektet kan innehålla "SOAPHeaderElement"-objekt som representerar underelement för Header-elementet.
"SOAPBody" kan innehålla ett "SOAPFault"-objekt, men då måste "SOAPFault" vara det enda "SOAPBodyElement"-objekt som finnas för "SOAPBody".