`

Axis2

 
阅读更多
http://wenku.baidu.com/view/a810d235eefdc8d376ee3230.html





Apache Axis2 是Axis的后续版本,是新一代的SOAP引擎。

Axis2 是对 Axis 进行了彻底的重写的一个新项目了,它使用了新的模块化架构,更方便于功能性的扩展等等


Axis2是一套崭新的WebService引擎,该版本是对Axis1.x重新设计的产物。Axis2不仅支持SOAP1.1和SOAP1.2,还集成了非常流行的REST WebService,同时还支持Spring、JSON等技术



wsdl2java -uri http:http://localhost:8888/axis2/services/SimpleService?wsdl -p client -s -o stub


安装AXIS2很简单,只需要将axis2-1.4.1-war.zip包中的axis2.war放到tomcat的webapps下面,启动tomcat,在地址栏中输入:http://localhost:8888/axis2,如果出现axis2的欢迎页面,就表示安装成功了。



在Axis2中,不需要进行任何的配置,就可以直接将一个简单的POJO发布成WebService,其中POJO中所有的public方法将被发布成Webservice方法,例如:
import java.util.Random;


public class SimpleService {

public String getGreeting(String name){
return "你好:"+name;
}

public int getPrice(){
return new Random().nextInt(1000);
}

}

编译后,将该类的.class文件放到webapps/axis2/WEB-INF/pojo目录(如果没有,则新建该目录)下即可,任何在地址栏中输入:http://localhost:8888/axis2/services/listServices,就可以列出发布的所有类。

在地址栏中分别输入下面的内容,就可以调用相应的WebService,并在页面中显示调用结果:
http://localhost:8888/axis2/services/SimpleService/getGreeting?name=cxm
http://localhost:8888/axis2/services/SimpleService/getPrice

在发布pojo类时要注意:
1.POJO类不能使用package关键字声明包;
2.Axis2在默认情况下可以热发布WebService,即只要把.class文件复制到pojo目录下,不需要重新启动tomcat就可以自动发布WebService。如果想取消Axis2的热发布功能,可以修改axis2/WEB-INF/conf/axis2.xml配置文件,<parameter name="hotdeployment">true</parameter>把true改为false即可。
3.axis2虽然支持热发布,但不支持热更新,就是说如果你修改了WebService,那必须重启tomcat才能生效,也可以修改配置文件,让axis2支持热更新,在同样的配置文件里修改<parameter name="hotupdate">false</parameter>即可
4.pojo目录是默认的发布目录,如果想改成其它目录还是修改配置文件axis2.xml,<deployer extension=".class" directory="pojo" class="org.apache.axis2.deployment.POJODeployer"/>



WebService是为程序服务的,只在浏览器中访问WebService是没有任何意义的。发布WebService主要是为了在客户端程序中调用,客户端调用WebService的代码如下:

package com.cxm;



import javax.xml.namespace.QName;

import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.client.Options;
import org.apache.axis2.rpc.client.RPCServiceClient;

public class TestWS {


public static void main(String[] args)throws Exception {

                // 使用RPC方式调用WebService
RPCServiceClient serviceClient=new RPCServiceClient();

Options op=serviceClient.getOptions();

                // 指定调用WebService的url,到对应的类即可
EndpointReference tergetEPR=new EndpointReference(
"http://localhost:8888/axis2/services/SimpleService");

op.setTo(tergetEPR);
// 指定方法接受的参数
Object[] opadd=new Object[]{"小敏"};

                // 指定返回值的类型
Class[] classes = new Class[]{String.class};
                // 指定WSDL文件的命名空间已经要调用的方法名称
QName qn= new QName("http://ws.apache.org/axis2","getGreeting");

                // 调用WebService并输出返回值
System.out.println(serviceClient.invokeBlocking(qn,opadd,classes)[0]);   
}

}

编写客户端代码时要注意:
1.客户端代码需要axis2的jar包,如果不确定需要哪些包,则应该保护所有axis2所有的jar包;
2.invokeBlocking方法的第一个参数为QName对象,表示要调用的方法名,第一个参数表示要传递给方法的参数,参数类型为Object[],如果方法没有参数列表,不能使用null,而应该使用new Object[]{};第三个参数是方法的返回类型,参数类型为Class[]。
3.如果WebService方法没有返回值,则应该调用invokeRobust方法,该方法只有两个参数,且与invokeBlocking的前两个参数的意义相同;
4.QName对象的第一个参数表示wsdl文件的命名空间名,即元素targetNamespaces属性的值.








在实际的应用中,不仅需要使用WebService来传递简单类型的数据,有时也需要传递更复杂的数据。
在Axis2中可以直接使用webService方法的参数或返回值来传递复合数据类型。但要注意,在定义数据类型时只能使用一维数组,如果要传递多维数组可以使用分隔符进行分割,例如:

String[] array  = new String[]("自行车,飞机,火箭","超人,蜘蛛侠,钢铁侠");


如果WebService类中有个方法如下:
public String[] getArray(){
String[] strArray=new String[]{"自行车","飞机","火箭"};
return strArray;
}

那么客户端程序就应该这样写:
qn= new QName("http://ws.apache.org/axis2","getArray");
String[] stra=(String[])serviceClient.invokeBlocking(qn,new Object[]{},new Class[]{String[].class})[0];

for(String s:stra){
    System.out.println(s);
}






如果定义了一个类,如下:
package data;

public class DataForm implements java.io.Serializable{

private String name="cxm";
private int age=27;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}

}

在WebService中有如下方法,要返回DataForm对象:
public DataForm getDataForm(){
return new DataForm();
}

那么在客户端就应该这样调用:
qn= new QName("http://ws.apache.org/axis2","getDataForm");
DataForm stras=(DataForm)serviceClient.invokeBlocking(qn,new Object[]{},new Class[]{DataForm.class})[0];

System.out.println(stras.getAge());
System.out.println(stras.getName());

注意:
1.一定要把DataFrom类所在的包引进来;
2.DataFrom由于该类定义在包data中,所以应该把该类放在WEB-INF/classes/data目录下;
3.通过序列化的方式传递对象实例只适用于客户端与服务器为同一种语言或技术的情况,因为.net和java序列化和反序列化存在着差异;
分享到:
评论

相关推荐

    axis2相关的jar包

    axis2-adb-1.5.4.jar axis2-adb-codegen-1.5.4.jar axis2-codegen-1.5.4.jar axis2-corba-1.5.4.jar axis2-fastinfoset-1.5.4.jar axis2-java2wsdl-1.5.4.jar axis2-jaxbri-1.5.4.jar axis2-jaxws-1.5.4.jar axis2-...

    axis2-idea-plugin-1.7.9.zip_axis2_axis2-idea-plugin_idea导入axis2_

    标题中的"axis2-idea-plugin-1.7.9.zip_axis2_axis2-idea-plugin_idea导入axis2_"提到了几个关键元素,分别是"axis2"、"idea-plugin"和"idea导入axis2",这暗示了这个压缩包是用于在IntelliJ IDEA这款集成开发环境...

    axis2-1.5.1-bin.zip axis2-1.5.1-war.zip axis2部署使用

    Apache Axis2是著名的开源Web服务框架,用于构建和部署高效且灵活的Web服务。这个框架是基于Axis1的升级版,提供了许多改进和新特性,包括更好的性能、模块化架构和增强的MIME支持。标题提到的“axis2-1.5.1-bin.zip...

    axis2的API,axis2 API,axis2帮助文档

    Axis2是Apache软件基金会开发的一个开源Web服务引擎,它提供了基于SOAP(Simple Object Access Protocol)的Web服务实现。本文将详细介绍Axis2的API及其在Web服务开发中的应用,同时也会探讨Axis2的帮助文档如何协助...

    Axis1,Axis2,Xfire,CXF区别

    Axis1, Axis2, Xfire, CXF 区别 Axis1, Axis2, Xfire, CXF 是四种常用的WebService框架,它们之间有着不同的特点和应用场景。本文将对这四种框架进行详细的比较和分析,以帮助开发者选择合适的框架。 XFire 是一种...

    axis2-1.6.2

    axis2-1.6.2.zip, windows axis2工具,根据 WSDL生成java文件。 1、axis2客户端下载地址:http://mirror.esocc.com/apache//axis/axis2/java/core/1.6.2/axis2-1.6.2-bin.zip; 2、下载解压在D:\Work_Program_...

    axis和axis2的一些发布差异(WSDL2Java) 收藏

    ### Axis与Axis2在WSDL2Java工具中的发布差异 #### 概述 本文将详细介绍Axis与Axis2在使用WSDL2Java工具进行服务发布的差异性。这两种工具都是Apache项目的一部分,它们为开发者提供了强大的Web服务支持。其中,...

    axis2-1.6.1

    标题“axis2-1.6.1”指的是Apache Axis2的1.6.1版本,这是一个流行的开源Web服务引擎,用于构建和部署Web服务。Apache Axis2是Axis1的下一代,设计为更灵活、可扩展且高效。在这个版本中,它提供了一系列改进和新...

    axis2发布webservice和调用axis2服务接口

    在IT行业中,Axis2是Apache软件基金会开发的一个用于构建Web服务和Web服务客户端的框架,主要基于Java语言。本文将详细讲解如何使用Axis2来发布Web服务以及如何生成客户端代码来调用这些服务。 首先,让我们了解...

    axis 1.x与axis2.x开发

    Axis分为两个主要版本:Axis1.x和Axis2.x,它们都是Java平台上的Web服务实现,但在设计和功能上有所不同。 Axis1.x是较早的版本,它在Web服务领域有着广泛的应用。Axis1.x基于Servlet API,提供了SOAP消息处理和...

    axis2 包括源码 文档

    Axis2是Apache软件基金会开发的一个开源Web服务框架,主要用于构建高度可扩展且模块化的Web服务。这个框架基于SOAP(简单对象访问协议)和WS-*(Web服务*规范集),为开发者提供了一种高效且灵活的方式来创建和部署...

    cxf与axis2区别

    CXF与Axis2框架区别详解 CXF和Axis2是两个流行的Webservice框架,都是由现有的项目逐渐演化而来的。Axis2是由Axis1.x系列演化而来,而Apache CXF则是由Celtix和XFire项目整合而生。在本文中,我们将探讨CXF和Axis2...

    axis2-1.6.2.zip

    Axis2是Apache软件基金会开发的一款Java Web服务框架,主要用于构建和部署Web服务。在Web服务领域,Axis2扮演着核心的角色,它提供了丰富的功能来支持服务导向架构(SOA)。标题中的"axis2-1.6.2.zip"指的是Axis2的...

    Axis_API和axis2_API

    在IT行业中,Web服务是应用程序之间进行通信的一种标准方法,而Axis和Axis2是两种流行的Java SOAP(简单对象访问协议)框架,用于构建和消费Web服务。本文将深入探讨这两个API,以及它们在Web服务开发中的作用。 ...

    axis2-1.4.1-bin.zip axis2-1.4.1-war.zip

    标题中的"axis2-1.4.1-bin.zip"和"axis2-1.4.1-war.zip"指的是Apache Axis2的两个不同版本的发行包,分别代表了Axis2的可执行二进制版本和Web应用程序版本。Apache Axis2是一个高度可扩展且功能强大的Web服务引擎,...

    axis2完整jar

    标题“axis2完整jar”指的是Axis2框架的完整Java Archive(JAR)文件集合,它是一个流行的开源Web服务实现平台,用于创建和部署SOAP和RESTful Web服务。这个描述简洁明了,暗示了我们讨论的核心内容是围绕Apache ...

    eclipse java axis2

    Eclipse Java Axis2 是一个基于Java的Web服务开发框架,由Apache软件基金会开发。它主要用于构建和部署SOAP(简单对象访问协议)Web服务。在Java环境中,Eclipse作为流行的集成开发环境(IDE),提供了强大的支持来...

    axis2-1.5.6完整版

    Axis2 是一个强大的 Web Service 框架,它是由 Apache 软件基金会开发的,主要用于构建和部署 Web 服务。版本 1.5.6 是 Axis2 的一个稳定版本,提供了一系列增强的功能和修复了若干已知问题,使得在 SAP 中进行 Web ...

    Axis2.jar包

    **标题:“Axis2.jar包”** **描述:**在IT行业中,开发Web服务是一个常见的任务,而Axis2是Apache组织提供的一款强大的Web服务框架,它主要用于构建和部署Web服务。"Axis2.jar"是该框架的核心组件,包含了运行时...

Global site tag (gtag.js) - Google Analytics