`
agileai
  • 浏览: 58586 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
社区版块
存档分类
最新评论

WebService服务调用方法介绍

阅读更多

1 背景概述

由于在项目中需要多次调用webservice服务,本文主要总结了一下java调用WebService常见的6种方式,即:四种框架的五种调用方法以及使用AEAI ESB进行调用的方法。

2 预期读者

  1. 数通畅联内部员工

  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服务入参为三个数字,出参为三个数字相加得到的和。

wKiom1ZNMWfgOEWEAABo1qKNSvs304.png

  • soapUI工具配置

在soapUI中进行相关配置,如图:

wKioL1ZNMdOhEDVfAAHjAv4LDVY877.png

 

wKiom1ZNMYCgi50qAAHqbkf6AWI323.png


在附件中有Apache文件夹,将文件夹放到指定路径下,在如下图进行配置

wKiom1ZNMabjmEoVAAIx1OxhinY118.png


将四种框架的地址填写进对应的位置,还有jdk的位置,注意Xfire需要ANT的支持。

5.3 方法步骤

5.3.1 Axis框架

在soapUI的菜单栏中选择Tools中的Axis 1.x选项

wKiom1ZNMcHDt9geAAHwKnxSyXw646.png


在(1)处填写需要调用的web服务的URL
在(2)处填写生成的客户端代码的位置
点击(3)处按钮生成客户端代码

wKioL1ZNMjXQQULdAAEbMIGsY4U358.png


在对应的路径下找到代码文件

wKiom1ZNMfeAxiUGAAIOSkolvfo825.png


将代码拷贝到自己新建的 工程目录下

wKioL1ZNMpKQi6PQAADaJo5Mdlg284.png


注意:出现缺包的错误时,将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"));
    }
 
}
 

运行结果:

wKiom1ZNMmDjL6lxAAIAkTM-oK4538.png

5.3.2 Axis2框架

在soapUI的菜单栏中选择Tools中的Axis 2选项,如图:

wKioL1ZNMsvzLIPsAAIHjS4YH6M700.png


在(1)处填写调用的接口的URL
在(2)处填写生成代码的位置
在(3)处填写包名
在(4)处注意通过adb模式进行生成
点击(5)处的按钮生成客户端代码

wKiom1ZNMpHRVHL7AAEHCEnEiWQ421.png


生成出来的代码以及文件都添加到新建的调用服务的工程中

wKioL1ZNMwDhXkLmAAGiruwIPZo598.png


将生成的客户端代码放入到新建的工程中,导入对应框架的包

wKiom1ZNMsaB3Yl1AADqev6kSfw873.png


新建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());
    }
}
 

运行结果:

wKioL1ZNMzuB4eM6AAITZAMEyAc077.png

5.3.3 Cxf框架

在soapUI的菜单栏中选择Tools中的CXF选项,如图:

wKioL1ZNM1bg4GcHAAH-8POuP6s509.png


在(1)处填写需要调用的URL
在(2)处填写生成的代码文件的位置
在(3)处填写代码的包名
点击(4)处的按钮生成客户端代码

wKiom1ZNMxuyJgNtAAExa4G8nrY098.png


将生成的代码放到新建的工程中,导入CXF的包后在AddAllNum_Service.java中出现错误,将出错的地方注释,如图

wKioL1ZNM4ShZjGkAAMwGRjw_rA898.png

创建Test类,测试调用接口

wKioL1ZNM6Oym9CxAAKTucouVvU869.png


对应的测试调用代码如下:

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);
    }
}

运行结果:

wKiom1ZNM27zKRQcAAMmiCMMN-0411.png 

5.3.4 Xfire框架

  • 第一种调用方式:生成客户端代码进行调用

在soapUI的菜单栏中选择Tools中的XFire1.x选项,如图:

wKioL1ZNM9nx3pB6AAIJa_OeUIc594.png


在(1)处填入需要调用的web服务的URL
在(2)处填入生成客户端代码的位置
在(3)处填入生成的客户端代码的包名
在(4)处注意需要使用jaxb模式生成
点击(5)处的按钮生成客户端代码

wKiom1ZNM56QmyX8AAEOvl6AaQo610.png


将生成的代码放到到新建工程下,导入Apache文件夹下的xfire-lib目录下的包

wKioL1ZNNAvSC1mcAADDcHdtcT4935.png


创建Test类,对应的调用方法:


    public static void main(String[] args) {
        AddAllNumClient addAllNumClient = new AddAllNumClient();
        String result = addAllNumClient.getAddAllNumPort().addNum("1", "2","2");
        System.out.println(result);
    }

运行结果:

wKioL1ZNNG_QWnB6AAHgIKZpmwY547.png

 

  • 第二种调用方式:通过WSDl创建一个动态的客户端

新建工程,引入XFire对应的jar包(Apache目录下的xfire-lib目录中的包),注意此时需要在接口服务端的AddNum文件中添加一段代码

@SOAPBinding(style=Style.RPC)

重新部署工程,如下:

wKioL1ZNNR_hknpaAAGWTPXc4j0013.png


在新建的工程中的Test类中的调用,如下图:

wKiom1ZNNN6gpPuRAADMTiNbFLM848.png


对应的调用代码,如下:

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]);
    }
}

运行结果:

wKioL1ZNNUmAKjYOAAH6QBGoJ0c343.png

5.3.5 Aeai Esb调用

首先在接口工程上右键,设置ESB应用

wKiom1ZNNQzz3i1vAACpK1gP3Do075.png


选择WS引用,将WSDL的地址添加进去,解析名称、生成代理

wKiom1ZNNRzDh4MSAACxgyCeu4M970.png


在MF服务目录下创建http消息流程TestSoupWeb

wKiom1ZNNTHSi2B-AACRVTJKvik134.png


选择数据适配器

wKioL1ZNNZmyPgQrAAGQUv21Eeo959.png


在JavaInvoker1组件中选择扩展代码,如图:


public void invoke() throws AdapteException{
        AddNum addNum = (AddNum) this.xgetVariable("addNum").getValue();
        addNum.setNum1("1");
        addNum.setNum2("2");
        addNum.setNum3("3");
    }
 

SoapInvoker1组件选择如图:

wKioL1ZNNbqh6VBYAAC8hvOppQA079.png


然后HttpResponse节点选择响应内容如图:

wKiom1ZNNXexFy4gAACuhmVbuZg255.png


在浏览器调用HttpRequest节点中的URL

wKiom1ZNNYmgFqg8AAHyVPATmpw532.png


运行结果:


wKiom1ZNNZvQ0yj7AADE6CVij7c050.png

6 附件及说明

Apache目录:四种Web服务框架以及Ant工具
WebService目录:Web服务接口
Test目录:文档中涉及的四种框架五种调用的样例客户端工程
Sqls目录:AEAI ESB需要使用的数据库文件
Jdk目录:存放了soapUI配置时需要用到的JDK


WebService服务调用方法介绍文档及相关介质                下载

分享到:
评论

相关推荐

    C# webservice 服务调用工具类,源码

    C# webservice 服务调用工具类。 此工具 对 post get 请求进行了封装,只需要传递对应的URL以及参数即可返回JSON 或者XML 的字符串。 是非常有用的调用远程接口的服务类。 webservice

    VC++中WebService服务的调用

    **调用服务方法**:通过代理类的成员函数调用WebService的方法,并传递参数。 e. **处理响应**:接收并解析服务返回的数据,通常会是一个XML文档。 在“TranslateConsole”这个文件名中,我们可以猜测这可能是一...

    webservice接口调用实例

    这个类封装了与服务交互的细节,开发者可以直接调用其方法。 3. **配置连接信息**:设置服务的URL、端口等连接信息,确保客户端能够找到并连接到Web Service。 4. **构造请求消息**:根据WSDL定义的接口,准备调用...

    QT环境下Webservice服务调用,客户端

    本篇文章将详细介绍如何在QT中构建客户端,以实现对Java服务器端Webservice服务的有效调用。 首先,理解Webservice的概念至关重要。Webservice是一种基于互联网的、可互操作的应用程序接口,它允许不同系统之间交换...

    WebService调用的几种方式

    这些存根类提供了与服务交互的方法,使得开发者可以像调用本地方法一样调用远程服务。 2. CXF:Apache CXF是一个全面的服务开发框架,支持SOAP和RESTful风格的Web服务。相比于Axis,CXF提供了更现代的API和更好的...

    webservice 各种调用方法汇总

    本汇总将详细阐述在项目开发中常见的Web服务调用方法。 1. SOAP(Simple Object Access Protocol)调用: SOAP是一种基于XML的协议,用于在Web上交换结构化和类型化的信息。它通过HTTP或HTTPS传输数据,确保跨平台...

    WSDl生成WebService接口及调用

    - 创建服务代理:使用服务的WSDL URL,生成服务客户端代理类,这个代理类提供了调用服务的方法。 - 设置服务端点:配置代理类,指定服务的实际运行地址。 - 调用服务:通过代理类的方法,传递必要的参数,调用...

    webservice调用,传参代码样例

    Web服务(WebService)是一种基于标准协议的,可互操作的软件接口,允许不同系统之间进行数据交换和功能调用。在本案例中,我们将重点讨论如何使用Axis框架来调用Web服务并传递参数。 首先,我们需要理解Web服务的...

    webservice异步调用

    在 EzoneService 的构造函数中,我们调用了 InitializeComponent() 方法,该方法是 ASP.NET Web 服务设计器所必需的。 在 EzoneService 中,我们定义了一个名为 HelloWorld 的方法,该方法使用 [WebMethod] 属性...

    WebSevice,,,调用webservice服务的方法访问数据库

    现在要求用户能够注册自己的信息,能够...在aspx页面后台禁止直接访问数据库。考生必须自己建立一个webservice服务,在服务里写好对数据库的增、删、改、查的方法,然后页面后台通过调用webservice服务的方法访问数据库

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

    1. **创建WebService**:在Axis2中,可以通过编写一个简单的Java类并暴露其方法作为Web服务接口。这个类通常会遵循SOAP协议,定义服务操作。例如,你可以创建一个名为`HelloWorldService`的类,包含一个`sayHello`...

    .net调用webservice接口例子

    在.NET框架中,调用Web服务接口...总结来说,.NET调用Web Service接口涉及到添加服务引用、生成代理类、配置连接、调用方法以及异常处理等步骤。在实际项目中,开发者需要结合具体的业务需求和接口文档进行细致的操作。

    C#动态调用WebService服务

    首先,我们需要读取配置文件获取服务URL,然后使用Type类的GetMethod方法找到WebService的特定方法,最后通过Activator.CreateInstance创建服务代理类的实例,并调用相应的方法。 以下是一个简单的示例代码: ```...

    java客户端调用webservice所调用的axis1.4包和方法调用

    本方法是用axis1.4技术,实现java客户端调用webservice。已经可实现过可行的,如果不行可加我QQ号302633进行详细解析。

    在WinForm程序中调用WebService

    - 在新建的WebService项目中,如`MyBankService.cs`,你需要定义服务的方法,这些方法将被WinForm客户端调用。例如,你可以创建一个处理支付请求的方法,如下所示: ```csharp [WebMethod] public bool ...

    webService客户端调用服务端传对象参数

    这个工程详细的介绍了webService服务客户端如何调用简单和复杂的webService,其中就包括传递的参数是对象类型,返回数据是数组类型,还有最简单的基本类型。压缩包里还配置说明,清晰的说明webService的整个过程,对...

    webservice8 异步调用webservice

    当我们谈论“webservice8 异步调用webservice”时,这通常指的是在Axis2框架下,使用RPCServiceClient类的invokeNonBlocking方法来实现Web服务的异步调用。 传统的同步调用方式会导致客户端程序在等待服务响应期间...

    Java调用WebService接口的方法

    7. **调用方法**:最后,通过`call.invoke()`方法执行实际的WebService调用。此方法接收一个参数数组,其中包含所有输入参数的值。在成功调用后,返回的结果会被转换为预期的类型(在这个例子中是`Integer`)。 8. ...

    C#调用JavaWebService

    调用WebService,最简单的办法当然是直接添加WEB引用,然后自动产生代理类,但是在调用JAVA的WebService时并没有这么简单,特别是对于SoapHeader的处理,通过C#添加Web引用方式访问JavaWebService的方法,除了string...

    webservice 客户端调用公共方法

    在本示例中,我们将深入探讨如何使用Java的URLConnection和JAXB库来调用Web服务的公共方法,这对于开发跨平台的应用程序尤其有用。 首先,让我们了解`URLConnection`。它是Java标准库中的一个类,用于打开和处理与...

Global site tag (gtag.js) - Google Analytics