供的,我们没有购买源代码,只有.class文件,但我们又希望将这个应用系统的一些功能对外发布成Web服务,使其能够在更大范围内产生作用,这个时候即时发布技术就无能为力了。此外,即时发布技术并不灵活,无法进行更多的服务配置,这使得它并不能满足一些特定系统的需求。
因此,Axis提供了另一种服务发布方式,这就是定制发布。
在此给出一个从加仑到升的容积单位转换的服务,其源码如下:
文件Capacity.java
package samples.capacity;
/**
* @author 飞鹰
*/
public class Capacity
{
public double convertGallon2Litre( double gallon )
{
//实现加仑到升的容积转换
return gallon * 4.546;
}//convertGallon2Litre()
}/* Capacity */
将其编译成.class文件,放置到"......\webapps\axis\samples\capacity"目录下,即可着手进行发布。
定制发布不需要构建.jws文件,但必须创建服务发布描述文件deploy.wsdd(Web Service Deployment Descriptor的缩写),这个文件负责描述服务的名称、入口等信息,其内容如下:
文件deploy.wsdd
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
将该文件也放到"......\webapps\axis\samples\capacity"目录下,然后可以采用Axis提供的一个客户端管理工具--AdminClient来完成服务的定制发布。
在"......\webapps\axis\samples\capacity"目录下,运行:
java -cp %AXISCLASSPATH% org.apache.axis.client.AdminClient deploy.wsdd
可以看到以下运行结果:
Processing file deploy.wsdd
Doneprocessing 这表明Capacity服务定制发布完成。
通过访问http://localhost:8080/axis/services/Capacity?wsdl可以看到这个服务的WSDL描述文件,这说明Capacity服务被成功发布了。如下图所示:
服务的访问
GET方式的服务访问
一般的SOAP消息都是采用POST方式实现传递,但也可以通过GET方式来访问。比如以下给出的一个服务--"HelloWorld",其源码如下:
文件HelloWorld.jws
/**
* @author 飞鹰
*/
public class HelloWorld
{
public String helloWorld()
{
//在服务器端打印输出
System.out.println( "Hello World!" );
//返回相应字符串
return "Hello World!";
}//helloWorld()
}/* HelloWorld */
这个服务给出一个名位"helloWorld"的无入口参数的操作,返回一个内容为"Hello World!的字符串",同时在服务器端打印"Hello World!",将该文件放到"......\webapps\axis"目录下,即可通过GET方法直接访问该服务,访问的地址为http:/