用Apache Axis实现Web Service(二)

二. 开发部署新的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

package  brookes;

public   class  HelloService  {
    
public String sayHello(String username){
        
return "Hello, " + username;
    }

}

然后, 把这个文件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:

< deployment  name ="test"  xmlns ="http://xml.apache.org/axis/wsdd/"  
    xmlns:java
="http://xml.apache.org/axis/wsdd/providers/java" >
  
< service  name ="urn:helloworld"  provider ="java:RPC" >
    
< parameter  name ="className"  value ="brookes.HelloWorld"   />
    
< parameter  name ="allowedMethods"  value ="sayHello"   />
  
</ service >
</ deployment >

可以看到,这个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的配置声明:

<? xml version="1.0" encoding="ISO-8859-1" ?>

<! DOCTYPE web-app
    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"
    "http://java.sun.com/j2ee/dtds/web-app_2.2.dtd"
>

< web-app >
  
< display-name > Apache-Axis </ display-name >
  
< servlet >
    
< servlet-name > AxisServlet </ servlet-name >
    
< display-name > Apache-Axis Servlet </ display-name >
    
< servlet-class >
        org.apache.axis.transport.http.AxisServlet
    
</ servlet-class >
  
</ servlet >

  
< servlet >
    
< servlet-name > AdminServlet </ servlet-name >
    
< display-name > Axis Admin Servlet </ display-name >
    
< servlet-class >
        org.apache.axis.transport.http.AdminServlet
    
</ servlet-class >
    
< load-on-startup > 100 </ load-on-startup >
  
</ servlet >

  
< servlet >
    
< servlet-name > SOAPMonitorService </ servlet-name >
    
< display-name > SOAPMonitorService </ display-name >
    
< servlet-class >
        org.apache.axis.monitor.SOAPMonitorService
    
</ servlet-class >
    
< init-param >
      
< param-name > SOAPMonitorPort </ param-name >
      
< param-value > 5001 </ param-value >
    
</ init-param >
    
< load-on-startup > 100 </ load-on-startup >
  
</ servlet >

  
< servlet-mapping >
    
< servlet-name > AxisServlet </ servlet-name >
    
< url-pattern > /servlet/AxisServlet </ url-pattern >
  
</ servlet-mapping >

  
< servlet-mapping >
    
< servlet-name > AxisServlet </ servlet-name >
    
< url-pattern > *.jws </ url-pattern >
  
</ servlet-mapping >

  
< servlet-mapping >
    
< servlet-name > AxisServlet </ servlet-name >
    
< url-pattern > /services/* </ url-pattern >
  
</ servlet-mapping >

  
< servlet-mapping >
    
< servlet-name > SOAPMonitorService </ servlet-name >
    
< url-pattern > /SOAPMonitor </ url-pattern >
  
</ servlet-mapping >

 
<!--  uncomment this if you want the admin servlet  -->
 
  
< servlet-mapping >
    
< servlet-name > AdminServlet </ servlet-name >
    
< url-pattern > /servlet/AdminServlet </ url-pattern >
  
</ servlet-mapping >
 

    
<!--  currently the W3C havent settled on a media type for WSDL;
    http://www.w3.org/TR/2003/WD-wsdl12-20030303/#ietf-draft
    for now we go with the basic 'it's XML' response 
-->
  
< mime-mapping >
    
< extension > wsdl </ extension >
     
< mime-type > text/xml </ mime-type >
  
</ mime-mapping >
  

  
< mime-mapping >
    
< extension > xsd </ extension >
    
< mime-type > text/xml </ mime-type >
  
</ mime-mapping >

  
< welcome-file-list  id ="WelcomeFileList" >
    
< welcome-file > index.html </ welcome-file >
    
< welcome-file > index.jsp </ welcome-file >
    
< welcome-file > index.jws </ welcome-file >
  
</ welcome-file-list >

</ web-app >

可以看到,.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>:

undeployment.wsdd
< undeployment  name ="test"  xmlns ="http://xml.apache.org/axis/wsdd/" >
  
< service  name ="urn:helloworld" />
</ undeployment >

在命令行执行:

java org.apache.client.AdminClient undeployment.wsdd

Web Service 就被删除了!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值