? ? 上一次介绍了axis的安装,这次我们就来体会下如何利用axis开发webservice程序。
?
? ? Axis提供了两种webservice的发布方式:
? ? 1.即时发布
? ? 2.定制发布
?
1.即时发布
? ? 即时发布是一种比较简单的发布方式,只要求我们将java源代码(*.java)的后缀改为jws并拷贝到部署目录下即可,(%TOMCAT_HOME%\webapps\axis)。下面就以我们最简单的sayhello程序说起:
?
public class HelloWorldJWS { public String sayHello(String name,int age){ return "Server Response OK,your name is"+name+",your age is"+age; } }?
?
这是服务器端的代码,部署玩之后我们访问http://127.0.0.1:8080/axis/HelloWorldJWS.jws我们如果看到Click to see the WSDL 这个超链接,就说明已经发布成功了。点击进去就可以看到这个WebService 的 WSDL 描述文件。服务端的发布已经完成了,接下来就是编写客户端测试代码:
?
?
/** * @author :LYL *@date:2011-4-17,上午10:19:22 */ package com.lyl.webservice; import java.net.MalformedURLException; import java.rmi.RemoteException; import javax.xml.namespace.QName; import javax.xml.rpc.ServiceException; import org.apache.axis.client.Call; import org.apache.axis.client.Service; public class JwsClient { public static void main(String[] args) { String url="http://127.0.0.1:8080/axis/HelloWorldWSDD"; Service service=new Service(); try { Call call=(Call) service.createCall(); call.setTargetEndpointAddress(new java.net.URL(url)); call.setOperationName(new QName(url,"sayHello")); String result=(String)call.invoke(new Object[]{"sudalyl",22}); System.out.println("result:"+result); } catch (ServiceException e) { e.printStackTrace(); } catch (RemoteException e) { e.printStackTrace(); } catch (MalformedURLException e) { e.printStackTrace(); } } }
?
? ? 输出结果:?result:Server Response OK, your name is sudalyl,your age is 22
? ? 如果学过反射,这个方法大家很容易就看的懂,即时发布确实很简单,但是即时发布却牺牲了灵活性,他的服务端代码不能带有类包,这个是比较令人头疼的事。而且必须是把.java文件改名,如果你是一个编译好的class文件,那就比较难办了。
?
?
? ? 2.定制发布
? ??比起即时发布,定制发布更加烦琐也更复杂,但是换来的却是更大的灵活性,因此在实际项目中定制发布还是不二的选择。定制发布需要你自己编写一个 WSDD ( Web Service Deployment?Descriptor )文件,就是一个 XML 描述文件。废话不多说,我们来看代码 :
? ? 首先是服务器端的
?
/** * @author :LYL *@date:2011-4-17,上午10:56:00 */ package com.lyl.webservice; public class HelloWorldWSDD { public String sayHello(String name,int age){ return "Server Response OK, your name is "+name+",your age is "+age; } public String add(int a,int b){ int temp=a+b; return "Server Response OK,a+b="+temp; } }
?
? ? 在 eclipse 下编译后按照包名拷到 %TOMCAT_HOME%\webapps\axis\WEB-INF\classes 目录下。然后我们来编写WSDD文件,并在%TOMCAT_HOME%\webapps\axis\WEB-INF 目录下建立这个文件。
?
<deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"> <service name = "HelloWorldWSDD" provider = "java:RPC"> <parameter name="className" value="com.lyl.webservice.HelloWorldWSDD"/> <parameter name="allowedMethods" value ="*"/> <parameter name="scope" value="request"/> </service> </deployment>
?
? ? ?编写完配置发布文件之后,(?Tomcat 服务必须处于启动状态) cmd 打开 windows 的控制台,进入:%TOMCAT_HOME%\webapps\axis\WEB-INF 目录下键入如下命令:java -Djava.ext.dirs=lib org.apache.axis.client.AdminClient deploy.wsdd之后控制台返回 Processing file deploy.wsdd 和 Done processing 这两段话即说明发布成功。(此时会在同级目录生成一个 server-config.wsdd 文件)在这里的 AdminClient 是 AXIS 提供的一个客户端管理工具。至于 java.ext.dirs 的含义可以去了解一下 classloader 和 JVM 类装载机制方面的知识。发布成功之后你可以通过访问http://localhost:8080/axis/servlet/AxisServlet 来查看你所有的定制发布的服务。
? ? 下面看一下客户端代码:
?
package com.lyl.webservice; import java.net.MalformedURLException; import java.rmi.RemoteException; import javax.xml.namespace.QName; import javax.xml.rpc.ServiceException; import org.apache.axis.client.Call; import org.apache.axis.client.Service; public class JwsClient { public static void main(String[] args) { String url="http://127.0.0.1:8080/axis/services/HelloWorldWSDD"; Service service=new Service(); try { Call call=(Call) service.createCall(); call.setTargetEndpointAddress(new java.net.URL(url)); call.setOperationName(new QName(url,"sayHello")); String result=(String)call.invoke(new Object[]{"sudalyl",22}); System.out.println("result:"+result); } catch (ServiceException e) { e.printStackTrace(); } catch (RemoteException e) { e.printStackTrace(); } catch (MalformedURLException e) { e.printStackTrace(); } } }
?
? ? ?同样返回及时发布时的信息,成功!
?
? ? 3.取消一个webservice
?
? ? 刚才讲了怎么发布一个 WebService ,但是如何取消没有却没有提。其实取消一个已经发布WebService 也是非常简单的,我们就刚才的 HelloWorld 来做例子吧。发布 WebService 的时候们有一个 deploy.wsdd 文件,当然在取消发布的时候就会有一个 undeploy.wsdd 文件。这个文的内容也很简单, xml 的代码如下。
<undeployment xmlns = "http://xml.apache.org/axis/wsdd/" > < service name = "HelloWorldWSDD" /> </undeployment >
?写完这个 xml 文件之后,把它同样 copy 到 %TOMCAT_HOM\webapps\axis\WEB-INF 目录下,然后
D 打开控制台,在控制台输入一个我们很熟悉的命令:java -Djava.ext.dirs=lib org.apache.axis.client.AdminClient undeploy.wsdd运行成功就取消了。
?