Steps in creating a web service using Axis2 - The client code

I am trying to create a web service, my tools of trade are:

**

Axis2, Eclipse, Tomcat, Ant

**

I need to create a web service from Code, i.e. Write a basic java class which will have the methods to be declared in the WSDL. Then use java2WSDL.sh to create my WSDL.

So, is this approach correct:

  1. Write my Java class with actual business logic
package packageNamel;

public class Hello{
public void World(String name)
          {
            SOP("Hello" + name);
          }
}
  1. Now, when I pass this Hello.java to java2WSDL.sh, this will give me the WSDL.
  2. Finally, I will write the services.xml file, and create the Hello.aar with following dir structure:

    Hello.aar

    • packageName
      • Hello.class
    • META-INF
      • services.xml
      • MANIFEST.MF
      • Hello.WSDL

Now, I assume, my service will be deployed when I put the aar in tomcat1/webapps/axis2/WEB-INF/services

But, here comes my problem, HOW DO I ACCESS THE METHOD World(String name)???!!, i.e. I am clueless about the client code!

Please enlighten me on making a very basic web service and calling the method. The above described 3 steps might be wrong. It's a community wiki, feel free to edit.

Thanks


Solution 1:

I'm assuming you're only interested in web service clients?

Option 1

Invoke the web service is using Axis2 REST support, for example:

http://localhost:8080/axis2/services/MyService/myOperation?param1=one&param2=two

Option 2

Use SOAPUI. It can generate SOAP messages for you, by reading your service's WSDL. My client's testers have been using it extensively with only a very broad understanding of web service technologies. An impressive tool.

Option 3

Groovy client (Same approach for other JVM based languages)

Use the wsdl2java tool to create a client stub class for the Shakespeare web service:

generate.sh:

$AXIS2_HOME/bin/wsdl2java.sh -d adb -s -o build -uri http://www.xmlme.com/WSShakespeare.asmx?WSDL
ant -file build/build.xml 

GetSpeech.groovy:

// Dependencies
// ============
import com.xmlme.webservices.ShakespeareStub

@Grapes([
    @Grab(group='org.apache.axis2', module='axis2-kernel', version='1.5.1'),
    @Grab(group='org.apache.axis2', module='axis2-adb', version='1.5.1'),
    @Grab(group='org.apache.axis2', module='axis2-transport-local', version='1.5.1'),
    @Grab(group='org.apache.axis2', module='axis2-transport-http', version='1.5.1'),
    @Grab(group='xerces', module='xercesImpl', version='2.6.2'),
    @GrabConfig(systemClassLoader=true)
])

// Main program
// ============
def stub = new ShakespeareStub()

// Request payload
def request = new ShakespeareStub.GetSpeech()
request.setRequest("Friends, romans, countrymen")

// Send request
response = stub.getSpeech(request)

println response.getGetSpeechResult()

Use the -cp parameter to add the generated code the the script's classpath

groovy -cp build/build/classes GetSpeech