WebService服务调用方法介绍
1 背景概述
由于在项目中需要多次调用webservice服务,本文主要总结了一下java调用WebService常见的6种方式,即:四种框架的五种调用方法以及使用AEAI ESB进行调用的方法。
2 预期读者
数通畅联内部员工
广大计算机爱好者
3 名词解释
Web Service也叫XML Web Service: WebService是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求,轻量级的独立的通讯技术。是通过SOAP在Web上提供的软件服务,使用WSDL文件进行说明,并通过UDDI进行注册。
XML:(Extensible Markup Language)扩展型可标记语言。面向短期的临时数据处理、面向万维网络,是Soap的基础。
Soap:(Simple Object Access Protocol)简单对象存取协议。是XML Web Service 的通信协议。当用户通过UDDI找到你的WSDL描述文档后,他通过可以SOAP调用你建立的Web服务中的一个或多个操作。SOAP是XML文档形式的调用方法的规范,它可以支持不同的底层接口,像HTTP(S)或者SMTP。
WSDL:(Web Services Description Language) WSDL 文件是一个 XML 文档,用于说明一组 SOAP 消息以及如何交换这些消息。大多数情况下由软件自动生成和使用。
UDDI (Universal Description, Discovery, and Integration) 是一个主要针对Web服务供应商和使用者的新项目。在用户能够调用Web服务之前,必须确定这个服务内包含哪些商务方法,找到被调用的接口定义,还要在服务端来编制软件,UDDI是一种根据描述文档来引导系统查找相应服务的机制。UDDI利用SOAP消息机制(标准的XML/HTTP)来发布,编辑,浏览以及查找注册信息。它采用XML格式来封装各种不同类型的数据,并且发送到注册中心或者由注册中心来返回需要的数据。
4 实现思路
通过soapUI工具使用四种WebService框架来生成客户端代码进行调用,或者使用Xfire的jar包中的的Client类进行调用,无需生成客户端代码,还可以使用AEAI ESB工具中的soup调用组件进行调用。
5 实现步骤
5.1 工具材料
soapUI-3.6.1:
soapUI是一个开源测试工具,通过soap/http来检查、调用、实现Web Service的功能/负载/符合性测试。该工具既可作为一个单独的测试软件使用,也可利用插件集成到Eclipse,maven2.X,Netbeans 和intellij中使用。
Axis:
axis全称Apache EXtensible Interaction System 即阿帕奇可扩展交互系统。Axis本质上就是一个SOAP引擎,提供创建服务器端、客户端和网关SOAP操作的基本框架。
Axis2:
Axis2是下一代 Apache Axis。Axis2 虽然由 Axis 1.x 处理程序模型提供支持,但它具有更强的灵活性并可扩展到新的体系结构。
Cxf:
Apache CXF = Celtix + XFire,开始叫 Apache CeltiXfire,后来更名为 Apache CXF 了,以下简称为 CXF。CXF 继承了 Celtix 和 XFire 两大开源项目的精华,提供了对 JAX-WS 全面的支持,并且提供了多种 Binding 、DataBinding、Transport 以及各种 Format 的支持,并且可以根据实际项目的需要,采用代码优先(Code First)或者 WSDL 优先(WSDL First)来轻松地实现 Web Services 的发布和使用。
Xfire:
XFire是新一代的Java Web服务引擎,XFire使得在JavaEE应用中发布Web服务变得轻而易举。
AEAI ESB
企业服务总线(Enterprise Service BUS,ESB)主要作为企业信息系统的“龙骨”来集成各业务系统,实现异构系统的互联互通。沈阳数通畅联软件技术有限公司推出的ESB产品命名为AEAI ESB。
AEAI ESB主要包含三个模块:服务器ESBServer、设计器ESBDesigner、管理控制中心。ESBServer是AEAI ESB的运行环境,基于定制的Tomcat 扩展开发,管理控制中心则是部署在ESBServer的Java Web应用,基于开发平台构建的。ESBDesigner是基于Eclipse Plugin开发的图形化、拖拽式的设计Web服务、消息流程的构建工具。
5.2 前置条件
创建web服务
使用AEAI ESB创建一个简单的接口(具体方法参见AEAI ESB集成平台技术手册5.2.7):样例中的web服务入参为三个数字,出参为三个数字相加得到的和。
soapUI工具配置
在soapUI中进行相关配置,如图:
在附件中有Apache文件夹,将文件夹放到指定路径下,在如下图进行配置
将四种框架的地址填写进对应的位置,还有jdk的位置,注意Xfire需要ANT的支持。
5.3 方法步骤
5.3.1 Axis框架
在soapUI的菜单栏中选择Tools中的Axis 1.x选项
在(1)处填写需要调用的web服务的URL
在(2)处填写生成的客户端代码的位置
点击(3)处按钮生成客户端代码
在对应的路径下找到代码文件
将代码拷贝到自己新建的 工程目录下
注意:出现缺包的错误时,将Apache中对应框架的文件家中的lib包导入即可,新建一个Test类,其中对应的测试调用代码如下:
public class Test { public static void main(String[] args)throws Exception { AddAllNum_ServiceLocator locator = new AddAllNum_ServiceLocator(); AddAllNumSoapBindingStub stub = (AddAllNumSoapBindingStub)locator.getAddAllNumPort(); System.out.println(stub.addNum("1", "2", "3")); } } |
运行结果:
5.3.2 Axis2框架
在soapUI的菜单栏中选择Tools中的Axis 2选项,如图:
在(1)处填写调用的接口的URL
在(2)处填写生成代码的位置
在(3)处填写包名
在(4)处注意通过adb模式进行生成
点击(5)处的按钮生成客户端代码
生成出来的代码以及文件都添加到新建的调用服务的工程中
将生成的客户端代码放入到新建的工程中,导入对应框架的包
新建Test类,对应的调用代码如下:
public class Test { public static void main(String[] args) throws Exception{ AddAllNumStub stub = null; stub = new AddAllNumStub(); AddAllNumStub.AddNum addNum = new AddAllNumStub.AddNum(); addNum.setNum1("1"); addNum.setNum2("2"); addNum.setNum3("3"); System.out.println(stub.addNum(addNum).getResult()); } } |
运行结果:
5.3.3 Cxf框架
在soapUI的菜单栏中选择Tools中的CXF选项,如图:
在(1)处填写需要调用的URL
在(2)处填写生成的代码文件的位置
在(3)处填写代码的包名
点击(4)处的按钮生成客户端代码
将生成的代码放到新建的工程中,导入CXF的包后在AddAllNum_Service.java中出现错误,将出错的地方注释,如图
创建Test类,测试调用接口
对应的测试调用代码如下:
public class Test { public static void main(String[] args) throws Exception { URL wsdlLocation = new URL("http://localhost:9090/TestWebServices/services/AddAllNum?wsdl"); AddAllNum_Service addAllNum_Service = new AddAllNum_Service(wsdlLocation); AddAllNum addAllNum = addAllNum_Service.getAddAllNumPort(); String result = addAllNum.addNum("2","3","4"); System.out.println(result); } } |
运行结果:
5.3.4 Xfire框架
第一种调用方式:生成客户端代码进行调用
在soapUI的菜单栏中选择Tools中的XFire1.x选项,如图:
在(1)处填入需要调用的web服务的URL
在(2)处填入生成客户端代码的位置
在(3)处填入生成的客户端代码的包名
在(4)处注意需要使用jaxb模式生成
点击(5)处的按钮生成客户端代码
将生成的代码放到到新建工程下,导入Apache文件夹下的xfire-lib目录下的包
创建Test类,对应的调用方法:
public static void main(String[] args) { AddAllNumClient addAllNumClient = new AddAllNumClient(); String result = addAllNumClient.getAddAllNumPort().addNum("1", "2","2"); System.out.println(result); } |
运行结果:
第二种调用方式:通过WSDl创建一个动态的客户端
新建工程,引入XFire对应的jar包(Apache目录下的xfire-lib目录中的包),注意此时需要在接口服务端的AddNum文件中添加一段代码
@SOAPBinding(style=Style.RPC) |
重新部署工程,如下:
在新建的工程中的Test类中的调用,如下图:
对应的调用代码,如下:
public class Test { public static void main(String[] args) throws MalformedURLException, Exception { String url = "http://localhost:9090/TestWebServices/services/AddAllNum?wsdl"; Client client = new Client(new URL(url)); String num1 = "2"; String num2 = "3"; String num3 = "4"; Object[] result = client.invoke("addNum",new Object[]{num1,num2,num3}); System.out.println(result[0]); } } |
运行结果:
5.3.5 Aeai Esb调用
首先在接口工程上右键,设置ESB应用
选择WS引用,将WSDL的地址添加进去,解析名称、生成代理
在MF服务目录下创建http消息流程TestSoupWeb
选择数据适配器
在JavaInvoker1组件中选择扩展代码,如图:
public void invoke() throws AdapteException{ AddNum addNum = (AddNum) this.xgetVariable("addNum").getValue(); addNum.setNum1("1"); addNum.setNum2("2"); addNum.setNum3("3"); } |
SoapInvoker1组件选择如图:
然后HttpResponse节点选择响应内容如图:
在浏览器调用HttpRequest节点中的URL
运行结果:
6 附件及说明
Apache目录:四种Web服务框架以及Ant工具
WebService目录:Web服务接口
Test目录:文档中涉及的四种框架五种调用的样例客户端工程
Sqls目录:AEAI ESB需要使用的数据库文件
Jdk目录:存放了soapUI配置时需要用到的JDK
WebService服务调用方法介绍文档及相关介质 下载
WebService服务调用方法介绍的更多相关文章
- [置顶]
WebService学习总结(4)——第三方webService服务调用
互联网上面有很多的免费webService服务,我们可以调用这些免费的WebService服务,将一些其他网站的内容信息集成到我们的Web应用中显示,下面就以获取天气预报数据和查询国内手机号码归属地为 ...
- webservice的调用方法
一.WebService在cs后台程序中的调用 A.通过命名空间和类名直接调用 示例: WebService ws = new WebService(); string s = ws.HelloWor ...
- PHPCMS新闻内容调用方法介绍
{template "content","header"} ---------- 调用根目录下phpcms\template\content\header文件 ...
- WebService服务介绍与调用
一: WebService简介 WebService是一个平台独立的,低耦合的,自包含的.基于可编程的web的应用程序,可使用开放的XML(标准通用标记语言的下的一个子集)标准来描述.发布.发现.协调 ...
- 使用CXF发布WebService服务简单实例
一.说明: 前面介绍了使用axis2来发布Webservice服务,现在介绍一种更popular,更高效的Webservice服务发布技术:CXF Apache CXF = Celtix + XFir ...
- eclipse使用CXF3.1.*创建webservice服务端客户端以及客户端手机APP(一)
eclipse使用CXF3.1.*创建webservice服务端客户端以及客户端手机APP(一) 本篇博客主要包含五个内容: 1.CXF换将搭建以及eclipse配置CXF. 2.eclipse创建w ...
- Java进阶(三十一) Web服务调用
Java进阶(三十一) Web服务调用 前言 有朋友问了一个问题:如何调用已知的音乐服务接口,服务文档如下: https://www.evernote.com/shard/s744/sh/c37cd5 ...
- 18_Android中Service的生命周期,远程服务,绑定远程服务,aidl服务调用,综合服务案例,编写一个应用程序调用远程支付宝远程服务场景
============================================================================ 服务的生命周期: 一.采用start的方式开始 ...
- 阿里云物联网 .NET Core 客户端 | CZGL.AliIoTClient:7. 服务调用
文档目录: 说明 1. 连接阿里云物联网 2. IoT 客户端 3. 订阅Topic与响应Topic 4. 设备上报属性 4.1 上报位置信息 5. 设置设备属性 6. 设备事件上报 7. 服务调用 ...
随机推荐
- 前沿技术解密——VirtualDOM
作为React的核心技术之一Virtual DOM,一直披着神秘的面纱. 实际上,Virtual DOM包含: Javascript DOM模型树(VTree),类似文档节点树(DOM) DOM模型树 ...
- <欧奈尔制胜法则—如何在股市中赚钱>读书笔记
在选择个股建仓时,要选择那些在最近季度报表中,每股收益比上年同期要有较大增幅的股票. 每股收益是指公司税后净利润除以公司普通股的总股本 选择年增长率为25%--50%的公司 年度盈利和季度盈利都要出色 ...
- WPF 模板
一.DataTemplate(数据模板)1.引用命名空间xmlns:别名="clr-namespace:命名空间" 2.调用命名空间下的类别和属性<Window.Resour ...
- 【转帖】四种BI 开源工具介绍-SpagoBI,openI,JasperSoft,Pentaho
四种BI 开源工具介绍-SpagoBI,openI,JasperSoft,Pentaho 1 BI系统的简述 从技术角度来说 BI 包含了 ETL.DW.OLAP.DM等多环节.简单的说就是把交易系统 ...
- 阿里云centos试用
今天体验了下阿里云的centos,起初用的官方推荐的putty方式来管理,全部使用命令行管理起来还是很别扭的. 后来通过百度了解到winscp,有了这个工具,管理起来就爽很多啦.整个centos的管理 ...
- vxworks下网络编程一:网络字节序问题
inet_addr("192.168.1.1");//返回网络字节序整型ip地址inet_ntoa(saddr);//将包含网络字节序整型ip地址的in_addr对象转换成本地ch ...
- Asp.net Request方法获取客户端的信息
Response.Write("客户端计算机名:" + Request.UserHostName + "<BR />"); Response.Wri ...
- python2.7.6 , setuptools pip install, 报错:UnicodeDecodeError:'ascii' codec can't decode byte
今天折腾了一天,安装pyspider,由于依赖包众多,而且搜索到所有信息多是在linux平台和mac平台下的安装教程.可怜我试了n多版本,一直不成功. 最后发现有人说python的版本,不能低于2.7 ...
- SAP的运输功能(转)
SAP的运输功能(transportation) transportation大体有三个作用: 1.运输计划transportation planning 概念:对outbound delivery ...
- mingW与cygwin
转自:http://hi.baidu.com/ooxxer/item/d25dccc072846a50ac00ef7e# 首先MingW和cygwin都可以用来跨平台开发. MinGW是Minima ...