??xml version="1.0" encoding="utf-8" standalone="yes"?>久草中文综合在线,精品欧美乱码久久久久久,国产日韩二区http://www.aygfsteel.com/hhj/category/9078.htmlzh-cnTue, 27 Feb 2007 10:20:04 GMTTue, 27 Feb 2007 10:20:04 GMT60转:用Axis开发基于Java的Web服务http://www.aygfsteel.com/hhj/articles/37823.htmlHHJHHJTue, 28 Mar 2006 08:05:00 GMThttp://www.aygfsteel.com/hhj/articles/37823.htmlhttp://www.aygfsteel.com/hhj/comments/37823.htmlhttp://www.aygfsteel.com/hhj/articles/37823.html#Feedback0http://www.aygfsteel.com/hhj/comments/commentRss/37823.htmlhttp://www.aygfsteel.com/hhj/services/trackbacks/37823.html 概述

  本文介绍了一个比较简单实用的ZJava的SOAP引擎——Apachel织推出的Axis——的安装、配|和应用开发方法,希望Ҏ(gu)兴趣做基于Java的Web Services应用开发的朋友有所帮助?br />
Axis?br />
  Axis是Apachel织推出的SOAP引擎QAxis目是Apachel织著名的SOAP目的后l项目,目前最新版本是采用Java开发的1.1版本QC++的版本正在开发之中。Axis v1.1软g包可以从http://ws.apache.org/axis/dist/1_1/下蝲得到?

  Axis的安?/b>

  应用Axis开发Web ServicesQ你需要有一个支持Servlet的服务器引擎Q比如广Zh知的TomcatQTomcat也是由Apachel织所提供的,目前的最新版本ؓ4.1.24Q下载地址为http://jakarta.apache.org/builds/jakarta-tomcat-4.0/release/v4.1.24/Q。在此之前当然你机器必须已经装好了JDK1.3以上的版本,当安装好Tomcat之后Q只需下载的Axis软g包解压羃Q将其中的“webapps”目录下的“axis”目录整个拷贝到Tomcat安装目录下的“webapps”目录下卛_?/p>

  Axis的配|?/b>

  AxisZJava开发,可以部v于多U操作系l,使用前需要配|一pd的系l变量,在此假定你已l在本机上装好了Tomcat 4.0以上的版本,需要配|的pȝ变量如下表所C:

CATALINA_HOME
C:\Tomcat_4_1

Q此处应为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

  如果你不愿做q么J琐的类路径讄Q可以直接将axis软g包中“lib”目录下的所?jar文g加入到系l环境变量CLASSPATH中即可?/p>

  Axis的测?/b>

  安装配置完毕后,应测试一下是否Axis可以正确q行了?/p>

  启动Tomcat服务器,在浏览器中访?a href="http://localhost:8080/axis/happyaxis.jsp">http://localhost:8080/axis/happyaxis.jspQ如果页面显C有错误Q则需要回头检查一下相关配|是否正,如果览面能正显C出pȝlg、属性等参数配置信息Q则表示安装成功Q如下图所C:



  现在可以开始开发你的Web Services应用了?br />
服务的发?br />
  Axis提供了两U服务发布方式,一U是x发布QInstant DeploymentQ,一U是定制发布QCustom DeploymentQ?

  使用x发布

  对即时发布的支持是Axis的特色之一Q用即时发布用户只需有提供服务的Javacȝ源代码,卛_其q速发布成Web服务。每当用戯用这cL务的时候,Axis会自动进行编译,即服务器重启了也不必对其做M处理Q用非常简单快捗?/p>

  使用x发布首先需要一个实现服务功能的Java源文Ӟ其扩展名改?jwsQJava Web Service的羃写)Q然后将该文件放到“……\webapps\axis”目录下卛_?/p>

  在此l出一个从英里到公里的长度单位转换的服务,其源码如下:

文gDistance.jws

/**

* @author 飞鹰

*/

public class Distance

{

public double convertMile2Kilometre( double mile )

{

//实现英里到公里的距离转换

return mile * 1.609;

}//convertMile2Kilometre()

}/* Distance */

  其攑ֈ“……\webapps\axis”目录,通过讉Khttp://localhost:8080/axis/Distance.jws?wsdl可以看到q个服务的WSDL描述文gQ这说明Distance服务被成功发布了。如下图所C:



  使用定制发布

  x发布是一o人激动的技术,它Web服务的开发变得如此简单;然而即时发布ƈ不L最好的选择Q比如有些应用系l是W三Ҏ(gu)供的Q我们没有购买源代码Q只?class文gQ但我们又希望将q个应用pȝ的一些功能对外发布成Web服务Q其能够在更大范围内生作用,q个时候即时发布技术就无能为力了。此外,x发布技术ƈ不灵z,无法q行更多的服务配|,q得它q不能满一些特定系l的需求?/p>

  因此QAxis提供了另一U服务发布方式,q就是定制发布?/p>

  在此l出一个从加仑到升的容U单位{换的服务Q其源码如下Q?/p>

  文gCapacity.java

package samples.capacity;

/**

* @author 飞鹰

*/

public class Capacity

{

public double convertGallon2Litre( double gallon )

{

//实现加仑到升的容U{?/p>

return gallon * 4.546;

}//convertGallon2Litre()

}/* Capacity */

  其~译?class文gQ放|到“……\webapps\axis\samples\capacity”目录下Q即可着手进行发布?/p>

  定制发布不需要构?jws文gQ但必须创徏服务发布描述文gdeploy.wsddQWeb Service Deployment Descriptor的羃写)Q这个文件负责描q服务的名称、入口等信息Q其内容如下Q?/p>

  文gdeploy.wsdd

<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>

  该文g也放到“……\webapps\axis\samples\capacity”目录下Q然后可以采用Axis提供的一个客L理工具——AdminClient来完成服务的定制发布?/p>

  在“……\webapps\axis\samples\capacity”目录下Q运行:

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

  可以看到以下q行l果Q?/p>

Processing file deploy.wsdd

<Admin>Doneprocessing</Admin>

  q表明Capacity服务定制发布完成?/p>

  通过讉Khttp://localhost:8080/axis/services/Capacity?wsdl可以看到q个服务的WSDL描述文gQ这说明Capacity服务被成功发布了。如下图所C:




服务的访?br />
  GET方式的服务访?/b>

  一般的SOAP消息都是采用POST方式实现传递,但也可以通过GET方式来访问。比如以下给出的一个服务——“HelloWorld”,其源码如下:

文gHelloWorld.jws

/**

* @author 飞鹰

*/

public class HelloWorld

{

public String helloWorld()

{

//在服务器端打印输?/p>

System.out.println( "Hello World!" );

//q回相应字符?/p>

return "Hello World!";

}//helloWorld()

}/* HelloWorld */

  q个服务l出一个名位“helloWorld”的无入口参数的操作Q返回一个内容ؓ“Hello WorldQ的字符东y,同时在服务器端打印“Hello WorldQ”,该文g攑ֈ“……\webapps\axis”目录下Q即可通过GETҎ(gu)直接讉K该服务,讉K的地址为http://localhost:8080/axis/HelloWorld.jws?method=helloWorldQ可以看到返回的SOAP信封消息Q同时服务器端给Z相应的显CZ息“Hello WorldQ”这表明HelloWorld服务被成功访问了。如下图所C:



  客户端服务访问编E?/b>

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

  其中Qorg.apache.axis.client.Call和org.apache.axis.client.Service是两个比较常用的c,一般的客户端程序欲讉K一个Web ServiceӞ都要生成一个客L的Service对象和Call对象Q在讉K服务之前Q首先要对Call对象讄相应的参敎ͼ包括服务的位|、操作名、入口参数、返回值类型等Q最后调用Call对象的invokeҎ(gu)讉K服务?/p>

  以下l出了一个客L讉KWeb服务的例E——AXISTest.javaQ?/p>

  文gAXISTest.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();

//////////讉Kx发布的Distance服务

//讄讉K?/p>

call.setTargetEndpointAddress( "http://localhost:8080/axis/Distance.jws" );

//讄操作?/p>

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} ) + " 公里Q? );

//////////讉K定制发布的Capacity服务

call = ( Call ) service.createCall();

//讄讉K?/p>

call.setTargetEndpointAddress( "http://localhost:8080/axis/services/Capacity" );

//讄操作?/p>

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 */

  ~译q行后运行可以看C下的l果Q?/p>

  190.0英里相当?05.71公里Q?/p>

  10.0加仑相当?5.46升!
 
  注意E序在访问即时发布的Distance服务和定制发布的Capacity服务时的不同Q前者的服务讉K点地址为http://localhost:8080/axis/HelloWorld.jwsQ而后者的则ؓhttp://localhost:8080/axis/services/Capacity?/p>

  ȝ

  Web Services是未来网l应用的发展方向QSOAP和WSDL是Web Services的核心协议,Axisl出了一个很好的SOAP实现Q它使得开发Web Services应用变得L而有?br />

        注明

       转蝲?span class="postbody">http://www.yesky.com/SoftChannel/72342371961929728/20030821/1723269.shtml



HHJ 2006-03-28 16:05 发表评论
]]>
վ֩ģ壺 | | | ԭ| ÷| ¬| | Ϫ| | | Ľ| | ƽ| ϰ| | | | ɽ| | ̩| ʯʨ| | | | | | | Ī| | ij| ˮ| | | ʡ| ˫| | | ǭ| | Ҧ| |