diff --git a/web-modules/jakarta-ee/src/main/java/com/baeldung/stringtosoapmessage/StringToSOAPMsg.java b/web-modules/jakarta-ee/src/main/java/com/baeldung/stringtosoapmessage/StringToSOAPMsg.java new file mode 100644 index 000000000000..60d827966f46 --- /dev/null +++ b/web-modules/jakarta-ee/src/main/java/com/baeldung/stringtosoapmessage/StringToSOAPMsg.java @@ -0,0 +1,36 @@ +package com.baeldung.stringtosoapmessage; + +import java.io.ByteArrayInputStream; +import java.nio.charset.StandardCharsets; + +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.transform.dom.DOMSource; + +import org.w3c.dom.Document; + +import jakarta.xml.soap.MessageFactory; +import jakarta.xml.soap.SOAPMessage; +import jakarta.xml.soap.SOAPPart; + +public class StringToSOAPMsg { + + public static SOAPMessage usingSAAJMessageFactory(String soapXml) throws Exception { + ByteArrayInputStream input = new ByteArrayInputStream(soapXml.getBytes(StandardCharsets.UTF_8)); + MessageFactory factory = MessageFactory.newInstance(); + return factory.createMessage(null, input); + } + + public static SOAPMessage usingDOMParsing(String soapXml) throws Exception { + DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); + dbf.setNamespaceAware(true); + DocumentBuilder db = dbf.newDocumentBuilder(); + Document doc = db.parse(new ByteArrayInputStream(soapXml.getBytes(StandardCharsets.UTF_8))); + MessageFactory factory = MessageFactory.newInstance(); + SOAPMessage message = factory.createMessage(); + SOAPPart part = message.getSOAPPart(); + part.setContent(new DOMSource(doc.getDocumentElement())); + message.saveChanges(); + return message; + } +} diff --git a/web-modules/jakarta-ee/src/test/java/com/baeldung/stringtosoapmessage/StringToSOAPMsgUnitTest.java b/web-modules/jakarta-ee/src/test/java/com/baeldung/stringtosoapmessage/StringToSOAPMsgUnitTest.java new file mode 100644 index 000000000000..fe037b78b458 --- /dev/null +++ b/web-modules/jakarta-ee/src/test/java/com/baeldung/stringtosoapmessage/StringToSOAPMsgUnitTest.java @@ -0,0 +1,41 @@ +package com.baeldung.stringtosoapmessage; + +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import org.junit.jupiter.api.Test; + +import jakarta.xml.soap.SOAPBody; +import jakarta.xml.soap.SOAPMessage; + +public class StringToSOAPMsgUnitTest { + private final String sampleSoapXml = "" + + "" + + "" + + "" + + "" + + "GOOG" + + "" + + "" + + ""; + + @Test + public void givenSOAPString_whenUsingSAAJMessageFactory_thenReturnSOAPMessage() throws Exception { + SOAPMessage message = StringToSOAPMsg.usingSAAJMessageFactory(sampleSoapXml); + SOAPBody body = message.getSOAPBody(); + + assertNotNull(message, "SOAPMessage should not be null"); + assertNotNull(body, "SOAP Body should not be null"); + assertTrue(body.getTextContent().contains("GOOG"), "Expected 'GOOG' not found in the SOAP body"); + } + + @Test + public void givenSOAPString_whenUsingDOMParsing_thenReturnSOAPMessage() throws Exception { + SOAPMessage message = StringToSOAPMsg.usingDOMParsing(sampleSoapXml); + SOAPBody body = message.getSOAPBody(); + + assertNotNull(message, "SOAPMessage should not be null"); + assertNotNull(body, "SOAP Body should not be null"); + assertTrue(body.getTextContent().contains("GOOG"), "Expected 'GOOG' not found in the SOAP body"); + } +}