使用axis2进行webservice发布与调用
一、介绍下cxf、axis、axis2区别
新一代的Web Services 框架如Axis2、CXF 都是由现有的项目中逐渐演化而来的,Axis2 是由大家熟悉的Axis 1.x 系列演化过来,而Apache CXF 则是由Celtix和 XFire 项目整合而生,并且刚刚发布了2.0.2 的最新版本,不过仍是Apache 的一个孵化项目。
Axis2 是对Axis 进行了彻底的重写的一个新项目了,它使用了新的模块化架构,更方便于功能性的扩展等等。
Apache CXF 则是由XFire和 Celtix 两个现有的项目进行了重组。
问题:如果现有的应用程序是基于Axis 1.x、XFire或者 Celtix 的话,那应该怎么办?都迁移到这些新的框架上去吗?但是即使是要迁移,那应该迁移到哪个框架上去呢?
如果是编写一个新的Web Services 应用程序的话,就不存在迁移的问题了,但是哪个框架是你应当选择进行使用的呢?哪个比哪个更好呢?
对于现在的应用程序的迁移,如果你的应用程序是稳定成熟的,并且在可预知的未来的情况下,只要很少的一些需求变更要做的话,那么保存你的体力,不要去做“劳民伤财“的迁移工作了。
如果你的现有应用程序BUG缠身,性能,功能等等都一片糟糕的话,那就要考虑迁移了,那选哪个框架呢?先比较一下它们的不同之处:
1、Apache CXF 支持WS-Addressing、WS-Policy、WS-RM、WS-Security和WS-I BasicProfile
2、Axis2 支持WS-Addressing、WS-RM、WS-Security和WS-I BasicProfile,WS-Policy将在新版本里得到支持
3、Apache CXF 是根据Spring哲学来进行编写的,即可以无缝地与Spring进行整合
4、Axis2 不是
5、Axis2 支持更多的data bindings,包括XMLBeans、JiBX、JaxMe和 JaxBRI,以及它原生的data binding(ADB)。
6、Apache CXF 目前仅支持JAXB 和Aegis,并且默认是JAXB 2.0,与XFire默认是支持 Aegis不同,XMLBeans、JiBX和 Castor将在 CXF2.1 版本中得到支持,目前版本是 2.0.2
7、Axis2 支持多种语言,它有C/C++ 版本。
8、Apache CXF 提供方便的Spring整合方法,可以通过注解、Spring标签式配置来暴露Web Services和消费Web Services
如何抉择:
1、如果应用程序需要多语言的支持,Axis2 应当是首选了;
2、如果应用程序是遵循Spring 哲学路线的话,Apache CXF 是一种更好的选择,特别对嵌入式的Web Services 来说;
3、如果应用程序没有新的特性需要的话,就仍是用原来项目所用的框架,比如Axis1,XFire,Celtrix或 BEA等等厂家自己的 WebServices 实现,就别劳民伤财了
二、eclipse插件下载
2.1、打开下载地址
http://axis.apache.org/axis2/java/core/download.cgi

2.2 下载对应的版本

2.3、解压插件,解压后得到两个文件夹:axis2-eclipse-codegen-plugin-1.7.8和axis2-eclipse-service-plugin-1.7.8,拷贝至eclipse\plugins

2.4、重新启动Eclipse,如在File->New->Other中有Axis2 Wizards,说明插件安装成功。

三、Axis2服务发布与调用
3.1、建一个webservice-provider的web工程,新增一个HelloService服务
public class HelloService {
public String sayHello(){
return "Hello World";
}
public String sayHelloToPerson(String name){
if(name==null||name.equals("")){
name="nobody";
}
return "Hello " + name;
}
}
3.2 右击HelloService如图所示,生成具体的webservice服务


3.3 右击HelloService.java---Web Services---Create Web service.依次点击下一步……finish,此时发现WebContent目录下生成一个wsdl目录,目录下有一个HelloService.wsdl
3.4测试 web service :右击HelloService.wsdl---Web Services---Test with Web Services Explorer---点击方法名sayHelloToPerson----输入参数XXX---点go.此时会发现控制台输出Hello,XXX,说明 测试成功,WebService没有问题



注意如果不行的话,把wsdl删了,重新建一个。然后注意要在tomcat启动,否则服务发布不了
3.5 WebService服务调用,写一个测试类
import java.rmi.RemoteException;
import javax.xml.rpc.ParameterMode;
import javax.xml.rpc.ServiceException;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.encoding.XMLType; public class HelloServiceTest {
public String invokeRemoteFuc() {
// 远程调用路径
String endpoint = "http://localhost:8855/webservice-provider/services/HelloService";
//webservice的访问地址,这里是封装成了一个工具方法,根据文件名以及键来获取写在properties文件里的访问地址
// String endpoint = UtilProperties.getValueByKeyViaProp("myendpointAddress", "ws.properties");
//预定义失败的默认返回值
String result = "call failed!";
//步骤1 构建 org.apache.axis.client.Service 对象
Service service = new Service();
Call call;
try {
// 步骤2:通过org.apache.axis.client.Service对象创建一个Call,需要强转为 org.apache.axis.client.Call类型
call = (Call) service.createCall();
// 步骤3:设置目标地址,即需要访问的webservice地址
call.setTargetEndpointAddress(endpoint);
// 步骤4:设置调用的方法名
call.setOperationName("sayHelloToPerson"); // 步骤5: 设置参数名
call.addParameter("name", // 参数名
XMLType.XSD_STRING, // 参数类型:String
ParameterMode.IN); // 参数模式:'IN' or 'OUT' // 步骤6:设置返回值类型
call.setReturnType(XMLType.XSD_STRING); // 返回值类型:String
String name = "我是测试员";
//步骤7 :调用call.invoke(Object[] obj)方法
result = (String) call.invoke(new Object[] { name });// 远程调用
} catch (ServiceException e) {
e.printStackTrace();
} catch (RemoteException e) {
e.printStackTrace();
} return result;
} // 测试
public static void main(String[] args) {
HelloServiceTest test = new HelloServiceTest();
String result = test.invokeRemoteFuc();
System.out.println(result);
}
}
3.6、讲项目跑起来,测试:HelloWorldTest ---Run as---Java application,如果发现控制台正确输出Hello 我是测试员,说明测试成功

使用axis2进行webservice发布与调用的更多相关文章
- axis2 webservice 发布、调用与项目集成
发布 1.在apache官网下载axis2包,下载Binary Distribution和War Distribution两个zip. 2.将war放入tomcat webapps下部署.并输入 ht ...
- webService发布和调用--Axis2
一.工具 1.下载 Axis2以及eclipse的Axis2插件.http://axis.apache.org/axis2/java/core/download.cgi 2.axis2-1.7.1-w ...
- Apache CXF实现WebService发布和调用
第一种方法:不用导入cxf jars 服务端: 1. 新建Web工程 2.新建接口和实现类.测试类 目录结构图如下: 接口代码: package com.cxf.spring.service; imp ...
- WebService发布与调用问题:expected: {http://schemas.xmlsoap.org/soap/envelope/}Envelope but found: {http://schemas.xmlsoap.org/wsdl/}definitions
Mailbox===AsYVzdwoY_b6uD s>>>>>>>javax.xml.ws.Service@103bf65 hs>>>> ...
- 使用Axis2实现WebService的发布和调用
一.Axis2的下载和安装 1.可从http://ws.apache.org/axis2/ 下载Axis2的最新版本: 可以下载如下三个zip包: axis2-1.7.3-bin.zip(用 ...
- Axis2 webservice入门--Webservice的发布与调用
一.Webservice发布 参考 http://www.cnblogs.com/demingblog/p/3263576.html 二.webservice 调用 部分参考:http://www.c ...
- Axis2创建WebService服务端接口+SoupUI以及Client端demo测试调用
第一步:引入axis2相关jar包,如果是pom项目,直接在pom文件中引入依赖就好 <dependency> <groupId>org.apache.axis2</gr ...
- C# webservice 编写、发布、调用
采用的工具VS2010生成工程 1. 生成webservice工程:建 ASP.NET 空WEB 应用程序. 2. 在建好的ASP.NET 空WEB应用程序中新建项“web 服务”. 完成上述内容工程 ...
- python发布及调用基于SOAP的webservice
现如今面向服务(SOA)的架构设计已经成为主流,把公用的服务打包成一个个webservice供各方调用是一种非常常用的做法,而应用最广泛的则是基于SOAP协议和wsdl的webservice.本文讲解 ...
随机推荐
- idea中git合并切换分支等操作
https://blog.csdn.net/autfish/article/details/52513465
- Java值传递还是引用传递?
回顾: 在程序设计语言中,将参数传递分为按值调用和按引用调用.按值调用:表示方法接收的是调用者提供的值.而按引用调用表示方法接收的是调用者提供的变量地址.一个方法可以修改传递引用所对应的变量值,而不能 ...
- 深入理解虚拟机、容器和Hyper技术
本文首先介绍了操作系统,然后引出容器技术以及虚拟机技术,最后介绍了Docker和Hyper技术.通过本文可以清楚地对三者有感性认识. 操作系统概述 我们可以把操作系统简化为: 操作系统 = 内核 + ...
- js中object的copy
一.场景 在js中一个对象(Object)或者是一个数组(Array)在复制的过程中往往不是特别的简单,一般情况下我们会直接将其赋值给另外一个变量名下,就像这样: var a = [1,2,3]; v ...
- javascript简单介绍总结(一)
DOM (Document Object Model)(文档对象模型)是用于访问 HTML 元素的正式 W3C 标准.在 HTML 中,JavaScript 语句向浏览器发出的命令.语句是用分号分隔: ...
- bash echo color
原文:https://stackoverflow.com/questions/5947742/how-to-change-the-output-color-of-echo-in-linux $ ; i ...
- cvSmooth函数 和 OpenCV自带的人脸检测
记录cvSmooth函数的用法和 OpenCV自带的人脸检测. (1)cvSmooth函数 void cvSmooth( const CvArr* src, CvArr* dst,int smooth ...
- hdu 5975 Aninteresting game
Aninteresting game Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Other ...
- 【ccf2017-12-2】游戏(模拟)
问题描述 有n个小朋友围成一圈玩游戏,小朋友从1至n编号,2号小朋友坐在1号小朋友的顺时针方向,3号小朋友坐在2号小朋友的顺时针方向,……,1号小朋友坐在n号小朋友的顺时针方向. 游戏开始,从1号小朋 ...
- Java基础摘要(一)
三大特性 封装 所谓封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏.封装是面向对象的特征之一,是对象和类概念的主要特性.简单的说,一 ...