webservices说明.docx
- 文档编号:4459345
- 上传时间:2022-12-01
- 格式:DOCX
- 页数:19
- 大小:179.25KB
webservices说明.docx
《webservices说明.docx》由会员分享,可在线阅读,更多相关《webservices说明.docx(19页珍藏版)》请在冰豆网上搜索。
webservices说明
Axis是Apache的一个开源web service引擎。
它目前最为成熟的开源web service引擎之一。
下面我主要介绍一下如何使用该Axis开发您的web service 服务。
1、Axis简介
Axis是Apache组织推出的SOAP引擎,Axis项目是Apache组织著名的SOAP项目的后继项目,在http:
//tomcat.apache.org/下载axis-bin-1_3.zip。
2、安装
应用Axis开发WebServices,你需要有一个支持Servlet的服务器引擎,比如广为人知的Tomcat(Tomcat也是由Apache组织所提供的,目前的版本为5.0.9,下载地址为http:
//tomcat.apache.org/)。
在此之前当然你机器必须已经装好了JDK1.3以上的版本,当安装好Tomcat之后,只需将下载的Axis软件包解压缩,将其中的“webapps”目录下的“axis”目录整个拷贝到Tomcat安装目录下的“webapps”目录下即可
3、Axis的配置
Axis基于Java开发,可以部署于多种操作系统,使用前需要配置一系列的系统变量,在此假定你已经在本机上装好了Tomcat4.0以上的版本,需要配置的系统变量如下表所示:
CATALINA_HOME
C:
\tomcat-5.0.9
(此处应为Tomcat的安装位置,注意路径名中不要有空格)
AXIS_HOME
%CATALINA_HOME%\webapps\axis
AXIS_LIB
%AXIS_HOME%\lib
AXISCLASSPATH
%AXIS_LIB%\axis.jar;%AXIS_LIB%\axis-ant.jar;%AXIS_LIB%\commons-discovery.jar;%AXIS_LIB%\commons-logging.jar;%AXIS_LIB%\jaxrpc.jar;%AXIS_LIB%\log4j-1.2.8.jar;%AXIS_LIB%\saaj.jar;%AXIS_LIB%\wsdl4j.jar;%AXIS_LIB%\xml-apis.jar;%AXIS_LIB%\xercesImpl.jar
如果你不愿做这么繁琐的类路径设置,可以直接将axis软件包中“lib”目录下的所有.jar文件加入到系统环境变量CLASSPATH中即可。
4、Axis的测试
安装配置完毕后,应测试一下是否Axis可以正确运行了。
启动Tomcat服务器,在浏览器中访问http:
//localhost:
8080/axis/happyaxis.jsp,如果页面显示有错误,则需要回头检查一下相关配置是否正确,如果浏览页面能正确显示出系统组件、属性等参数配置信息,则表示安装成功,如下图所示
现在可以开始开发你的WebServices应用了
5、服务的发布
Axis提供了两种服务发布方式,一种是即时发布(InstantDeployment),一种是定制发布(CustomDeployment)。
使用即时发布
对即时发布的支持是Axis的特色之一,使用即时发布使用户只需有提供服务的Java类的源代码,即可将其迅速发布成Web服务。
每当用户调用这类服务的时候,Axis会自动进行编译,即使服务器重启了也不必对其做任何处理,使用非常简单快捷。
使用即时发布首先需要一个实现服务功能的Java源文件,将其扩展名改为.jws(JavaWebService的缩写),然后将该文件放到“……\webapps\axis”目录下即可。
开发webservice服务,其源码如下:
//文件名:
Test.java
public class Test{
//fields
private String name="gaga";
private int age=20;
private List items=new ArrayList();
//method at here.
public String getName(){
return name;
}
public int getAge(){
return age;
}
}
将其放到“……\webapps\axis”目录,通过访问http:
//localhost:
8080/axis/Test.jws?
wsdl可以看到这个服务的WSDL描述文件,这说明Distance服务被成功发布了。
如下图所示:
开发客户端程序,其源码如下:
//文件名:
TestClient.java
importorg.apache.axis.client.Call;
importorg.apache.axis.client.Service;
/**
*CreatedbyIntelliJIDEA.
*User:
zxl
*Date:
2006-1-27
*Time:
11:
12:
04
*TochangethistemplateuseFile|Settings|FileTemplates.
*/
publicclassTestClient{
publicstaticvoidmain(Stringargs[]){
System.out.println("Startinvoking....");
try{
Stringendpoint=
"http:
//localhost:
8080/axis/Test.jws";//你写的那个文件
Serviceservice=newService();
Callcall=(Call)service.createCall();
call.setTargetEndpointAddress(new.URL(endpoint));
call.setOperationName("getName");//填写你要调用的方法名称
Stringaa=(String)call.invoke(newObject[]{});
System.out.println(aa);
}catch(Exceptione){
System.err.println(e.toString());
}
System.out.println("Finishedtheinvoking.");
}
}
其中,org.apache.axis.client.Call和org.apache.axis.client.Service是两个比较常用的类,一般的客户端程序欲访问一个WebService时,都要生成一个客户端的Service对象和Call对象,在访问服务之前,首先要对Call对象设置相应的参数,包括服务的位置、操作名、入口参数、返回值类型等,最后调用Call对象的invoke方法访问服务
使用定制发布
即时发布是一项令人激动的技术,它使Web服务的开发变得如此简单;然而即时发布并不总是最好的选择,比如有些应用系统是第三方提供的,我们没有购买源代码,只有.class文件,但我们又希望将这个应用系统的一些功能对外发布成Web服务,使其能够在更大范围内产生作用,这个时候即时发布技术就无能为力了。
此外,即时发布技术并不灵活,无法进行更多的服务配置,这使得它并不能满足一些特定系统的需求。
SOAP中简单类型调用实例实践
因此,Axis提供了另一种服务发布方式,这就是定制发布。
其源码如下:
开发webservice服务,其源码如下:
//文件名:
Test.java
packagetest;
public class Test{
//fields
private String name="gaga";
private int age=20;
private List items=new ArrayList();
//method at here.
public String getName(){
return name;
}
public int getAge(){
return age;
}
}
将其编译成.class文件,放置到“……\webapps\axis\classes”目录下,即可着手进行发布。
定制发布不需要构建.jws文件,但必须创建服务发布描述文件deploy.wsdd(WebServiceDeploymentDescriptor的缩写),这个文件负责描述服务的名称、入口等信息,其内容如下:
文件deploy.wsdd
//xml.apache.org/axis/wsdd/" xmlns: java="http: //xml.apache.org/axis/wsdd/providers/java"> RPC"> 将该文件也放到“……\webapps\axis\samples\capacity”目录下,然后可以采用Axis提供的一个客户端管理工具——AdminClient来完成服务的定制发布。 在“……\webapps\axis\samples\capacity”目录下,运行: java-cp%AXISCLASSPATH%org.apache.axis.client.AdminClientdeploy.wsdd 可以看到以下运行结果: Processingfiledeploy.wsdd 这表明Test服务定制发布完成。 通过访问http: //localhost: 8080/axis/services/Test? wsdl可以看到这个服务的WSDL描述文件,这说明Test服务被成功发布了。 如下图所示: 开发客户端程序,其源码如下: //文件名: TestClient.java packagetest; importorg.apache.axis.client.Service; importorg.apache.axis.client.Call; importjavax.xml.rpc.encoding.XMLType; publicclassTestClient{ publicstaticvoidmain(Stringargs[]){ System.out.println("Startinvoking...."); try{ Stringendpoint= "http: //localhost: 8080/axis/services/Test";//你写的那个文件 Serviceservice=newService(); Callcall=(Call)service.createCall(); call.setTargetEndpointAddress(new.URL(endpoint)); call.setOperationName("getName");//填写你要调用的方法名称 call.setReturnType(XMLType.XSD_STRING); Stringaa=(String)call.invoke(newObject[]{}); System.out.println(aa); }catch(Exceptione){ System.err.println(e.toString()); } System.out.println("Finishedtheinvoking."); } } 注意程序在访问即时发布的Test服务和定制发布的Test服务时的不同,前者的服务访问点地址为http: //localhost: 8080/axis/Test.jws,而后者的则为http: //localhost: 8080/axis/services/Test。 SOAP中复杂类型(JavaBean)调用实例实践 一、简单开始: 1、创建两个JavaBean类Student.java packagecom.model; importjava.io.Serializable; publicclassServiceParaInimplementsSerializable{ //流程ID privateStringprocessID; //流程实例ID privateStringinstanceID; //实例名称 privateStringinstanceName; //活动ID privateStringactivityID; //活动名称 privateStringactivityName; //任务ID privateStringtaskID; //分到该任务的用户 privateStringuserID; //外部应用的对象ID privateStringobjectID; publicStringgetProcessID(){ returnprocessID; } publicvoidsetProcessID(StringprocessID){ this.processID=processID; } publicStringgetInstanceID(){ returninstanceID; } publicvoidsetInstanceID(StringinstanceID){ this.instanceID=instanceID; } publicStringgetInstanceName(){ returninstanceName; } publicvoidsetInstanceName(StringinstanceName){ this.instanceName=instanceName; } publicStringgetActivityID(){ returnactivityID; } publicvoidsetActivityID(StringactivityID){ this.activityID=activityID; } publicStringgetActivityName(){ returnactivityName; } publicvoidsetActivityName(StringactivityName){ this.activityName=activityName; } publicStringgetTaskID(){ returntaskID; } publicvoidsetTaskID(StringtaskID){ this.taskID=taskID; } publicStringgetUserID(){ returnuserID; } publicvoidsetUserID(StringuserID){ this.userID=userID; } publicStringgetObjectID(){ returnobjectID; } publicvoidsetObjectID(StringobjectID){ this.objectID=objectID; } } packagecom.model; importjava.io.Serializable; publicclassServiceParaOutimplementsSerializable{ //需要工作流引擎做出的响应,参见ServiceConstant定义 privateintresponse; //对于响应的描述信息 privateStringdesc; publicintgetResponse(){ returnresponse; } publicvoidsetResponse(intresponse){ this.response=response; } publicStringgetDesc(){ returndesc; } publicvoidsetDesc(Stringdesc){ this.desc=desc; } } 2、写Service程序 packagecom.service; importcom.model.ServiceParaIn; importcom.model.ServiceParaOut; publicclassinfoService{ //methodathere. publicServiceParaOutgetTest(ServiceParaInParaIn){ ServiceParaOutParaOut=newServiceParaOut(); ParaOut.setResponse (1); ParaOut.setDesc("getActivityID: "+ParaIn.getActivityID()); returnParaOut; } } 3、部署axis及部署service a.打开webapps/axis/WEB-INF/server-config.wsdd进行编辑,在 RPC"> ServiceParaOut"xmlns: myNS="urn: infoService"languageSpecificType="java: com.model.ServiceParaOut"/> ServiceParaIn"xmlns: myNS="urn: infoService"languageSpecificType="java: com.model.ServiceParaIn"/> 片断中infoService是这个webservice的名字,在客户端编码的时候需要用到。 中说明了这个服务提供的类,包括package的完整类名。 ServiceParaOut"xmlns: myNS="urn: infoService"languageSpecificType="java: com.model.ServiceParaOut"/>中说明对于这个JavaBean的传输需要如何对它进行serializing和de-serializing,说明的目的在于绑定JavaBean的对象类别。 注意标签中说明的名字空间。 这个标签其实是如下标签的一个简写: ServiceParaOut"xmlns: ns="urn: infoService"languageSpecificType="java: com.model.ServiceParaOut"serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory" encodingStyle="http: //schemas.xmlsoap.org/soap/encoding/"/> b.把编译好的ServiceParaOut.class、ServiceParaIn.class和infoService.class(在它们各自的包内)放到axis/WEB-INF/classes/. 4、重启动Tomcat,访问http: //localhost: 8080/axis/servlet/AxisServlet,查看你部署的服务。 5、编写客户端 编译及运行需要把axis/lib/除了axis_ant.jar外jar文件导入到classpath packagecom.client; import.URL; importjavax.xml.namespace.QName; importjavax.xml.rpc.ParameterMode; importorg.apache.axis.client.Call; importorg.apache.axis.client.Service; importorg.apache.axis.encoding.XMLType; importorg.apache.axis.encoding.ser.BeanDeserializerFactory; importorg.apache.axis.encoding.ser.BeanSerializerFactory; importcom.model.ServiceParaIn; importcom.model.ServiceParaOut; publicclassgetServiceClient{ publicstaticvoidmain(String[]args)throwsException{ Serviceservice=newService(); Callcall=(Call)service.createCall(); QNameqn=newQName("urn: infoService","S
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- webservices 说明