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:
- Write my Java class with actual business logic
package packageNamel; public class Hello{ public void World(String name) { SOP("Hello" + name); } }
- Now, when I pass this Hello.java to java2WSDL.sh, this will give me the WSDL.
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
- packageName
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 ab开发者_如何学Goout 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
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¶m2=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
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.
精彩评论