# javax.xml.soap

***

**1. Creating a SOAP Message**

```java
import javax.xml.soap.*;
import javax.xml.parsers.*;

public class CreateSoapMessage {

    public static void main(String[] args) throws Exception {
        SOAPFactory soapFactory = SOAPFactory.newInstance();
        SOAPMessage soapMessage = soapFactory.createMessage();
        SOAPPart soapPart = soapMessage.getSOAPPart();
        SOAPEnvelope soapEnvelope = soapPart.getEnvelope();
        soapEnvelope.addNamespaceDeclaration("soap", "http://schemas.xmlsoap.org/soap/envelope/");

        SOAPHeader soapHeader = soapEnvelope.getHeader();
        SOAPElement soapHeaderElement = soapHeader.addHeaderElement(soapFactory.createName("To", "soap", "http://schemas.xmlsoap.org/soap/envelope/"));
        soapHeaderElement.addTextNode("receiver@example.com");

        SOAPBody soapBody = soapEnvelope.getBody();
        SOAPElement soapBodyElement = soapBody.addBodyElement(soapFactory.createName("Body", "soap", "http://schemas.xmlsoap.org/soap/envelope/"));
        soapBodyElement.addTextNode("This is the body of the SOAP message.");

        soapMessage.saveChanges();
    }
}
```

**2. Parsing a SOAP Message**

```java
import javax.xml.soap.*;
import javax.xml.parsers.*;

public class ParseSoapMessage {

    public static void main(String[] args) throws Exception {
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        dbf.setNamespaceAware(true);
        DocumentBuilder db = dbf.newDocumentBuilder();
        Document doc = db.parse("mySoapMessage.xml");

        SOAPMessage soapMessage = MessageFactory.newInstance().createMessage(new SOAPPart(doc));
        SOAPEnvelope soapEnvelope = soapMessage.getSOAPPart().getEnvelope();
        SOAPBody soapBody = soapEnvelope.getBody();

        NodeList bodyNodes = soapBody.getChildNodes();
        for (int i = 0; i < bodyNodes.getLength(); i++) {
            Node bodyNode = bodyNodes.item(i);
            if (bodyNode instanceof SOAPElement) {
                SOAPElement bodyElement = (SOAPElement) bodyNode;
                System.out.println(bodyElement.getTextContent());
            }
        }
    }
}
```

**3. Sending a SOAP Message**

```java
import javax.xml.soap.*;
import javax.xml.messaging.*;

public class SendSoapMessage {

    public static void main(String[] args) throws Exception {
        SOAPMessage soapMessage = createSoapMessage();

        SOAPConnectionFactory soapConnectionFactory = SOAPConnectionFactory.newInstance();
        SOAPConnection soapConnection = soapConnectionFactory.createConnection();

        EndpointConnection endpointConnection = soapConnection.createEndpointConnection("http://example.com/soap");
        SOAPMessage response = endpointConnection.call(soapMessage, "http://example.com/soap/action");
        soapConnection.close();

        SOAPBody responseBody = response.getSOAPPart().getEnvelope().getBody();
        System.out.println(responseBody.getTextContent());
    }

    private static SOAPMessage createSoapMessage() throws Exception {
        SOAPFactory soapFactory = SOAPFactory.newInstance();
        SOAPMessage soapMessage = soapFactory.createMessage();
        SOAPPart soapPart = soapMessage.getSOAPPart();
        SOAPEnvelope soapEnvelope = soapPart.getEnvelope();
        soapEnvelope.addNamespaceDeclaration("soap", "http://schemas.xmlsoap.org/soap/envelope/");

        SOAPHeader soapHeader = soapEnvelope.getHeader();
        SOAPElement soapHeaderElement = soapHeader.addHeaderElement(soapFactory.createName("To", "soap", "http://schemas.xmlsoap.org/soap/envelope/"));
        soapHeaderElement.addTextNode("receiver@example.com");

        SOAPBody soapBody = soapEnvelope.getBody();
        SOAPElement soapBodyElement = soapBody.addBodyElement(soapFactory.createName("Body", "soap", "http://schemas.xmlsoap.org/soap/envelope/"));
        soapBodyElement.addTextNode("This is the body of the SOAP message.");

        soapMessage.saveChanges();
        return soapMessage;
    }
}
```

**4. Receiving a SOAP Message**

```java
import javax.xml.soap.*;
import javax.xml.messaging.*;

public class ReceiveSoapMessage {

    public static void main(String[] args) throws Exception {
        SOAPConnectionFactory soapConnectionFactory = SOAPConnectionFactory.newInstance();
        SOAPConnection soapConnection = soapConnectionFactory.createConnection();

        EndpointConnection endpointConnection = soapConnection.createEndpointConnection("http://example.com/soap");
        SOAPMessage soapMessage = endpointConnection.receive();
        soapConnection.close();

        SOAPBody soapBody = soapMessage.getSOAPPart().getEnvelope().getBody();
        System.out.println(soapBody.getTextContent());
    }
}
```

**5. Handling SOAP Faults**

```java
import javax.xml.soap.*;

public class HandleSoapFaults {

    public static void main(String[] args) throws Exception {
        SOAPMessage soapMessage = parseSoapMessage("mySoapMessage.xml");

        if (soapMessage.getSOAPBody().hasFault()) {
            SOAPFault soapFault = soapMessage.getSOAPBody().getFault();
            System.out.println(soapFault.getFaultCode());
            System.out.println(soapFault.getFaultString());
        } else {
            SOAPBody soapBody = soapMessage.getSOAPPart().getEnvelope().getBody();
            System.out.println(soapBody.getTextContent());
        }
    }

    private static SOAPMessage parseSoapMessage(String soapMessageFile) throws Exception {
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        dbf.setNamespaceAware(true);
        DocumentBuilder db = dbf.newDocumentBuilder();
        Document doc = db.parse(soapMessageFile);

        SOAPMessage soapMessage = MessageFactory.newInstance().createMessage(new SOAPPart(doc));
        return soapMessage;
    }
}
```

**6. Using SOAP Headers**

```java
import javax.xml.soap.*;

public class UseSoapHeaders {

    public static void main(String[] args) throws Exception {
        SOAPMessage soapMessage = createSoapMessage();

        SOAPHeader soapHeader = soapMessage.getSOAPPart().getEnvelope().getHeader();
        SOAPElement soapHeaderElement = soapHeader.addHeaderElement(SOAPFactory.newInstance().createName("MyHeader", "my", "http://example.com/soap/headers"));
        soapHeaderElement.addTextNode("My Header Value");

        soapMessage.saveChanges();
    }

    private static SOAPMessage createSoapMessage() throws Exception {
        SOAPFactory soapFactory = SOAPFactory.newInstance();
        SOAPMessage soapMessage = soapFactory.createMessage();
        SOAPPart soapPart = soapMessage.getSOAPPart();
        SOAPEnvelope soapEnvelope = soapPart.getEnvelope();
        soapEnvelope.addNamespaceDeclaration("soap", "http://schemas.xmlsoap.org/soap/envelope/");

        SOAPBody soapBody = soapEnvelope.getBody();
        SOAPElement soapBodyElement = soapBody.addBodyElement(soapFactory.createName("Body", "soap", "http://schemas.xmlsoap.org/soap/envelope/"));
        soapBodyElement.addTextNode("This is the body of the SOAP message.");

        return soapMessage;
    }
}
```

**7. Using SOAP Attachments**

```java
import javax.xml.soap.*;
import javax.activation.*;

public class UseSoapAttachments {

    public static void main(String[] args) throws Exception {
        SOAPMessage soapMessage = createSoapMessage();

        AttachmentPart attachmentPart = new AttachmentPart("myAttachment", new FileDataSource("myAttachment.txt"));
        soapMessage.addAttachment(attachmentPart);

        soapMessage.saveChanges();
    }

    private static SOAPMessage createSoapMessage() throws Exception {
        SOAPFactory soapFactory = SOAPFactory.newInstance();
        SOAPMessage soapMessage = soapFactory.createMessage();
        SOAPPart soapPart = soapMessage.getSOAPPart();
        SOAPEnvelope soapEnvelope = soapPart.getEnvelope();
        soapEnvelope.addNamespaceDeclaration("soap", "http://schemas.xmlsoap.org/soap/envelope/");

        SOAPBody soapBody = soapEnvelope.getBody();
        SOAPElement soapBodyElement = soapBody.addBodyElement(soapFactory.createName("Body", "soap", "http://schemas.xmlsoap.org/soap/envelope/"));
        soapBodyElement.addTextNode("This is the body of the SOAP message.");

        return soapMessage;
    }
}
```

**8. Using SOAP Callbacks**

```java
import javax.xml.soap.*;
import javax.xml.messaging.*;

public class UseSoapCallbacks {

    public static void main(String[] args) throws Exception {
        SOAPConnectionFactory soapConnectionFactory = SOAPConnectionFactory.newInstance();
        SOAPConnection soapConnection = soapConnectionFactory.createConnection();

        EndpointConnection endpointConnection = soapConnection.createEndpointConnection("http://example.com/soap");
        SOAPMessage soapMessage = endpointConnection.call(createSoapMessage(), "http://example.com/soap/action", new SOAPCallbackHandler() {

            @Override
            public void onMessage(SOAPMessage soapMessage) {
                System.out.println("Received a SOAP message:");
                System.out.println(soapMessage.getTextContent());
            }

            @Override
            public void onError(SOAPFault soapFault) {
                System.out.println("Received a SOAP fault:");
                System.out.println(soapFault.getFaultCode());
                System.out.println(soapFault.getFaultString());
            }
        });

        soapConnection.close();
    }

    private static SOAPMessage createSoapMessage() throws Exception {
        SOAPFactory soapFactory = SOAPFactory.newInstance();
        SOAPMessage soapMessage = soapFactory.createMessage();
        SOAPPart soapPart = soapMessage.getSOAPPart();
        SOAPEnvelope soapEnvelope = soapPart.getEnvelope();
        soapEnvelope.addNamespaceDeclaration("soap", "http://schemas.xmlsoap.org/soap/envelope/");

        SOAPBody soapBody = soapEnvelope.getBody();
        SOAPElement soapBodyElement = soapBody.addBodyElement(soapFactory.createName("Body", "soap", "http://schemas.xmlsoap.org/soap/envelope/"));
        soapBodyElement.addTextNode("This is the body of the SOAP message.");

        return soapMessage;
    }

```
