Hi guys, welcome to my blog. This post contains a sample java code to send soap request with XML post body. Recently in our project, we got a different requirement that we need to send soap request using Java code. For this example demo, I am using sample request available on this website.
In this example below are the details which I am going to use.
URL - www.dneonline.com/calculator.asmx
POST Body-
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<Add xmlns="http://tempuri.org/">
<intA>1</intA>
<intB>2</intB>
</Add>
</soap:Body>
</soap:Envelope>
Headers-
Content-Type:text/xml; charset=utf-8
Content-Length:length
SOAPAction:"http://tempuri.org/Add"
Below is the Java code for sending the above request,
In this example below are the details which I am going to use.
URL - www.dneonline.com/calculator.asmx
POST Body-
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<Add xmlns="http://tempuri.org/">
<intA>1</intA>
<intB>2</intB>
</Add>
</soap:Body>
</soap:Envelope>
Headers-
Content-Type:text/xml; charset=utf-8
Content-Length:length
SOAPAction:"http://tempuri.org/Add"
Below is the Java code for sending the above request,
package com.srikanth.SoapRequestExample; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.HttpURLConnection; import java.net.URL; import java.net.URLConnection; public class SoapRequest { public static void main(String a[]){ try { int a1=3; int b=4; String requestXML="<?xml version=\"1.0\" encoding=\"utf-8\"?><soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\"><soap:Body><Add xmlns=\"http://tempuri.org/\"><intA>"+a1+"</intA><intB>"+b+"</intB></Add> </soap:Body></soap:Envelope>"; //We are creating and instance for URL class which is pointing to our specified url path URL url = new URL("http://www.dneonline.com/calculator.asmx"); //Now we are opening the url connection using the URLConnection class URLConnection connection = url.openConnection(); //Converting the connection HTTP //If you want to convert to HTTPS use HttpsURLConnection HttpURLConnection httpConn = (HttpURLConnection) connection; //Below are the statements that gives the header details for the url connection httpConn.setRequestProperty("Content-Length", "length"); httpConn.setRequestProperty("Content-Type","text/xml"); httpConn.setRequestProperty("SOAPAction","http://tempuri.org/Add"); httpConn.setRequestMethod("POST"); httpConn.setDoOutput(true); httpConn.setDoInput(true); //Sending the post body to the http connection OutputStreamWriter out=new OutputStreamWriter(httpConn.getOutputStream()); out.write(requestXML); out.close(); InputStream newIP=httpConn.getInputStream(); String temp; String tempResponse = ""; String responseXML; // Read the response and write it to standard out. InputStreamReader isr = new InputStreamReader(newIP); BufferedReader br = new BufferedReader(isr); // Create a string using response from web services while ((temp = br.readLine()) != null) { tempResponse = tempResponse + temp; } responseXML = tempResponse; System.out.println(responseXML); //this.outputResponse=responseXML; br.close(); isr.close(); } catch (java.net.MalformedURLException e) { System.out.println("Error in postRequest(): Secure Service Required"); e.printStackTrace(); } catch (Exception e) { System.out.println("Error in postRequest(): " + e.getMessage()); } } }
Most of the explanation for the above code is given in form of comments.
Note: We need to use a try-catch block to capture the exception as the URLConnection/ HttpURLConnection will throw an exception.
After successful execution, we can see the following result in the console.
Outut Response Body:
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<AddResponse
xmlns="http://tempuri.org/">
<AddResult>7</AddResult>
</AddResponse>
</soap:Body>
</soap:Envelope>