Working With Apache Axis - Concurrency and Computation

Download Report

Transcript Working With Apache Axis - Concurrency and Computation

Working With Apache Axis
Axis Information
• See http://ws.apache.org/axis/java/userguide.html for the basic user guide.
• Note the WSDD description.
– “Custom Deployment—Introducing WSDD”
• Note the WSDD file is not a Web Service
standard.
– Not universal, like SOAP or WSDL
– Axis specific.
Developing and Deploying a
Service
• Write a Java implementation
– Compile it into Tomcat’s classpath.
• Write a deployment descriptor (WSDD) for your service.
– Will be used by Axis runtime to direct SOAP calls.
– Typical use is to specify the Java methods you actually want to
expose as a service.
• Use Axis’s AdminClient tool to install your WSDD file.
– The tells the axis servlet to load your class and direct SOAP
requests to it.
• That’s it.
– Axis will automatically generate the WSDL for your service.
Sample WSDD
<deployment name="Submitjob"
xmlns="http://xml.apache.org/axis/wsdd/"
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<service name="Submitjob" provider="java:RPC">
<parameter name="scope" value="request"/>
<parameter name="className"
value="WebFlowSoap.SJwsImp"/>
<parameter name="allowedMethods"
value="execLocalCommand"/>
</service>
</deployment>
Explanation
• Use Axis’s command-line AdminClient tool to
deploy this to the server.
– java org.apache.axis.client.AdminClient deploy.wsdd
– You must have axis.jar in the classpath.
• Axis will create a service called
– http://your.server/services/SubmitJob
• WSDL for service is available from
– http://your.server/services/SubmitJob?wsdl
• A list of all services is available from
– http://your.server/services
Writing a SOAP Client
• Assume you have a deployed service.
• You now want to develop a client to invoke the
service.
• You can do this by directly programming to
Axis’s SOAP API.
• The following example shows how to do this.
• These java classes are responsible for
generating the SOAP message we saw earlier.
• Put this code in your client application.
Axis SOAP Programming Example
Service service = new Service();
Call call = (Call) service.createCall();
//Set the target service host and service location,
call.setTargetEndpointAddress( new URL(“http://localhost:8080/axis/services) );
//Invoke the operation.
call.setOperationName(new QName(“EchoService",“echo"));
call.addParameter( “in0", XMLType.XSD_STRING,
ParameterMode.IN );
call.setReturnType(XMLType.XSD_STRING);
Object ret = call.invoke(new Object[] {in0});
//The object ret will either be a String is successful or a
//RemoteException on failure.
Avoiding the SOAP Call API
• Programming the above works well
enough a few times.
• But you quickly learn it is tedious and
repetitive.
• Axis has a tool that will generate the
above code for you directly from the
WSDL.
Using WSDL2Java
• First, make sure your classpath is set correctly.
• Obtain a WSDL file for your service.
– Use http://localhost:8080/axis/services/Echo?wsdl,for
example.
• Use the following command:
– java org.apache.axis.wsdl.WSDL2Java Echo.wsdl
• Note you need Axis jars in your classpath!
What Do You Get From
WSDL2Java?
• Four client files get generated:
– Echo.java
– EchoService.java
– EchoServiceLocator.java
– EchoSoapBindingStub.java: Wraps the SOAP
Call method used previously.
• You can then write a java program using
these client stubs.
Example Stubs
/**Create Echo client object and point to the
service you want to use */
Echo myEcho = new
EchoServiceLocator().getEcho(new
URL(http://your.server/axis/services/Echo));
/** Invoke the method as if local. */
String backTalk =
myEcho.echo(“Hello World”);
Using Stubs
• You can use the above client snippet in any Java
code to invoke the remotely running service.
– Swing GUIs, command line clients, JSPs.
• You MUST get the classpath correct for this to
work.
– Axis jars needed by both the client and service.
• So if you develop a client, you must distribute
not only the client code but the Axis jars.
• If you use a client Tomcat server, axis must be
located in the classpath of that server.
– Jakarta-tomcat-5.0.19/webapps/myapp/WEB-INF/lib
Steps for Completing Homework
• I assume you have two Tomcat servers running.
– Tomcat A=server
– Tomcat B=client
• I also assume your service has been deployed
as a web service.
– Either use the JWS or the WSDD approach for axis.
– This is deployed on Tomcat A.
• You should copy the Axis folder into both Tomcat
webapp directories for simplicity.
First, Get the WSDL File
• Should be something like
http://localhost:9090/axis/EchoService.jws?wsdl
• Save this to a file in Tomcat B’s folder.
• Inspect the file to make sure it is properly
formatted WSDL.
• Use WSDL2Java to create client stub programs.
– Use something like the following line.
• java –classpath C:\{tomcat_folder}\webapp\axis\WEBINF\lib\axis.jar org.apache.axis.wsdl.WSDL2Java Echo.wsdl
– You can set the classpath in many other ways.
Now Compile the Stubs
• You must now compile the client stubs that
you generated and place them in the
classpath of Tomcat B.
• Tomcat’s classpath is automatically set
when you load it.
– It looks in WEB-INF/classes and WEB-INF/lib
for each webapp.
– So you need to compile your Axis stubs into
WEB-INF/classes and restart tomcat.
Lastly, Write the Application
• Lastly, you need to write your JSP
application and place it in Tomcat B’s axis
webapp.
– A file such as jakarta-tomcat5.0.19/webapps/axis/MyClient.jsp.
• This should remotely invoke the service
deployed on Tomcat A.
Another Tutorial
• I found the small tutorial link below, which
looks reasonable.
– 2 minutes of Google can save you hours of
frustration.
• http://www.ammai.com/modules.php?op=
modload&name=Sections&file=index&req
=viewarticle&artid=4&page=1