Java – standalone java webservice client

javasoapweb serviceswsdl

I am new to webservices in general. I am trying to write a Java stand-alone client which can get a response back from a webservice.

I tried searching SO and Google but now I got more confused. The below are the links I went through extensively.

I have a url like: http://api.something.com/remote/wsdl/SomeEncryptedText

I also have a SOAP request something like:

<?xml version="1.0" encoding="utf-8"?> 
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope"> 
<soap12:Body> 
<AuthUsername>someName@someWhere.com</AuthUsername> 
<AuthPassword>mypassword</AuthPassword> 
<Sid>12121</Sid> 
<DynamicProductFeedsRequest xmlns="http://api.something.com/remote/SomeEncryptedText"> 
</DynamicProductFeedsRequest> 
</soap12:Body> 
</soap12:Envelope> 

With this how do I write a stand-alone Java client which I would want to integrate with some web application at a later stage?

From the resources mentioned earlier looks there is a wide choice of softwares: SoapUI, WSDL2Java, Apache Axis, Maven Plugin, JAX-WS, Apache CXF.

I used http://www.soapclient.com/soaptest.html in one of the SO answers mentioned above and I am able to get a perfect html/xml file on the browser.

Now I am confused on which is the software I should use? The information in the links are little in bits and pieces which I am unable to correlate with one another since I do not know anything in SOA.

Could anyone please tell me the high level steps in writing a stand-alone Java client which takes in the WSDL URL and SOAP request and gives me the output of it?

Please let me know if I missed any information.

Best Answer

This question all depends on the following:

  • The JDK version of your Java compiler.
  • Your WSDL version (there's 1.0, 1.2 and 2.0).

Basically, if you are using Java annotations to generate web services, then you'll need Java 5 related Web Services libraries (which supports annotations).

Some articles on Using Java Web Services with annotations (JAX-WS):

I'll start from generating Web Service client with Java that doesn't support annotations. The well known client that generates WSDL to Java is Apache Axis (the last version is 1.4 released in 22 April 2006). This basically takes a WSDL definition and generates it back to client. It supports the old version of WSDL (1.0) and crashes if you use the newer versions of WSDL (1.2 and 2.0).

What this basically does, it takes your WSDL and generates a java Proxy that communicates to your Web Service. It can allow RPC based as well as XML based communication.

For Java that supports annotations there are, effectively, 2 ways of doing this:

  • Using Java's own wsimport command (the executable is found under the JDK_HOME/bin/ folder).
  • Using 3rd Party libaries such as Apache Axis 2 (which effectively replaces Apache Axis and supports WSDL version 2.0) or Apache CXF (which supports WSDL up to 1.2).

To use wsimport, you basically need to go to a shell command (or write a script) and effectively do something of this effect:

wsimport -d [outputdir] wsdl_file

and your java proxy will be found in the [outputdir] folder.

wsimport is found in JDK 1.6 (I don't know if it exists in earlier versions). More source here, and here.

For Apache Axis, Apache Axis 2 or Apache CXF, there's a WSDL2Java class file that does source code generation.

Here's a guide on how to use WSDL2Java in Apache CXF and in Apache Axis 2.

I hope this helps you in some way as much as I spent like 30 minutes off work doing this. :-)