WEBSERVICE
USING APACHE AXIS
UNDERSTANDING APACHE AXIS
(part-4)(published in DeveloperIQ..April,2004) (www.developeriq.com)
R.S.RAMASWAMY ([email protected])
In this part, we will follow the WSDD
method. We have already created sqlaxisbean.java as explained in the last article.
We used it as sqlaxisbean.jws (drop-in method). There was no necessity to compile this file.But in WSDD method
(web-service deployment descriptor), we should compile this file.Next, we create the WSDD file. Then, we deploy this bean to tomcat.
We may have to restart the tomcat4.1 webserver.
We can then create a java-console client
and test the webservice. So, this is the
step-by-step procedure. We will now go
into the details involved here.We
are now in c:\sam.
We give
correct path, classpath etc. as in part-3.
set path=c:\windows\command;d:\jdk141\bin;
// setcpath.bat |
set
classpath=c:\sam;
d:\bea\weblogic700\lib\weblogic.jar; c:\axis11\lib\axis.jar; c:\axis11\lib\jaxrpc.jar; c:\axis11\lib\saaj.jar; c:\axis11\lib\commons- logging.jar; c:\axis11\lib\commons- discovery.jar; c:\axis11\lib\wsdl4j.jar; c:\tomcat4.1\common\lib\ activation.jar; c:\tomcat4.1\common\lib\xerces.jar |
// sqlaxisbean.java |
import java.sql.*; import java.util.*; import javax.ejb.*; import javax.naming.*; import java.rmi.*; public class
sqlaxisbean { String a; public sqlaxisbean() { a=""; } public String
callejb(String s) { try {
Properties props=new
Properties(); props.put
(Context.INITIAL_CONTEXT_FACTORY,
"weblogic.jndi.WLInitialContextFactory"); String
url="t3://127.0.0.1:7001";
props.put(Context.PROVIDER_URL,url); Context
context=new InitialContext(props); System.out.println("context ok.."); sqlhome
home=(sqlhome)context.lookup("sqlejbJndi"); System.out.println("home ok.."); sqlremote
remote=home.create(); System.out.println("remote ok..");
a=remote.showdata(s);
System.out.println(a);
}catch(Exception e1) {System.out.println("
"+e1);} return a; } |
c:\sam>javac sqlaxisbean.java
so
we get sqlaxisbean.class.
Copy this file to ?d:\tomcat4.1\axis\web-inf\classes? folder. (Note the difference from part-3 carefully.
In
part-3, we just copied the file ?sqlaxisbean.java? to d:\tomcat4.1\webapps\axis
folder. But, now we copy the class fil e
to ?d:\tomcat4.1\axis\web-inf\classes? folder.
a.
service name ?ejbsqlaxis?
b.
provider ?java:RPC?
c.
class name ?sqlaxisbean?
d.
method name ?callejb?
//c:\sam\sqlaxis.WSDD |
<deployment xmlns=?http://xml.apache.org/axis/WSDD/? xmlns:java=?xml.apache.org/axis/WSDD/providers/java?
> <service name=?ejbsqlaxis? provider=?java:RPC? > <parameter name=?className?
value=?sqlaxisbean? /> <parameter name=?methodName? value=?callejb?
/> </service> <deployment> |
In Axis, a provider (also known as a pivot
handler) is used for invoking the webservice class.
Axis
provides the following provider types
i. RPC-based provider
java:RPC
ii Message-based provider
java:MSG
iii
EJB provider java:EJB
(Currently,
work is going on for developing COM provider.)
In the present demo, we are using RPC based provider.The next step is to deploy the bean in
tomcat server. Please refer to page 38
of Axis by Romin Irani & Geelani Basha. WROX Press for further details.
c:\sam>java
org.apache.axis.client.AdminClientsqlaxis.WSDD
lhttp://localhost:8080/axis/services/AdminService
(Note: This is ?l? as in long and not ?one?.)
(Remember
that tomcat should be running. If tomcat
server is not running, this command won?t work.)Wait till the message ?Done Processing? is displayed.
It is essential to verify whether the bean
has really been deployed correctly by the following command:
c:\sam>java org.apache.axis.client.AdminService
list
?lhttp://localhost:8080/axis/services/AdminService
We
will get the WSDD files of all the beans deployed. (If there are too many items, we can send the
result to log.txt by the command :> (as before)> log.txt .We
can then see log.txt and locate the ejbsqlaxis service, its classname and
method name.Actually, our job is over. We can, now checkup, whether the bean is
available as a webservice typing the URL in browser as:
?http://localhost:8080/axis/services/
Now we want to check up whether we can
really use this service. For this, we
create the following java console-mode program .
// sqlaxisconsoleclient.java |
import java.net.*; import javax.xml.rpc. 2 ParameterMode; import org.apache.axis.client. Service; import org.apache.axis. client.Call; import org.apache.axis. 4 encoding.XMLType; import javax.xml. namespace.QName; public class sqlaxisconsoleClient { public static void main(String args[]) { try { ("Start"); Service service=
new Service(); System.out.println 9 ("Service ready"); Call call= (Call)service.createCall(); System.out.println 0 ("call ready"); URL url=new URL("http://localhost: 8080/axis 1 /services/ejbsqlaxis"); // the last parameter is service name & not class name! call.setTargetEndpointAddress(url); call.setOperationName("callejb?); call.addParameter 3 ("something", XMLType.XSD_STRING, ParameterMode.IN); call.setReturnType 4 (XMLType.XSD_STRING); String
r= (String)call.invoke(new Object[]{args[0]});
System.out.println(r); }catch(Exception
e1){System.out.println(""+e1);} } } |
If you carefully compare this file with the
earlier jwsclient.java, you will find that
except for the URL of the end-point, everything else is the same.We
now compile this file.
c:\sam>javac
sqlaxisconsoleclient.java
This
compiles correctly.We
can run this program:
c:\sam>java
sqlaxisconsoleclient
We
get the correct result. Now
just a little explanation for the code!
2. We specify the
method name, then we create an instance
of service and create CALL object for a service. We set URL and method name for this
CALL object.
3. ?addParameter? method takes three parameters, viz.,
a. A user-defined name for the parameter (?sql?
in our example).
b. Parameter
datatype.
c. Whether the parameter is input parameter or
output parameter.
4. It is now required to set the
return type.
5. Finally, we invoke the call
That
completes the fourth part of this tutorial. In the next month?s issue, we will directly use
the EJB class files in WSDD file and invoke the EJB as webservice without using
sqlaxisbean.