java client code to send a SOAP request and read response from a WSDL url.

A SOAP webservice hosted on a server,
I know wsdl url and what tags to set in request.

Requirement:
 1) I want to set some fields(tags) of soap request.
  2) send the request
3) read the response.
Please point me to the java code to implement the above.

Thanks in Advance
srinivasp19Asked:
Who is Participating?
 
tom_sebastianConnect With a Mentor Commented:
You can use spring-ws to do this task. You need jars for spring, spring-ws, axiom-api, axiom-impl etc..
Here is a working code using simple hardcoded xml request and prints the response xml. You can use marshaller for JaxB objects instead of plain xml string

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;

import javax.xml.transform.Result;
import javax.xml.transform.Source;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;

import org.springframework.ws.client.core.WebServiceTemplate;

public class WebServiceTest {

      /**
       * @param args
       */
      public static void main(String[] args) {
            System.err.println("Test");
            try {
                  String result = processRequest("test1","test2","test3");
                  System.err.println(result);
            } catch (Exception e) {
                  e.printStackTrace();
            }
     

      }

      public static String processRequest(String... parameters) throws Exception {
            WebServiceTemplate webService = new WebServiceTemplate();
            webService.setDefaultUri("<your endpoint url>");
            StringBuffer requestStr = new StringBuffer();
            requestStr.append("<YourRequest>");
            requestStr.append("<Field1>"+parameters[0]+"</Field1>");
            requestStr.append("<Field2>"+parameters[1]+"</Field2>");
            requestStr.append("<Field3>"+parameters[2]+"</Field3>");
            requestStr.append("</YourRequest>");
 
            Source requestPayload = new StreamSource(new ByteArrayInputStream(requestStr.toString().getBytes()));
            ByteArrayOutputStream bos = new ByteArrayOutputStream();
            Result responseResult = new StreamResult(bos);
            webService.sendSourceAndReceiveToResult(requestPayload, responseResult);
            return bos.toString();
      }

}

0
 
srinivasp19Author Commented:
Hi  tom_sebastian,

Thank you for the reply.

I forgot to mention that the wsdl url is https.
How to add username and password for authentication in the SOAP request?.

I Prefer the Java code :
which takes WSDL URL with authentication as input  and get SOAP request xml, (similar to SOAPUI tool)
with the SOAP request xml object , I should set the required tag(paramenter of exposed service)  and  send request.

Thanks in advance.



 
0
 
tom_sebastianCommented:
Set the username/password in the message sender, then add it to the soap header too
here is a sample code:

//Set the username/password in the message sender
WebServiceTemplate webService = new WebServiceTemplate();
UsernamePasswordCredentials credentials = new UsernamePasswordCredentials("<username>","<password>");
CommonsHttpMessageSender msgSender = new CommonsHttpMessageSender();
msgSender.setCredentials(credentials);
webService.setMessageSender(msgSender);

......
.......

//add it to the soap header
webService.sendSourceAndReceiveToResult(requestPayload, new WSSEHeaderWebServiceMessageCallback("<username>","<password>"), responseResult);
0
 
charlatanOfBelleCommented:
you can also Eclipse's webservice client wizard, just specify the wsdl and it does the rest, it auto-geneterates the interface/proxy that you will need to instantiate. For example it will generate a ServiceProxy which would contain the methods that the webservice host has exposed. Another helpful option when you use this, you can opt to generate sample jsp files that you can deploy and will show you how the ServicePRoxy is used. I've used this 3 times already in my career, the last one is for integration with Salesforce.

btw, It uses axis behind the scenes.

http://www.eclipse.org/webtools/community/tutorials/BottomUpAxis2WebService/bu_tutorial.html
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.