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

2

4

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

Duwe answered 1/4, 2010 at 8:33 Comment(0)
U
4

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
Unexampled answered 1/4, 2010 at 8:33 Comment(0)
C
0

If you have access to the WSDL,the following code/JAX-WS client can be used to invoke any SOAP based web service.

import java.net.URL;
import javax.xml.namespace.QName;
import javax.xml.ws.Service;

public class WebserviceClient {

    public static void main(String[] args) throws Exception {

        URL url = new URL
                ("http://localhost:9999/ws/additionService?wsdl");

        QName qname = new QName("http://test/", 
                "AdditionServiceImplService");//Line 2

        Service service = Service.create(url, qname);

        AdditionService additionService = service
                .getPort(AdditionService.class);

        System.out.println(additionService.add(1, 2));

    }

}

In Line 2,QName first argument is the namespace used in WSDL and second argument is simply the service name.

Cheerleader answered 1/4, 2010 at 8:33 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.