iis服务器助手广告
返回顶部
首页 > 资讯 > 后端开发 > Python >XFire体系及重要API(3)
  • 713
分享到

XFire体系及重要API(3)

体系XFireAPI 2023-01-31 02:01:45 713人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

根据WSDL生成客户端代码 XFire允许通过运行Ant任务,根据WSDL文件生成访问WEB Service的客户端代码存根,同时XFire还提供了一个Eclipse插件完成相同的任务。本节里,我们将学习通过XFire Eclipse插件生

根据WSDL生成客户端代码

XFire允许通过运行Ant任务,根据WSDL文件生成访问WEB Service的客户端代码存根,同时XFire还提供了一个Eclipse插件完成相同的任务。本节里,我们将学习通过XFire Eclipse插件生成BbtForumService客户端存根代码的知识。

安装Eclipse XFire 插件

1.Help->Software Updates->Find and Install...

2.选择“Search for new features to install”,并点击Next;

3.选择“New Remote Site...”,创建一个Name为XFire,URL为

Http://dist.codehaus.org/xfire/update/的网站;

4.点击Finish安装XFire插件。

使用插件创建客户端代码存根
File->New->Other...->XFire->Code generation from WSDL document; 
弹出一个对话框,如图3所示:


图3创建客户端代码存根

指定WSDL文件的位置,存根代码的输出地址及对应的类包,点击Finish。

XFire插件将在生成客户端代码存根的同时生成服务端代码的存根,如下图所示:


图4生成的代码

BbtForumServiceClient是BbtForumServicePortType的工厂类,它提供了若干个获取BbtForumServicePortType实例的重载方法。BbtForumServicePortType对应服务端的窄接口BbtForumService类。而BbtForumServiceImpl是服务端的存根代码,在META-INF中还有XFire的服务配置文件。对于客户端来说,一般不需要服务端的代码,所以你可以将BbtForumServiceImpl和META-INF删除。

下面,我们利用XFire生成的BbtForumServiceClient对服务端的Web Service进行调用:

package com.baobaotao.xfire.client;

public class StubClient {

public static void main(String[] args) {

BbtForumServiceClient client = new BbtForumServiceClient();

String serviceUrl = "http://localhost:8080/baobaotao/service/BbtForumService";

①获取对应服务窄接口实例

BbtForumServicePortType portType = client.getBbtForumServiceHttpPort(serviceUrl);

int count = portType.getRefinedTopicCount(20);②对服务进行调用

System.out.println("count:" + count);

}

}

我们首先实例化一个BbtForumServiceClient,然后通过URL指定Web Service的服务地址,然后创建一个服务的窄接口实例,如①所示,接着我们就可以使用这个窄接口实例进行Web Service服务的调用了。

Web Service的测试

在实际应用中,在开放Web Service之前需要进行严格的测试,以保证功能的正确性。在一般框架中,测试Web Service往往这是一个炼狱般痛苦的过程。

XFire通过AbstractXFireTest极大地简化Web Service的测试。AbstractXFireTest允许我们无需构造客户端调用程序,在SOAP报文层面开展对服务端代码的测试,AbstractXFireTest提供了一系列方便的方法对SOAP报文进行验证。XFire还特别为spring环境下进行Web Service测试提供了一个AbstractXFireSpringTest子类,仅通过启用Spring容器就可以完成Web Service的测试。通过XFire精心设计的测试工具类,对Web Service的测试工作已经是一项可以轻松应对的工作。

如果你在编写服务端Web Service的同时,还需要编写客户端调用程序,这时不可避免的,你希望从客户端角度对Web Service进行测试。由于客户端程序需要访问真实的Web Service,所以需要开启Web服务器,让服务端的Web Service能够提供服务共客户端访问调用。如果客户端和服务端都在同一个项目开发,XFire允许你在不启动Web服务器的情况下测试客户端程序,其原理是让Web Service运行于JVM模式下。

基于SOAP报文的纯服务端测试

AbstractXFireTest扩展于JUnit标准的TestCase类,提供了向某个Web Service发送SOAP请求报文并对返回的SOAP响应报文进行检验的能力。该测试类提供了若干个方便的断言方法,分别介绍如下:

void assertNoFault(Document node):确认SOAP响应报文无错误; 
java.util.List assertValid(java.lang.String xpath, java.lang.Object node):确认在DOM节点特定路径下有对应的元素,路径通过XPath表达式进行定义,该方法还将匹配的元素以List对象返回,你可以对匹配的元素进行进一步的检验; 
void assertXPathEquals(java.lang.String xpath, java.lang.String value, Document node):确认特定路径DOM节点为某一特定值; 
java.util.List assertValid(java.lang.String xpath, java.lang.Object node):确认DOM节点特定路径下未包含元素。 
AbstractXFireSpringTest是AbstractXFireTest的子类,在Spring中你仅需要扩展该类并实现该类的抽象方法ApplicationContext createContext(),就可以对Spring容器中用XFire定义的Web Service进行测试了。

为了测试Web Service,我们必须准备一个SOAP请求报文,你可以简单地手工编写一个,或通过SOAP报文截取工具(如前面我们介绍的tcpTrace、SOAPScope、Apache Axis的TCPMon等)获得一些可用的SOAP请求报文。下面是一个访问BbtForumService 服务的请求SOAP报文:

代码清单6 request_soap.xml:SOAP报文层面测试

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"

xmlns:xsd="http://www.w3.org/2001/XMLSchema"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

<soap:Body>

<getRefinedTopicCount

xmlns="http://server.xfire.baobaotao.com">

<in0 xmlns="http://server.xfire.baobaotao.com">20</in0>

</getRefinedTopicCount>

</soap:Body>

</soap:Envelope>

我们将其保存在request_soap.xml文件中放置在类路径com/baobaotao/xfire/server下。当该SOAP请求报文发送给BbtForumService的Web Service后,我们预计它应该返回对应代码清单7所示的正确的SOAP响应报文:

代码清单7 SOAP响应报文

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

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

<soap:Body>

<getRefinedTopicCountResponse xmlns="http://www.baobaotao.com">

<out>32</out>

</getRefinedTopicCountResponse>

</soap:Body>

</soap:Envelope>

下面,我们着手编写测试BbtForumService Web Service的测试类,以验证实际SOAP响应报文是否和代码清单7中的一样:

代码清单8 TestBbtForumService

package com.baobaotao.xfire.server;

import org.codehaus.xfire.spring.AbstractXFireSpringTest;

import org.jdom.Document;

import org.springframework.context.ApplicationContext;

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class TestBbtForumService extends AbstractXFireSpringTest {

protected ApplicationContext createContext() {①创建包含Web Service的Spring容器

return new ClassPathXmlApplicationContext(

new String[]);

}

public void testUsingSoapRequest() throws Throwable {

②通过SOAP请求报文访问BbtForumService的Web Service,对返回

SOAP响应报文进行检测

Document response = invokeService("BbtForumService",

"/com/baobaotao/xfire/server/request_soap.xml");

assertNoFault(response);③确认不包含错误

④为命名空间指定一个别名,方便后续XPath表示式的编写

addNamespace("k", "http://www.baobaotao.com");

assertValid("//soap:Body/k:getRefinedTopicCountResponse", response);⑤

assertXPathEquals("//k:getRefinedTopicCountResponse/k:out/text()", "32",response);⑥

printNode(response);⑦打印响应报文,以便肉眼查看

}

}

使用AbstractXFireSpringTest测试Web Service首先要做的第一件事是通过实现createContext()方法构造Spring容器,如①所示。当Spring容器启动时,XFire将自动让容器中的Web Service生效(仅进行测试,不能对外提供服务)。

第二步需要向Web Service发送一个SOAP请求报文以得到一个SOAP响应报文,如②所示。接下来,就是通过AbstractXFireTest提供的检测DOM内容的方法对报文进行正确性验证。由于代码清单7的SOAP报文体中对应的<getRefinedTopicCountResponse>元素及内部元素都位于http://www.baobaotao.com命名空间中,报文体中没有为这个命名空间定义相应的别名,为了在后续断言方法中能够使用简单的方式定义XPath表达式,我们在④处为http://www.baobaotao.com命名空间定义了一个别名。

理解以上测试代码中几个断言方法的关键在于理解XPath表达式语言,XPath语法内容很丰富,不可能在这里逐一讲解,我们在这里介绍一些典型的XPath语法以满足常见的测试需求:

以“/”为前缀的路径表示从DOM根路径开始,如“/soap:Envelope/soap:Body”; 
以“//”为前缀的路径表示从DOM任意元素开始查询,如“//out”表示任意元素为out的元素; 
元素的属性通过@attrName表示,如“//xsd:complexType[@name="Book"]”表示DOM中任意元素名为complexType并且拥有一个值为Book的name属性的元素; 
元素的值通过text()表示,如“//test:Response[text()='32']”表示DOM中任意值为32,元素名为Response,且位于test命名空间中的元素。 
现在回过头来看⑤、⑥两处的断言方法,相信大家就可以很容易地理解断言规则了,⑤处的断言检测SOAP响应报文是否包含某一特定元素,而⑥处的断言则对元素内的值进行检测。我们也可以通过printNode()方法将一个节点打印到控制台上,方便肉眼查看。

 

在JVM模式通过客户端进行测试

能够不启动Web服务器的情况下通过客户端程序测试Web Service的功能,这一崭新的测试方法对于开发人员来说一定深具吸引力。因为,这意味着你可以完全在IDE环境中运行测试,不需要外部环境的支持。

不过享受这一测试好处的应用必须保证客户端和服务端的Web Service都位于同一JVM中,这时请求报文和响应报文直接在JVM 内部通道中传输。当使用JVM内部通道传输请求和响应的SOAP报文时,我们仅需要调整服务的地址就可以了:

代码清单9 TextBbtForumService:JVM模式测试

package com.baobaotao.xfire.client;

import org.codehaus.xfire.client.XFireProxyFactory;

import org.codehaus.xfire.service.Service;

import org.codehaus.xfire.service.binding.ObjectServiceFactory;

import org.codehaus.xfire.spring.AbstractXFireSpringTest;

import org.springframework.context.ApplicationContext;

import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.baobaotao.xfire.server.BbtForumService;

public class TextBbtForumService extends AbstractXFireSpringTest {

protected ApplicationContext createContext() {

return new ClassPathXmlApplicationContext(

new String[]);

}

public void testGetRefinedTopicCount() throws Throwable {

Service serviceModel = new ObjectServiceFactory().create(BbtForumService.class);

XFireProxyFactory factory = new XFireProxyFactory(getXFire());

①在JVM内部通道中进行SOAP请求和响应报文的传输,请注意粗体所示的服务地址

BbtForumService service = (BbtForumService) factory.create(serviceModel,

"xfire.local://BbtForumService");

int count = service.getRefinedTopicCount(20);

assertEquals(count,32);

}

}

以上代码中,①处的服务地址采用了JVM模式的地址,和其对应的HTTP地址则是http://localhost:8080/baobaotao/service/BbtForumService,所以仅需将服务名前的部分替换为“xfire.local://”就可以了。

小结

比之于Axis,XFire在实施Web Service更加简洁高效,因此XFire在短短的时间里成为了Web Service开发者的炙手可热的框架。更可贵的是XFire对Spring提供了强大的支持,可以非常方便地在Spring中使用XFire实施Web Service。

XFire可以通过多种方式将Spring容器中的Bean导出为Web Service,这包括使用XFireExporter导出器或jsR 181注解。JSR 181和STAX一起都将融入到jdk 6.0中,因此,JSR 181 Web Service定义方式将成为标准的实现。

XFire为客户端提供了多种访问Web Service的方式,如果可以获取客户端的窄接口类,则可以采用窄接口类调用Web Service。如果仅能获取WSDL,XFire也可以采用动态反射的机制调用Web Service。XFire为Eclipse提供了一个可以根据WSDL生成客户端存根代码的插件,相信XFire也将为其它非Java语言提供类似的插件。

技术可用性的一个很大的标准是它是否方便测试,XFire为在Spring中测试Web Service提供了一流的支持,通过JVM模式,你能够在不启动Web容器的情况下测试Web Service,Web Service的测试工作变得不再象原来那样让人畏惧。 

--结束END--

本文标题: XFire体系及重要API(3)

本文链接: https://www.lsjlt.com/news/185576.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • XFire体系及重要API(3)
    根据WSDL生成客户端代码 XFire允许通过运行Ant任务,根据WSDL文件生成访问Web Service的客户端代码存根,同时XFire还提供了一个Eclipse插件完成相同的任务。本节里,我们将学习通过XFire Eclipse插件生...
    99+
    2023-01-31
    体系 XFire API
  • 财务系统的重要性及功能
    财务系统是企业或组织中不可或缺的一部分,它主要用于处理和管理财务信息,包括账户管理、记账、报账、财务报表分析等。本篇文章将详细阐述财务系统的重要性和功能。 财务系统的重要性提高工作效率:通过使用财务系统,企业可以自动化处理财务流程,提高工作...
    99+
    2023-12-13
    性及 财务 功能
  • 为什么Python API对Unix系统和数组如此重要?
    Python作为一种高级编程语言,一直以来都受到了开发者和数据科学家的青睐。它具有简单易学、可读性强、功能强大等特点,而Python API对Unix系统和数组的支持更是让它在数据处理和科学计算领域扮演着重要的角色。 一、Python AP...
    99+
    2023-08-06
    api 数组 unix
  • 薪酬管理系统的目及其重要性
    薪酬管理系统的目标是为了确保公平、有效地分配薪酬,以激励员工的生产力和工作表现。这个系统涉及到所有的薪酬决定,包括基本工资、奖金、福利和补贴等。本篇文章将详细探讨薪酬管理系统的具体目标,并分析其重要性。 薪酬管理系统的主要目标包括以下几个...
    99+
    2023-12-10
    管理系统 薪酬 重要性
  • 薪资考勤系统的重要性及优势
    # 随着企业的发展,员工管理成为了企业管理中一个重要的环节。薪资考勤系统作为一种自动化工具,可以帮助企业实现员工信息管理、考勤记录、工资计算等功能。本文将介绍薪资考勤系统的概念及其重要性,并探讨其在人力资源管理中的优势。薪资考勤系统的概念及...
    99+
    2024-01-14
    薪资 考勤 性及
  • 财务系统总账的重要性及应用
    财务系统总账是企业财务管理的重要工具,它能够为企业提供全面、准确、可靠的财务信息,帮助企业实现财务数据的统一管理、分析和决策。 本文将介绍财务系统总账的重要性,并通过实际案例展示其在企业管理中的应用。财务系统总账是一个综合性的财务管理系统,...
    99+
    2024-01-16
    总账 性及 财务
  • 实体关系图在数据库设计中的重要性
    实体关系图在数据库设计中非常重要,它可以帮助设计者更好地理解数据模型中的实体之间的关系和依赖。以下是实体关系图在数据库设计中的重要性...
    99+
    2023-10-12
    数据库
  • 工程管理系统的重要性及其应用
    工程管理系统是一种用于管理工程项目的技术工具,它能够帮助项目团队高效地组织、协调和控制工程项目的进度、资源和质量等方面的信息。本文将介绍工程管理系统的重要性和应用,并通过实例来展示其在实际项目中的具体运用。 1. 工程管理系统的重要性工程管...
    99+
    2024-01-16
    管理系统 及其应用 重要性
  • 财务核算系统的重要性及其应用
    财务核算系统是一种用于记录、处理和分析财务数据的软件系统。随着企业的不断发展,财务核算系统的重要性日益显现。本文将详细阐述财务核算系统的重要性及其应用。 一、财务核算系统的重要性财务核算系统对于企业的财务管理和决策制定具有重要意义。首先,它...
    99+
    2023-12-09
    及其应用 重要性 财务核算
  • 客户管理系统的重要性及其应用
    客户管理系统是企业中不可或缺的重要工具,它可以帮助企业更好地管理和维护客户关系,提高客户满意度和忠诚度,从而促进业务的发展和增长。本文将探讨客户管理系统的定义、特点和应用,并举例说明其在不同行业的实际应用。客户管理系统的定义和特点客户管理...
    99+
    2024-01-20
    及其应用 重要性 客户管理系统
  • 项目企业管理系统的重要性及应用
    # 项目企业管理系统是一种集项目管理、财务管理、人力资源管理等多功能于一体的综合性企业管理软件,能够帮助企业高效地管理项目和资源,提升企业的运营效率和管理水平。本文将介绍项目企业管理系统的重要性,并结合实际案例,探讨其在不同领域的应用。项目...
    99+
    2024-01-16
    管理系统 性及 项目
  • 培训机构管理系统的重要性及推荐
    培训机构管理系统是现代培训机构所必需的一种管理工具,它能够帮助培训机构实现教学资源的高效利用、学生信息的统一管理和教学效果的持续改进。本文将从培训机构管理系统的特点和优势出发,探讨其在培训机构中的重要性,并推荐一款优秀的培训机构管理系统。 ...
    99+
    2024-01-01
    管理系统 培训机构 性及
  • 企业培训系统开发的重要性及优势
    ## 企业培训系统开发是现代企业管理中的重要一环,它通过提供全面的培训资源和有效的学习平台,帮助企业员工提升职业技能和知识水平,促进企业的持续发展和竞争力的提升。本文将详细介绍企业培训系统开发的重要性和优势,并举例说明其在不同行业和企业中...
    99+
    2023-12-27
    企业培训 性及 优势
  • 财务系统绩效考核的重要性及实践
    本文将探讨财务系统绩效考核的必要性,并介绍几种常见的绩效考核方法和实践案例,以帮助组织更好地利用财务数据评估员工表现并促进持续改进。 在现代企业中,财务系统绩效考核起着至关重要的作用。它不仅能够帮助企业实现目标、提高效率,还能为员工提供一个...
    99+
    2023-12-28
    绩效考核 性及 财务
  • 购买客户管理系统系统的重要性及其应用
    随着信息技术的飞速发展,企业已经不再满足于传统的客户管理方式。在这样的背景下,购买客户管理系统系统已经成为了企业的必要选择。本篇文章将详细介绍购买客户管理系统系统的重要性以及其在企业中的应用。 一、购买客户管理系统系统的重要性提高工作效率:...
    99+
    2023-11-17
    及其应用 重要性 客户管理系统
  • 探索操作系统在物联网知识体系中的至关重要性
    ...
    99+
    2024-04-02
  • 广告客户管理系统的重要性及其应用
    广告客户管理系统是一种专门用于管理和优化广告投放的工具,它可以帮助广告主和广告代理商更好地了解广告客户的需求、行为和偏好,并提供个性化的广告服务。本文将介绍广告客户管理系统的重要性和应用,帮助读者更好地理解和利用这一工具。1. 个性化服务...
    99+
    2023-12-29
    及其应用 重要性 客户管理系统
  • 项目管理系统质量的重要性及其应用
    本文将探讨项目管理系统质量的重要性和应用,重点介绍项目管理系统在提高项目管理效率、减少风险和错误方面的作用,并提供一些实际案例来说明其在不同行业的应用。 在项目管理中,一个有效的项目管理系统对于确保项目顺利进行至关重要。项目管理系统质量是衡...
    99+
    2024-01-20
    管理系统 及其应用 重要性
  • 电力工程项目管理软件系统及其重要性
    电力工程项目管理软件系统是现代电力工程领域中不可或缺的工具之一。它可以帮助电力工程师有效地管理和监控项目进度,提高工作效率,减少工作错误和风险。 电力工程项目管理软件系统是一种用于电力工程项目的管理和控制的软件工具。它可以帮助电力工程师有...
    99+
    2023-12-11
    重要性 工程项目管理 电力
  • 绩效管理系统开发的重要性及应用场景
    绩效管理系统是企业内部管理和人力资源管理中非常重要的一部分。它可以帮助企业对员工的工作表现进行评估和考核,并提供数据支持来做出相应的决策。本文将介绍绩效管理系统的重要性和应用场景,以及其在企业管理中的作用。 1. 提升员工工作质量绩效管理系...
    99+
    2024-01-18
    管理系统 绩效 性及
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作