`
coolpep
  • 浏览: 80488 次
社区版块
存档分类
最新评论

实战Webservice (axis)

 
阅读更多
实战Webservice

一、 webservice简介

webservice 的概念是使用一个标准的输出接口来定义代码提供的功能,以便让外界可以通过这个标准的输出接口来调用,而所谓的标准输出接口就是wsdl。通过webservice,可以实现不同系统间的交互功能, 比如,我们可以在esp里调用vsb里的站点数据与功能,甚至可以操作CS架构的系统。

限于篇幅,关于webservice更深一步的概念、理论、应用场景等内容请自行查找资料研究,我们在这里只讲如何快速地给webapp增加web服务的能力。

二、Axis环境的搭建

Axis框架来自 Apache 开放源代码组织,它是基于JAVA语言的最新的 SOAP 规范的开放源代码实现,它为java应用服务器提供了标准的webservice能力。

1.下载Axis并解压

我们可以从 http://ws.apache.org/axis/index.html下载它的开发包。

2.加入所需lib

将axis/webapps/axis/WEB-INF/lib/目录下的jar文件复制到自己的WEB-INF/lib目录下。应包括以下jar文件:

axis.jar, axis-ant.jar, axis-schema.jar, commons-discovery-0.2.jar,

commons-logging-1.0.4.jar, jaxrpc.jar, log4j-1.2.8.jar, saaj.jar,wsdl4j-1.5.1.jar

3.修改web.xml

在WEB-INF/web.xml文件里增加以下内容

a) Servelet部分加入:

<servlet><servlet-name>AxisServlet</servlet-name> <display-name>Apache-Axis Servlet</display-name>

<servlet-class>org.apache.axis.transport.http.AxisServlet</servlet-class></servlet> <servlet><servlet-name>AdminServlet</servlet-name><display-name>Axis Admin Servlet</display-name>

<servlet-class>org.apache.axis.transport.http.AdminServlet</servlet-class>

<load-on-startup>100</load-on-startup></servlet>

b) servlet-mapping部分加入

<servlet-mapping><servlet-name>AxisServlet</servlet-name>

<url-pattern>/servlet/AxisServlet</url-pattern></servlet-mapping>

<servlet-mapping><servlet-name>AxisServlet</servlet-name>

<url-pattern>*.jws</url-pattern></servlet-mapping>

<servlet-mapping><servlet-name>AxisServlet</servlet-name>

<url-pattern>/services/*</url-pattern></servlet-mapping>

c) 还有listener

<listener><listener-class>org.apache.axis.transport.http.AxisHTTPSessionListener</listener-class></listener>

d) 最后再加入mime设定

<mime-mapping><extension>wsdl</extension>

<mime-type>text/xml</mime-type></mime-mapping>

<mime-mapping><extension>xsd</extension>

<mime-type>text/xml</mime-type></mime-mapping>

4.在WEB-INF下增加server-config.wsdd文件

如果我们不使用jws(java文件后缀改为jws)文件而是使用class文件进行webservice服务端的部署,就需要在在WEB应用程序服务端的WEB-INF/目录下部署一个名字为server-config.wsdd的xml文件。每部署一个新的WEB服务时,都需要将新服务的描述信息加入到server-config.wsdd中。

如果将server-config.wsdd与WEB应用描述文件web.xml一并放置在WEB-INF目录下, Web服务器启动时,就会自动加载WEB服务。

当每增加一个新服务时,就需要在server-config.wsdd增加一个service,service主要是由各类型的parameter元素组成,通过parameter可以对类中允许访问的方法和需要传递非基本类型的方法的参数类型进行注册。

如果方法中传递非基本类型时需要提供对类型的序列化方法,需要使用BeanMapping、typeMapping等指定对这些非基本类型提供序列化和反序列化的类,在后面的附件传输中将进行介绍。

下面给出最简洁的server-config.wsdd文件内容:

<?xml version="1.0" encoding="UTF-8"?>

<deployment xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"

xmlns="http://xml.apache.org/axis/wsdd/" xmlns:ns1="CmsServer">

<handler type="java:org.apache.axis.handlers.http.URLMapper" name="URLMapper"/>

<!--service name="StringUtil" provider="java:RPC">

<parameter name="allowedMethods" value="*"/>

<parameter name="className" value="webber.core.StringUtil"/>

</service--><!--sample: service定义的例子-->

<transport name="http"><requestFlow><handler type="URLMapper"/></requestFlow>

</transport></deployment>

Service部分只需要修改name(服务名)与parameter中className的value(具体提供服务的类)即可

三、实例

最简单的HelloWorld程序:

package sample;

publicclassHelloWorld{

publicStringsayHello(String name){

returnname + "HELLOWORLD!";

}

}

编译后放入 WEB-INFclasses下的类路径里,然后在server-config.wsdd增加相应的描述

<service name="HelloWorld " provider="java:RPC"><parameter name="allowedMethods" value=" * " />

<parameter name="className" value="sample. HelloWorld" /></service>

这样,webservice的服务端就搞定了!

我们可以写个客户端试验一下,TestClient.java:

importorg.apache.axis.client.Call;
importorg.apache.axis.client.Service;
importjavax.xml.rpc.ParameterMode;
publicclassTestClient
{
publicstaticvoidmain(String[]args)

throwsException

{

String endpoint = "http://localhost:8080/system/services/HelloWorld"; // 指明服务所在位置, system是webapp名,根据需要换成你自己的webapp
Serviceservice=newService(); //创建一个Service实例,注意是必须的!
Call call=(Call)service.createCall(); //创建Call实例,也是必须的!
call.setTargetEndpointAddress(endpoint); //为Call设置服务的位置
call.setOperationName(" sayHello "); //要调用HelloWorld中的方法名
Stringres=(String)call.invoke(newObject[]{“chen”});//传入的参数需要封装到object数组中,返回值可直接获取
System.out.println(res); //打印输出结果

}

}

在开发工具里执行这个类,你就能得到你想要的结果

四、进阶使用

1)传递参数的类型

建议传递的参数限定到一些标准的类型中以增强兼容性,如int等基本数据类型,还有String、Hashtable等;如果你把自己编写的类作为参数传递,就必须对自己的类进行序列化处理,而且可能会导致你的webservice只能由java编写的客户端进行调用。

2)Session的使用,有状态的webservice

上面我们讲的是单个的方法调用;如果你想进行一系列有关联的调用,并且在调用的过程中想要保持一些变量,可以考虑使用webservice提供的session机制:

客户端只要保证以下几点即可

a. 调用service.setMaintainSession(true);

b. 保持这个service,也即是说,后续操作使用同一个service进行即可

服务端对session的处理采用以下方法:

MessageContext mc = MessageContext.getCurrentContext();

Session session = mc.getSession();

得到Session后可进行set与get,内容在session有效期间一直保持,原理与jsp中的session类似。

3)附件传输

附件的传输我们可以借助于DataHandler,而DataHandler属于非基本类型,因此我们首先要在server-config中用typemapping指定一个用于附件序列化和反序列化的类。具体如下:

<typeMapping deserializer="org.apache.axis.encoding.ser.JAFDataHandlerDeserializerFactory"

languageSpecificType="java:javax.activation.DataHandler" qname="ns1:DataHandler"

serializer="org.apache.axis.encoding.ser.JAFDataHandlerSerializerFactory"

encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>

这样我们就可以在operation中用定义qname定义这种类型了,在客户端只要对该类型进行注册,我们就可以进行文件的传输了。进一步的操作,可以自行查阅相关文档。
值得注意的是,在文件传输的同时如果还要传输其他的类型要注意服务端和客户端的同步的问题。org.apache.axis.encoding.ser这个包中对很多类型都提供了序列化和反序列化的生成器,在传输其他的复杂类型时,我们都可以借助这个包里的工具。

分享到:
评论

相关推荐

    WebService之Axis2经典教程

    ### WebService之Axis2经典教程 #### 一、概述 随着信息技术的发展,Web Service作为一种重要的分布式计算模式,已经成为实现服务导向架构(SOA)的关键技术之一。Axis2作为一款流行的Web Service引擎,不仅具备高...

    WebService之Axis2教程

    ### WebService之Axis2教程知识点总结 #### 一、Axis2简介及应用场景 - **Axis2定义**:Axis2是一款高性能、轻量级且灵活的Web服务引擎,它基于Apache软件基金会开发,作为Apache Axis 1.x的下一代产品,不仅支持...

    MyEclipse下开发Web Service(Axis)

    #### 二、实战演练:SayHello Web Service 接下来,通过一个简单实例——SayHello服务,了解使用Axis开发Web Service的全流程。 **2.1 WSDL编写** - 在MyEclipse中创建一个Web Project,命名为`SayHello`。 - ...

    axis2的webService服务器端和客户端开发项目

    - **编写服务**: 创建服务接口和实现,使用Axis2的注解(如@WebService)进行标注。 - **部署服务**: 将服务打包成AAR,放入Axis2的部署目录,或者通过管理控制台在线部署。 - **生成客户端**: 使用wsdl2java工具...

    axis2 webservice 实例(包括服务端代码及客户端代码)

    标题中的“Axis2 WebService 实例”是指一个用于学习和实践Web服务开发的项目,它基于Apache Axis2框架。Apache Axis2是Java平台上的一个Web服务引擎,专门用于构建和部署Web服务。这个实例提供了服务端和服务端所需...

    java-webservice入门实战.doc

    Java WebService 入门实战主要涉及使用 Axis2 框架开发和部署 WebService 的基本步骤。Axis2 是Apache组织开发的一个Web服务引擎,它提供了更高效、更灵活的架构,支持SOAP 1.1和1.2协议,同时集成RESTful ...

    Axis2(webservice)详细教程教程

    ### Axis2(webservice)详细教程知识点概览 #### 一、Axis2简介与特性 - **Axis2**是一款由Apache软件基金会维护和支持的开源WebService引擎。它在**Axis1.x**的基础上进行了全面升级和重构,支持**SOAP 1.1**和**...

    axis2_demo实战 复杂对象传输 文件传输

    本实战案例将关注使用Axis2进行复杂对象传输以及文件传输,特别是如何通过Web服务来传递列表(List)、对象(Object)和文件。 首先,让我们深入理解`axis2 Demo`。Axis2 提供了一个强大的开发和部署环境,它支持多种...

    axis2开发文档 比较详细的介绍了axis2

    Axis2作为一款流行且强大的WebService引擎,其在集成多种技术、实现服务端方法的远程调用及在SOA架构中的数据交换方面表现卓越。对于初学者而言,深入理解Axis2的原理与实践尤为重要。本文将基于给定的文件信息,...

    AXIS2入门+进阶+webservice实例

    本资料集合包括了“AXIS2入门”、“AXIS2进阶”以及一个具体的“WebService实例”,旨在帮助初学者和有经验的开发者深入理解AXIS2及其在Web服务中的应用。 入门篇可能涵盖了以下内容: 1. **AXIS2基础概念**:介绍...

    简单银行系统(webservice,springsecurity,ssh,ant,axis,ftl)

    【标题】"简单银行系统(webservice,springsecurity,ssh,ant,axis,ftl)" 提供的是一个基于多个核心技术构建的银行系统实例。这个项目涵盖了Web服务、安全框架、Java开发工具链以及模板引擎等多个方面的内容,对于学习...

    axis学习资源,很不错的资料哦

    这很可能是一个详细的AXIS教程或者指南,涵盖了上述所有内容,包括基础概念、实战演练、常见问题解答以及可能的案例分析。阅读这份PDF文件,开发者可以深入了解AXIS的工作原理,学习如何利用AXIS开发、测试和部署Web...

Global site tag (gtag.js) - Google Analytics