用Axis开拓基于Java的Web处事
当前位置:以往代写 > JAVA 教程 >用Axis开拓基于Java的Web处事
2019-06-14

用Axis开拓基于Java的Web处事

用Axis开拓基于Java的Web处事

副标题#e#

概述

本文先容了一个较量简朴实用的基于Java的SOAP引擎——Apache组织推出的 Axis——的安装、设置和应用开拓要领,但愿对有乐趣做基于Java的Web Services应用开拓的伴侣有所辅佐。

Axis简介

Axis是Apache组织推出的SOAP引擎,Axis项目是Apache组织著名的SOAP项目 的后继项目,今朝最新版本是回收Java开拓的1.1版本,C++的版本正在开拓之中 。Axis v1.1软件包可以从http://ws.apache.org/axis/dist/1_1/下载获得。

Axis的安装

应用Axis开拓Web Services,你需要有一个支持Servlet的处事器引擎,好比 广为人知的Tomcat(Tomcat也是由Apache组织所提供的,今朝的最新版本为 4.1.24,下载地点为http://jakarta.apache.org/builds/jakarta-tomcat- 4.0/release/v4.1.24/)。在此之前虽然你呆板必需已经装好了JDK1.3以上的版 本,当安装好Tomcat之后,只需将下载的Axis软件包解压缩,将个中的 “webapps”目次下的“axis”目次整个拷贝到Tomcat安装目次下的“webapps” 目次下即可。

Axis的设置

Axis基于Java开拓,可以陈设于多种操纵系统,利用前需要设置一系列的系 统变量,在此假定你已经在本机上装好了Tomcat 4.0以上的版本,需要设置的系 统变量如下表所示:

CATALINA_HOME

C:\Tomcat_4_1

(此处应为Tomcat的安装位置,留意路径名中不要有空格)

AXIS_HOME
%CATALINA_HOME%\webapps\axis
AXIS_LIB
%AXIS_HOME%\lib
AXISCLASSPATH
%AXIS_LIB%\axis.jar;%AXIS_LIB%\commons-discovery.jar; %AXIS_LIB%\commons-logging.jar;%AXIS_LIB%\jaxrpc.jar; %AXIS_LIB%\saaj.jar;%AXIS_LIB%\log4j-1.2.8.jar; %AXIS_LIB%\xml-apis.jar;%AXIS_LIB%\xercesImpl.jar

假如你不肯做这么繁琐的类路径配置,可以直接将axis软件包中“lib”目次 下的所有.jar文件插手到系统情况变量CLASSPATH中即可。

Axis的测试

安装设置完毕后,应测试一下是否Axis可以正确运行了。

启动Tomcat处事器,在欣赏器中会见 http://localhost:8080/axis/happyaxis.jsp,假如页面显示有错误,则需要回 头查抄一下相关设置是否正确,假如欣赏页面能正确显示出系统组件、属性等参 数设置信息,则暗示安装乐成,如下图所示:

用Axis开辟基于Java的Web办事

此刻可以开始开拓你的Web Services应用了。


#p#副标题#e#

处事的宣布

Axis提供了两种处事宣布方法,一种是即时宣布(Instant Deployment), 一种是定制宣布(Custom Deployment)。

利用即时宣布

对即时宣布的支持是Axis的特色之一,利用即时宣布利用户只需有提供处事 的Java类的源代码,即可将其迅速宣布成Web处事。每当用户挪用这类处事的时 候,Axis会自动举办编译,纵然处事器重启了也不必对其做任那里理惩罚,利用很是 简朴快捷。

利用即时宣布首先需要一个实现处事成果的Java源文件,将其扩展名改 为.jws(Java Web Service的缩写),然后将该文件放到“……\webapps\axis” 目次下即可。

在此给出一个从英里到公里的长度单元转换的处事,其源码如下:

文件Distance.jws

/**
* @author 飞鹰
*/
public class Distance
{
public double convertMile2Kilometre( double mile )
{
//实现 英里到公里的间隔转换
return mile * 1.609;
}//convertMile2Kilometre()
}/* Distance */

将其放到“……\webapps\axis”目次,通过会见 http://localhost:8080/axis/Distance.jws?wsdl可以看到这个处事的WSDL描写 文件,这说明Distance处事被乐成宣布了。如下图所示:

用Axis开辟基于Java的Web办事

利用定制宣布

即时宣布是一项令人感动的技能,它使Web处事 的开拓变得如此简朴;然而即时宣布并不老是最好的选择,好比有些应用系统是 第三方提供的,我们没有购置源代码,只有.class文件,但我们又但愿将这个应 用系统的一些成果对外宣布成Web处事,使其可以或许在更大范畴内发生浸染,这个 时候即时宣布技能就无能为力了。另外,即时宣布技能并不机动,无法举办更多 的处事设置,这使得它并不能满意一些特定系统的需求。

因此,Axis提 供了另一种处事宣布方法,这就是定制宣布。

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

文件 Capacity.java

package samples.capacity;
  /**
   * @author 飞鹰
  */
  public class Capacity
   {
  public double convertGallon2Litre( double gallon )
   {
  //实现加仑到升的容积转换
  return gallon * 4.546;
  }//convertGallon2Litre()
  }/* Capacity */

#p#副标题#e#

将其编译成.class文件,安排到 “……\webapps\axis\samples\capacity”目次下,即可着 手举办宣布。

#p#分页标题#e#

定制宣布不需要构建.jws文件,但必需建设处事宣布描写 文件deploy.wsdd(Web Service Deployment Descriptor的缩写),这个文件负 责描写处事的名称、进口等信息,其内容如下:

文件 deploy.wsdd

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

将该文件也放到 “……\webapps\axis\samples\capacity”目次下,然后可 以回收Axis提供的一个客户端打点东西——AdminClient来完成处事 的定制宣布。

在“……\webapps\axis\samples\capacity”目次下,运行:

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

可以看到以下运行功效:

Processing file deploy.wsdd

<Admin>Doneprocessing</Admin>

这表白Capacity处事定制宣布完成。

通过会见http://localhost:8080/axis/services/Capacity?wsdl可以看到这 个处事的WSDL描写文件,这说明Capacity处事被乐成宣布了。如下图所示:

用Axis开辟基于Java的Web办事

处事的会见

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://localhost:8080/axis/HelloWorld.jws?method=helloWorld, 可以看到返回的SOAP信封动静,同时处事器端给出了相应的显示信息“Hello World!”这表白HelloWorld处事被乐成会见了。如下图所示:

用Axis开辟基于Java的Web办事

#p#副标题#e#

客户端处事会见编程

Axis提供了一套API来实现SOAP,从 http://localhost:8080/axis/docs/apiDocs/index.html可以看到Axis的API文 档。

个中,org.apache.axis.client.Call和 org.apache.axis.client.Service是两个较量常用的类,一般的客户端措施欲访 问一个Web Service时,都要生成一个客户端的Service工具和Call工具,在会见 处事之前,首先要对Call工具配置相应的参数,包罗处事的位置、操纵名、进口 参数、返回值范例等,最后挪用Call工具的invoke要了解见处事。

以下 给出了一个客户端会见Web处事的例程——AXISTest.java:

文件AXISTest.java

package axisexercise;
  import org.apache.axis.client.Call;
  import org.apache.axis.client.Service;
  import org.apache.axis.encoding.XMLType;
  import javax.xml.rpc.ParameterMode;
  /**
  * @author 飞鹰
  */
  public class AXISTest
  {
  public static void main( String[] args ) throws Exception
  {
   Service service = new Service();
  Call call = ( Call ) service.createCall();
  //////////会见即时宣布的Distance处事
  //配置会见点
  call.setTargetEndpointAddress( "http://localhost:8080/axis/Distance.jws" );
  //配置 操纵名
  call.setOperationName( "convertMile2Kilometre" );
  //配置进口参数
   call.addParameter( "op1", XMLType.XSD_DOUBLE, ParameterMode.IN );
  call.setReturnType( XMLType.XSD_DOUBLE );
  Double d1 = new Double( 190 );
  //挪用处事
   System.out.println( d1 + " 英里相当于 " +
   call.invoke( new Object[] {d1} ) + " 公里!" );
   //////////会见定制宣布的Capacity处事
  call = ( Call ) service.createCall();
  //配置会见点
   call.setTargetEndpointAddress( "http://localhost:8080/axis/services/Capacity" );
   //配置操纵名
  call.setOperationName( "convertGallon2Litre" );
  //配置进口参数
   call.addParameter( "op1", XMLType.XSD_DOUBLE, ParameterMode.IN );
  call.setReturnType( XMLType.XSD_DOUBLE );
  d1 = new Double( 10.00 );
  //挪用处事
   System.out.println( d1 + " 加仑相当于 " +
   call.invoke( new Object[] {d1} ) + " 升!" );
  } //main()
  }/* AXISTest */

编译运行后运行可以看到以下 的功效:

190.0英里相当于305.71公里!

10.0加仑相当于45.46升 !

#p#分页标题#e#

留意措施在会见即时宣布的Distance处事和定制宣布的Capacity处事 时的差异,前者的处事会见点地点为 http://localhost:8080/axis/HelloWorld.jws,尔后者的则为 http://localhost:8080/axis/services/Capacity。

总结

Web Services是将来网络应用的成长偏向,SOAP和WSDL是Web Services的焦点协议, Axis给出了一个很好的SOAP实现,它使得开拓Web Services应用变得轻松而有趣 。

    关键字:

在线提交作业