Axis提供的两种服务发布方式

本文详细介绍了Axis提供的两种服务发布方式:即时发布(JWS)和定制发布(WSDD)。即时发布允许开发者直接使用Java源代码快速发布Web服务,而定制发布则适用于没有源代码或需要更多配置的情况。通过示例,展示了如何创建和部署这两个类型的Web服务,并解释了WSDL描述文件的内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Axis提供了两种服务发布方式,一种是即时发布(Instant Deployment),一种是定制发布(Custom Deployment)。

1. 使用即时发布 Java Web Service(JWS)

  对即时发布的支持是Axis的特色之一,使用即时发布使用户只需有提供服务的Java类的源代码,即可将其迅速发布成Web服务。每当用户调用这类服务的时候,Axis会自动进行编译,即使服务器重启了也不必对其做任何处理,使用非常简单快捷。

  使用即时发布首先需要一个实现服务功能的Java源文件,将其扩展名改为.jws(Java Web Service的缩写),然后将该文件放到“……/webapps/axis”目录下即可。
    在此给出一个从英里到公里的长度单位转换的服务,其源码如下:

文件Distance.jws

public class Distance
{
    public double convertMile2Kilometre( double mile )
    {
 return mile * 1.609;  //实现英里到公里的距离转换
    }
}

将其放到“……/webapps/axis”目录,通过访问http://localhost:8080/axis/Distance.jws?wsdl可以看到这个服务的WSDL描述文件,这说明Distance服务被成功发布了。描述的WDSL代码如下:

xml 代码
<?xml version="1.0" encoding="UTF-8" ?>    
- <wsdl:definitions targetNamespace="http://192.168.0.26:8080/axis/Distance.jws" xmlns="http://schemas.xmlsoap.org/wsdl/"     
   xmlns:apachesoap="http://xml.apache.org/xml-soap" xmlns:impl="http://192.168.0.26:8080/axis/Distance.jws" xmlns:intf="http://192.168.0.26:8080/axis/Distance.jws" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">  
- <wsdl:message name="convertMile2KilometreRequest">  
  <wsdl:part name="mile" type="xsd:double" />    
  </wsdl:message>  
- <wsdl:message name="convertMile2KilometreResponse">  
  <wsdl:part name="convertMile2KilometreReturn" type="xsd:double" />    
  </wsdl:message>  
- <wsdl:portType name="Distance">  
- <wsdl:operation name="convertMile2Kilometre" parameterOrder="mile">  
  <wsdl:input message="impl:convertMile2KilometreRequest" name="convertMile2KilometreRequest" />    
  <wsdl:output message="impl:convertMile2KilometreResponse" name="convertMile2KilometreResponse" />    
  </wsdl:operation>  
  </wsdl:portType>  
- <wsdl:binding name="DistanceSoapBinding" type="impl:Distance">  
  <wsdlsoap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http" />    
- <wsdl:operation name="convertMile2Kilometre">  
  <wsdlsoap:operation soapAction="" />    
- <wsdl:input name="convertMile2KilometreRequest">  
  <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://DefaultNamespace" use="encoded" />    
  </wsdl:input>  
- <wsdl:output name="convertMile2KilometreResponse">  
  <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://192.168.0.26:8080/axis/Distance.jws" use="encoded" />    
  </wsdl:output>  
  </wsdl:operation>  
  </wsdl:binding>  
- <wsdl:service name="DistanceService">  
- <wsdl:port binding="impl:DistanceSoapBinding" name="Distance">  
  <wsdlsoap:address location="http://192.168.0.26:8080/axis/Distance.jws" />    
  </wsdl:port>  
  </wsdl:service>  
  </wsdl:definitions>  

 

需要注意的是:JWS的web服务发布是一个很简单的Web服务发布方式,在页面中你不能使用包,而且由于代码是在运行期被编译的,所以在部署之后,你也很难找到错误所在。

2. 使用定制发布 Web Service Deployment Descriptor(WSDD)

  即时发布是一项令人激动的技术,它使Web服务的开发变得如此简单;然而即时发布并不总是最好的选择,比如有些应用系统是第三方提供的,我们没有购买源代码,只有.class文件,但我们又希望将这个应用系统的一些功能对外发布成Web服务,使其能够在更大范围内产生作用,这个时候即时发布技术就无能为力了。此外,即时发布技术并不灵活,无法进行更多的服务配置,这使得它并不能满足一些特定系统的需求。

  因此,Axis提供了另一种服务发布方式,这就是定制发布。

  在此给出一个从加仑到升的容积单位转换的服务,其源码如下:

  文件Capacity.java将其编译成.class文件,放置到“……/webapps/axis/samples/capacity”目录下,即可着手进行发布。
    定制发布不需要构建.jws文件,但必须创建服务发布描述文件deploy.wsdd(Web Service Deployment Descriptor的缩写),这个文件负责描述服务的名称、入口等信息,其内容如下:
    文件deploy.wsdd


xml 代码
<deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">  
<service name="Capacity" provider="java:RPC">  
<parameter name="className" value="samples.capacity.Capacity"/>  
<parameter name="allowedMethods" value="*"/>  
</service>  
   </deployment>  

 

在这里服务的提供者是“java:RPC”,它被内建在Axis中,而且指明了一个JAVA RPC服务,做这个处理的类是org.apache.axis.providers.java.RPCProvider。
    我们是通过一个标签告诉RPC服务应该调用的类,而另外一个标签则告诉引擎,它可以调用这个类中的任何的Public方法。你也可以指定通过使用名字空间或者一些可以调用的方法列表,来指明那些方法可以被调用。

  将该文件也放到“……/webapps/axis/samples/capacity”目录下,然后可以采用Axis提供的一个客户端管理工具——AdminClient来完成服务的定制发布。
   在“……/webapps/axis/samples/capacity”目录下,运行:

   java -cp %AXISCLASSPATH% org.apache.axis.client.AdminClient deploy.wsdd

   如果运行时说没有找到类,那么可能是类路径没有配置好,建议将所有的与axis相关的jar都写到classpath中去。这样只要运行:

   java org.apache.axis.client.AdminClient deploy.wsdd
   可以看到以下运行结果:

 Processing file deploy.wsdd
 Doneprocessing

  这表明Capacity服务定制发布完成。
 
   你也可以调用:
 java org.apache.axis.client.AdminClient undeploy.wsdd  来取消部署。

   你也可以调用:
 java org.apache.axis.client.AdminClient list 来获得所有的已经部署的服务的列表。在这里你会看到services, handlers, transports等等,注意这个调用只是列出了WEB-INF/server-config.wsdd的文件内容。

   一定要注意:编译后的class文件要拷贝到web-inf/classes的目录中,如果该文件中有包存在的话,别忘了还要在classes目录下创建包的目录
   通过访问http://localhost:8080/axis/services/Capacity?wsdl可以看到这个服务的WSDL描述文件,这说明Capacity服务被成功发布了。
   你也可以通过访问http://localhost:8080/axis/servlet/AxisServlet查看所有定制发布的服务。
   WDSL如下:

 

xml 代码
<?xml version="1.0" encoding="UTF-8" ?>    
- <wsdl:definitions targetNamespace="http://localhost:8080/axis/services/Capacity" xmlns="http://schemas.xmlsoap.org/wsdl/"  
    xmlns:apachesoap="http://xml.apache.org/xml-soap" xmlns:impl="http://localhost:8080/axis/services/Capacity" xmlns:intf="http://localhost:8080/axis/services/Capacity" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">  
- <wsdl:message name="convertGallon2LitreResponse">  
  <wsdl:part name="convertGallon2LitreReturn" type="xsd:double" />    
  </wsdl:message>  
- <wsdl:message name="convertGallon2LitreRequest">  
  <wsdl:part name="in0" type="xsd:double" />    
  </wsdl:message>  
- <wsdl:portType name="Capacity">  
- <wsdl:operation name="convertGallon2Litre" parameterOrder="in0">  
  <wsdl:input message="impl:convertGallon2LitreRequest" name="convertGallon2LitreRequest" />    
  <wsdl:output message="impl:convertGallon2LitreResponse" name="convertGallon2LitreResponse" />    
  </wsdl:operation>  
  </wsdl:portType>  
- <wsdl:binding name="CapacitySoapBinding" type="impl:Capacity">  
  <wsdlsoap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http" />    
- <wsdl:operation name="convertGallon2Litre">  
  <wsdlsoap:operation soapAction="" />    
- <wsdl:input name="convertGallon2LitreRequest">  
  <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://capacity.samples" use="encoded" />    
  </wsdl:input>  
- <wsdl:output name="convertGallon2LitreResponse">  
  <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://localhost:8080/axis/services/Capacity" use="encoded" />    
  </wsdl:output>  
  </wsdl:operation>  
  </wsdl:binding>  
- <wsdl:service name="CapacityService">  
- <wsdl:port binding="impl:CapacitySoapBinding" name="Capacity">  
  <wsdlsoap:address location="http://localhost:8080/axis/services/Capacity" />    
  </wsdl:port>  
  </wsdl:service>  
  </wsdl:definitions> 
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值