Java junit client of WSDL webservices

In this post, I will show you how to create java client for WSDL web services.
I will Create a example of currency converter,  This is wsdl URL  for same. “currency converter

Request of “ConversionRate” method:
Response of “ConversionRate” method:


Required jar files:  “junit-*.*.*.jar” and “javax-xml-soap-*.*.*.jar” jar file add this to your project class path.

Below are the java Junit client java file for “ConversionRate” method.
Approach 1:
package com.test;

import java.io.StringWriter;
import javax.xml.namespace.QName;
import javax.xml.soap.MimeHeaders;
import javax.xml.soap.SOAPBodyElement;
import javax.xml.soap.SOAPConnectionFactory;
import javax.xml.soap.SOAPConnection;
import javax.xml.soap.MessageFactory;
import javax.xml.soap.SOAPException;
import javax.xml.soap.SOAPMessage;
import javax.xml.soap.SOAPPart;
import javax.xml.soap.SOAPEnvelope;
import javax.xml.soap.SOAPBody;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.Source;
import javax.xml.transform.stream.StreamResult;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;

public class SoapRequest1 {

 // reference variables
  private SOAPConnectionFactory soapConnectionFactory;
  private SOAPConnection soapConnection ;
  private MessageFactory messageFactory;
  private SOAPMessage soapMessage;
  private SOAPPart soapPart;
  private SOAPEnvelope soapEnvelope;
 
  @Before
  public void setUp(){
        
     try {
     //object initialization
          soapConnectionFactory = SOAPConnectionFactory.newInstance();
          soapConnection = soapConnectionFactory.createConnection();
                
          messageFactory = MessageFactory.newInstance();
          soapMessage = messageFactory.createMessage();
 
          soapPart = soapMessage.getSOAPPart();                
          soapEnvelope = soapPart.getEnvelope();
                
     } catch (UnsupportedOperationException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
     } catch (SOAPException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
     }
        
  }

  @Test
  public void testGetCityForecastByZIP() {

     try {
          soapEnvelope.addNamespaceDeclaration("web",
                 "http://www.webserviceX.NET/");

         // change header's attribute
         MimeHeaders mimeHeader = soapMessage.getMimeHeaders();
         mimeHeader.setHeader("SOAPAction",                          
                 "http://www.webserviceX.NET/ConversionRate");

         SOAPBody soapBody = soapEnvelope.getBody();
         QName bodyName = new QName("http://www.webserviceX.NET/",
                                "ConversionRate", "web");
         SOAPBodyElement bodyElement =
                    soapBody.addBodyElement(bodyName);
         QName n = new QName("http://www.webserviceX.NET/",
                   "FromCurrency","web");
         QName n1 = new QName("http://www.webserviceX.NET/",
                    “ToCurrency", "web");

         bodyElement.addChildElement(n).addTextNode("USD");
         bodyElement.addChildElement(n1).addTextNode("ALL");

         // Save message
         soapMessage.saveChanges();

         // View input
         System.out.println("Soap request:\n");
         soapMessage.writeTo(System.out);

         // Sending request
         String endUrl =
             “http://www.webservicex.com/CurrencyConvertor.asmx";
         SOAPMessage soapResponseMessage = soapConnection.
                 call(soapMessage, endUrl);

         // View the output
         System.out.println("XML response\n");

         // Create transformer
         TransformerFactory transformerFactory = TransformerFactory
                                .newInstance();
         Transformer transformer = transformerFactory.newTransformer();

         // Get reply content
          Source source = soapResponseMessage.getSOAPPart().
                 getContent();

         // Set output transformation
         StringWriter writer = new StringWriter();
         StreamResult sResult = new StreamResult(writer);
         transformer.transform(source, sResult);
         String result1 = writer.toString();
         System.out.println(result1);
         Assert.assertTrue(result1.contains("103.935"));

         // Close connection
         soapConnection.close();

     } catch (Exception e) {
          System.out.println(e.getMessage());
     }
  }
         
}


Approach 2: Create a msg file and copy request data, save file in your project as I saved Data1.msg.


Below the java client code to send request of Data1.msg 


package com.test;

import javax.xml.soap.MimeHeaders;
import javax.xml.soap.SOAPConnectionFactory;
import javax.xml.soap.SOAPConnection;
import javax.xml.soap.MessageFactory;
import javax.xml.soap.SOAPException;
import javax.xml.soap.SOAPMessage;
import javax.xml.soap.SOAPPart;
import java.io.FileInputStream;
import java.io.StringWriter;
import javax.xml.transform.stream.StreamSource;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.Source;
import javax.xml.transform.stream.StreamResult;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;

public class SoapRequest {

  private SOAPConnectionFactory soapConnectionFactory;
  private SOAPConnection soapConnection ;
  private MessageFactory messageFactory;
  private SOAPMessage soapMessage;
  private SOAPPart soapPart;
        
  @Before
  public void setUp(){
        
    try {
       //creating connection object
        soapConnectionFactory = SOAPConnectionFactory.newInstance();
        soapConnection = soapConnectionFactory.createConnection();
                
        //creating message object
        messageFactory = MessageFactory.newInstance();
        soapMessage = messageFactory.createMessage();                 
        soapPart = soapMessage.getSOAPPart();                 
                                       
     } catch (UnsupportedOperationException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
     } catch (SOAPException e) {
         // TODO Auto-generated catch block
        e.printStackTrace();
     }          
  }

  @Test
  public void testSOAPRequest() {
     try {
                
        // Object for message parts
        StreamSource prepMsg = new StreamSource(new FileInputStream("Data1.msg"));
        soapPart.setContent(prepMsg);

        // Save message
        soapMessage.saveChanges();

        //change header's attribute
        MimeHeaders mimeHeader = soapMessage.getMimeHeaders();               
        mimeHeader.setHeader("SOAPAction", "http://www.webserviceX.NET/ConversionRate");
                
        // Send request to url
        String endPoinUrl = "http://www.webservicex.com/CurrencyConvertor.asmx";
        SOAPMessage messagerequest = soapConnection.call(soapMessage, endPoinUrl);

        // response data
        Source source = messagerequest.getSOAPPart().getContent();

        // Create transformer object
        TransformerFactory transformerFactory = TransformerFactory.newInstance();
        Transformer transformer = transformerFactory.newTransformer();
                
        // set response parameter to string
        StringWriter writer = new StringWriter();
        StreamResult sResult = new StreamResult(writer);
        transformer.transform(source, sResult);
        String result1 = writer.toString();
        Assert.assertTrue(result1.contains("103.935"));
        System.out.println(result1);

        // close connection
        soapConnection.close();

     } catch (Exception e) {
        System.out.println(e.getMessage());
     }
  }
}


1 comment:

Leave your comments, queries, suggestion I will try to provide solution