二. 开发部署新的Web Service
如何开发一个新Web Service并把它部署到服务器上供其他项目调用呢?有两种方式。
1. 最简单的一种方式是Java Web Service,即JWS。Axis允许把普通Java类的源文件的扩展名改为.jws,然后把它简单的copy到AXIS_HOME下。这样,Axis会自动编译.jws文件,并把它加入到Java Web Servie。其实,在ASIX_HOME,下,已经部署了几个示例jws,如,http://localhost:8080/axis/EchoHeaders.jws?method=list 。用文本编辑器打开AXIS_HOME/EchoHeader.jws,可以看到这是一个标准的java类源文件。
下面,我们来自己编写并发布一个Web Service。
首先, 我们编写一个最简单的Java类 HelloWorld.java
然后, 把这个文件copy到AXIS_HOME,并更名为HelloWorld.jws
现在,访问http://localhost:8080/HelloWorld.jws?wsdl,页面显示AXIS为HelloWorld自动生成的WSDL。这说明这个Web Service已经部署成功,可以使用了!
看,开发部署一个Web Servce就是这么的简单!
2。使用wsdd(Web Service Deployment Descriptor,Web服务发布描述符)文件来发布Web Service。
Apache Axis使用Web 服务描述符文件(WSDD)来发布SOAP服务。要发布一个Web Service,就要为它编写一个wsdd文件。我们仍使用上面那个HelloWorld,为它编写一个wsdd文件——deploy.wsdd:
可以看到,这个wsdd文件是一个标准的XML文件,包含三个元素:
<deployment>元素制定了wsdd所用的XML命名空间,是这个文件的根。
<service>元素制定了一项SOAP服务。它有两个属性。name指定了这个服务的唯一标志符,provider指定了实现的语言及服务方式。一个wsdd文件可能有多个<service>元素。
<parameter>指定了服务详细信息,是一组name/value对应的值。其中,clcssName指定了实现这个服务的类的名字,allowedMethods指定了这个服务暴露的方法列表。
有了这个wsdd文件,我们就可以发布Web Service了。首先,编译HelloWorld.java, 把生成的HelloWorld.class文件copy到AXIS_HOME/WEB-INF/classes/brookes下,然后,deploy.wsdd所在目录,执行命名行命令:
java org.apache.axis.client.AdminClient deploy.wsdd
得到如下输出:
Processing file deploy.wsdd
<Admin>Done processing</Admin>
这样,这个Web Service 就发布成功了。在http://localhost:8080/axis,通过点击view,就可以看到这个新发布的Web服务。
这种发布方式比jws要复杂的,但是,wsdd方式可以通过WSDD描述文件,精确控制Web Service的很多特性,比如可访问的方法,因此wsdd是Web Service发布的首选方法。
实际上,axis是通过ASIX_HOME/WEB-INF/server-config.wsdd文件来管理应用程序下所有Web Service。java org.apache.axis.client.AdminClient deploy.wsdd 执行的结果,就是把deploy.wsdd中的内容合并到server-config.wsdd中去。
3. 在其他应用程序中发布Web Service
上面都是把HelloWorld发布到http://localhost:8080的应用程序中。如果想发布到其他应用程序,或者在一个已有的应用中加入Web Service?
Apache Axis的实现方式是一系列servlet,在AXIS_HOME/WEB-INF/web.xml中,可以看到这些Servlet的配置声明:
可以看到,.jws和/services/*所有访问都被AxisServlet接管。这就是Axis实现Web Service 的方式。因此,在其他应用中添加Axis就变得很简单,假设要添加Axis的应用为http://localhost:8080/newweb:
1.把这里所有的servlet定义都copy到newweb/WEB-INF/web.xml配置文件中。
2. 将axis.jar, wsdl.jar, saaj.jar, jaxrpc.jar和其他相关类库(可以简单copy AXIS_HOME/WEB-INF/lib下所有jar)copy到newweb/WEB-INF/lib目录。
3. newweb已经开发部署Web Service了!将HelloWorld.jws copy到newweb/下,访问:http://localhost:8080/newweb/HelloWorld.jws?wsdl,一切OK!
需要注意的是,如果果使用wsdd文件方式发布Web Service,由于org.apache.clieng.AdminclClient工具默认的是将Web Service发布到http://localhost:8080/axis
AdminClient提供了一系列参数来处理这种问题,要发布到newweb,只需执行:
java org.apache.axis.client.AdminClient -s /newweb/servlet/AxisServlet deploy.wsdd
其中,-s参数指定了AxisServlet所在的应用程序路径。
同样,如果要将Web Service发布到http://localhost/newweb,而不是默认的8080端口,需要使用 -p参数指定端口
java org.apache.axis.client.AdminClient -p 80 -s /newweb/servlet/AxisServlet deploy.wsdd
当然,有一个最简单的方式,就是使用-l参数指定目标应用的URL:
java org.apache.axis.client.AdminClient -lhttp://localhost:8000/newweb/servlet/AxisServlet deploy.wsdd
在命令行,可以通过java.org.apache.axis.client.AdminClient来查看AdminCient可用的所有参数列表。
4. 删除Web Service
删除Web Service的方法比较简单,jws方式发布的Web Service,删除.jws文件就可以了。
使用WSDD方式发布的Web Service,仍需要使用WSDD文件删除。不过和发布不同,这个文件的根元素换成了<undeployment>:
在命令行执行:
java org.apache.client.AdminClient undeployment.wsdd
Web Service 就被删除了!