axis 的客户端使用
[作者]:菩提树下的杨过 [来源]:互联网 [收录时间]:2007-7-30 21:51:05
<DIV class=con_all twffan="done"> <P> <P>1. http://ws.apache.org/Axis/下载 axis-1_2_1 解压放在 D:\softSetup\下</P> <P>2.下载 apache-ant-1.6.1 解压放在D:\softSetup\下</P> <P>3.环境变量设置:</P><table border="0" align="left" class=ppc_download_ad_frame cellspacing=0 cellpadding=0 width="1%" style="margin-top:10px;margin-right:7px;margin-bottom:3px;margin-left:0px"> <tr> <td id=a><img height=9 width=9></td> <td id=b width="100%"><img height=1 width=1></td> <td id=c><img height=9 width=9></td> </tr> <tr> <td id=d><img height=1 width=1></td> <td id=e valign=top height="100%"><!-- frame contents --> <table cellspacing=0 cellpadding=0 border=0> <tr> <td><div id="w_hzh"></div></td> </tr> </table> <!-- /frame contents --></td> <td id=f><img height=1 width=1></td> </tr> <tr> <td id=g><img height=9 width=9></td> <td id=h><img height=1 width=1></td> <td id=i><img height=9 width=9></td> </tr> </table> <P>JAVA_HOME=C:\jdk1.5.0_06<br />CATALINA_HOME=tomcat-5.5.15 <br />ANT_HOME=D:\softSetup\apache-ant-1.6.1<br />AXISCLASSPATH=%AXIS_LIB%\activation.jar;%AXIS_LIB%\mail.jar;%AXIS_LIB%\axis.jar;%AXIS_LIB% \wsdl4j.jar;%AXIS_LIB%\axis-ant.jar;%AXIS_LIB%\commons-discovery-0.2.jar;%AXIS_LIB%\commons-logging-1.0.4.jar;%AXIS_LIB%\jaxrpc.jar;%AXIS_LIB%\saaj.jar;%AXIS_LIB%\log4j-1.2.8.jar;%AXIS_LIB%\xerces.jar;%AXIS_LIB%\junit.jar;%AXIS_LIB%\wsdl4j-1.5.1.jar<br />AXIS_HOME=D:\softSetup\axis-1_2_1<br />AXIS_LIB=%AXIS_HOME%\lib<br />CATALINA_HOME=D:\softSetup\jakarta-tomcat-5.0.24<br />classpath=.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;%AXISCLASSPATH%<br />path=%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;%CATALINA_HOME%\bin;%ANT_HOME%\bin</P> <P>4.在命令行 运行set 确保新加的环境变量生效</P> <P>5.根据合作伙伴给的wsdl地址 http://www.****.com/services/OrderService?wsdl保存下来到D:\project\test\wsdl\OrderService.wsdl</P> <P>6.在命令行 切换到 D:\project\test\wsdl\下运行axis的WSDL2Java 命令: java org.apache.axis.wsdl.WSDL2Java OrderService.wsdl 生成 bean 文件,***Service.java,***ServiceLocator.java,***ServiceSoapBindingStub.java 等文件,可以用Axis的wsdl2java生成web service的客户端,wsdl2java生成的客户端是stub方式的。它包括endpoint借口、实现该接口的stub、 serviceLocator、可选的单元测试代码。其中,serviceLocator中hard code了服务端地址.</P> <P>7. 应用.写一个表单jsp,提交到下面jsp文件进行处理(可以写在类里,此处简单处理)</P> <P>&lt;%@ page contentType="text/html; charset=GBK"%&gt;<br />&lt;%@page import="org.apache.axis.client.Call"%&gt;<br />&lt;%@page import="javax.xml.namespace.QName"%&gt;<br />&lt;%@page import="java.net.MalformedURLException"%&gt;<br />&lt;%@page import="java.rmi.RemoteException"%&gt;<br />&lt;%@page import="java.util.*"%&gt;<br />&lt;%@page import="java.net.URL"%&gt;<br />&lt;%@page import="org.apache.axis.client.Service"%&gt;<br />&lt;%@page import="com.newSky.datainterface.beans.*"%&gt;<br />&lt;%!</P> <P> private final static String success = "测试完成";<br /> private final static String fail = "测试失败:";<br /> final static String endPoint = "http://www.***.com/services/OrderService";<br /> final static String portName = "addNewOrder";<br /> final static String nameSpace = "http://beans.datainterface.newSky.com";<br />%&gt;<br /><html><br /><head></head><br /><body><br />&lt;%<br /> try {<br /> Call call = null;<br /> URL url = null;<br /> try {<br /> //create new url<br /> url = new URL(endPoint);<br /> }<br /> catch (MalformedURLException e) {<br /> System.out.println(fail + e.getMessage());<br /> e.printStackTrace();<br /> }<br /> //create new service<br /> Service service = new Service();<br /> try {<br /> //create new call<br /> call = (Call) service.createCall();<br /> }<br /> catch (Exception se) {<br /> System.out.println(fail + se.getMessage());<br /> se.printStackTrace();<br /> }<br /> //设置服务器<br /> call.setTargetEndpointAddress(url);<br /> //设置端口<br /> call.setOperationName(new QName(endPoint, portName));<br /> //***********************<br /> //注册类,开始<br /> try {<br /> QName qn1 = new QName(nameSpace, "OrderUserData");<br /> call.registerTypeMapping(OrderUserData.class, qn1,<br /> new org.apache.axis.encoding.ser.BeanSerializerFactory(OrderUserData.class, qn1),<br /> new org.apache.axis.encoding.ser.BeanDeserializerFactory(OrderUserData.class, qn1));<br /> <br /> }<br /> catch (Exception EQ) {<br /> EQ.printStackTrace();<br /> }<br /> //注册类,结束<br /> //设置返回类型<br /> // set bean 此处省略。。<br /> try {<br /> //调用服务<br /> System.out.println("************* 测试开始 ******************");<br /> call.setUsername(request.getParameter("id"));<br /> String result = (String) call.invoke(new Object[] {new Integer(request.getParameter("id)),<br /> new String(request.getParameter("pwd")), orderData});<br /> System.out.println(result);</P> <P> if(result.equals("-100")){<br /> out.write("用户名密码错误");<br /> }<br /> else{<br /> out.write("成功");<br /> }<br /> System.out.println("************* 测试完成 ******************");<br /> }<br /> catch (RemoteException re) {<br /> System.out.println(fail + re.getMessage());<br /> //re.printStackTrace();<br /> }<br /> }<br /> catch (Exception e) {<br /> // e.printStackTrace();<br /> }<br />%&gt;<br /></body><br /></html></P> <P>8. ok ^_^</P></DIV>