axis框架_如何扩展Axis2框架以支持基于JVM的脚本语言

axis框架

本文介绍了如何扩展Axis2框架以支持基于Java虚拟机(JVM)的脚本语言,例如Jython,JRuby等。它提供了对该主题的高级概述,涵盖了Apache Axis2的一些关键概念以及如何实现。用于提供对基于JVM的脚本语言的扩展。 在阅读完本文之后,开发人员将能够扩展Axis2框架以支持他或她选择的基于JVM的脚本语言。 扩展Axis2框架后,很容易:

  1. 将脚本部署为Web服务。
  2. 用所选的脚本语言编写服务客户端。

Apache Axis2是一个开源Web服务引擎。 它是对广泛使用的Apache Axis SOAP堆栈的完全重新设计和重写。 Axis2不仅提供向Web应用程序添加Web Service接口的功能,而且还可以充当独立的服务器应用程序。 Apache Axis2支持SOAP以及广泛流行的REST风格的Web服务。 您可以使用Axis2同时公开与WS- *样式接口以及REST / POX样式接口相同的业务逻辑实现。

JVM最初被设计为仅支持Java编程语言。 但是,随着时间的流逝,越来越多的语言(包括许多脚本语言)被移植到了平台上。 JVM现在支持广泛的脚本语言,例如Jython,JRuby,ColdFusion等。为简单起见,本文使用Jython作为其脚本语言,但是所描述的技术也可以同样地应用于其他语言。

Jython是Java中Python编程语言的实现。 它是一种编程混合体,展现了Java和Python的优势。 由于Jython用Java 100%编写,因此使用Jython编写的脚本将在任何兼容的JVM上运行,并且可以像使用Python模块一样使用现有的Java库。

Web服务实现方法

Web服务是可用于构建面向服务的体系结构(SOA)的技术的集合。 尽管关于SOA和Web服务之间的关系似乎普遍存在混淆,但重要的是要知道Web服务是采用标准协议执行SOA的实现方法。 Web服务开发中有两种广泛使用的技术,即代码优先和联系优先:

使用代码优先方法,首先要考虑代码。 您从Java代码开始,并由此生成了Web服务协定(WSDL)。 相反,“合同第一”强调服务合同;“合同第一”强调服务合同。 您从WSDL合同开始,并使用Java或代码生成工具来实现该合同。 合同优先的方法有一些优点。 它促进:

  • 应用程序之间的松耦合
  • 多种服务之间的互操作性
  • 使用抽象隐藏基础实现细节
  • 各方之间的合作与协议

在考虑“代码优先”方法时,它的一些优点是:

  • 简单且耗时少
  • 可用于将遗留系统公开为Web服务
  • 不需要对WSDL有深入了解

也就是说,在设计服务合同时,您始终可以选择使用代码优先或合同优先的技术。 最终,决定取决于您是否更在意确保互操作性或提高生产率。 因此,本文将展示如何扩展Apache Axis2以支持这两种技术。

扩展Axis2框架以支持代码优先方法

Axis2包含一个功能强大的基于XML的客户端API。 该API可用于开发Java服务客户端。 现在,我们的要求是以脚本语言编写服务客户端,并且我们选择Jython来进行说明。

为了允许Jython使用Axis2客户端库,我们需要围绕Axis2的客户端API开发包装器库。 开发包装器库是为了在现有功能主体之上创建一个抽象层。 此时,我们正在重新定义Axis2 Client API的接口以接受Jython脚本。

上图显示了API的体系结构。 执行Jython客户端脚本时,将创建并执行一个映射Java服务客户端。 然后进行Web服务调用,并将结果传递回您的客户端脚本。 可以在此处找到有关Axis2服务客户端API的更多信息。

通过客户端API发送SOAP消息时,将激活输出管道。 输出管道将调用处理程序,并终止于传输发送器,该发送器将SOAP消息发送到目标端点。 SOAP消息由传输接收器接收,传输接收器读取SOAP消息并启动入管道。 In Pipe由处理程序组成,并以Jython消息接收器结尾,该接收器使用SOAP消息并将其移交给应用程序。

以下代码段显示了正在调用Web服务的Jython客户端。

from org.wso2.wsf.jython.client import WSClient
from org.wso2.wsf.jython.client import WSFault
from org.wso2.wsf.jython.client import WSMessage

req_payload_string = "<webSearch><appid>ApacheRestDemo</appid><query>Sri Lanka</query><form/></webSearch>"
LOG_FILE_NAME = "/home/heshan/IdeaProjects/MRclient/src/jython_yahoo.log"
END_POINT = "http://search.yahooapis.com/WebSearchService/V1/webSearch"

try
        client = WSClient({ "to" : END_POINT,
		            "http_method" : "GET",
			    "use_soap" : "false"},
			 LOG_FILE_NAME)
	req_message = WSMessage(req_payload_string, {})
	print " Sending OM : " , req_payload_string
	res_message = client.request(req_message)
	print " Response Message: " , res_message
	
except WSFault, e:
	e.printStackTrace();

扩展Apache Axis2以支持合同优先方法

Axis2代码生成器

对于代码生成,Axis2包含一个代码生成模块,称为Axis2代码生成器。 代码生成器允许合并多个数据绑定框架,并且易于扩展。 因此,可以将代码生成工具扩展为支持脚本语言。 在深入探讨如何扩展该工具的细节之前,让我们看一下Axis2代码生成器。

当您考虑使用SOAP处理引擎时,关键的附加价值之一就是基于WSDL的代码生成。 它:

  1. 为用户提供便利-代码生成工具可帮助用户以简单有效的方式使用框架。
  2. 充分利用该框架的潜力。

现在让我们看一下Axis2代码生成器的体系结构。

该工具的体系结构非常简单。 核心处理WSDL并构建对象模型。 然后,针对模板对构建的对象模型进行解析以构建源代码。

扩展Axis2代码生成器以支持脚本语言

代码生成引擎一个接一个地调用扩展,最后调用一个称为Emitter的组件。 Emitter是在代码生成过程中完成大量工作的实际组件。 发射器通常取决于语言,因此一种语言与一种发射器相关联。 因此,应该有一个发射器来支持Jython代码生成。 上图显示了这种简单而强大的体系结构。

Emitter处理WSDL并构建对象模型。 对象模型只是一个XML文件,其中包含有关Axis2 信息模式 l(即,轴服务,轴操作,轴消息等)的WSDL的对象模型。 模板是一个XSLT文件,其中包含有关应如何生成代码的信息。 最后,根据模板对构建的对象模型进行解析,以构建Jython源代码。

为了支持“合同优先”方法,您需要为服务生成框架和消息接收器。 我们已经编写的通用消息接收器将不起作用,因为它仅适用于有限的架构结构。 我们可以使用Axis2中的现有基础结构来做到这一点。 Axis2创建一个表示WSDL的中间XML结构,我们必须在该结构上运行2个XSLT,以创建框架类和消息接收器。 借助这些XSLT和代码生成工具,我们可以在Jython中支持Contract First Web服务。 最后,可以使用消息接收器和框架在Jython中编写服务客户端。

服务器端

本节将讨论如何将您的业务逻辑公开为Web服务。

在Axis2中公开Jython Web服务的要求的解决方案在于Axis2的可插拔部署程序概念。 为了公开用Jython编写的服务,我们将与Jython消息接收器一起编写自定义部署程序。

消息接收器使用SOAP消息并将其移交给应用程序。 消息接收者是管道中的最后一个处理程序。 有关消息接收器和Axis2体系结构的更多信息,请参考文档

部署者需要将Jython数据类型映射到XML模式数据类型。 此过程称为数据绑定。 之后,借助数据绑定和方法注释,将为Jython服务生成XML模式。 接下来,将生成的XML模式以及与AxisService有关的元数据都提供给Axis2引擎。 Axis2引擎将使用它创建WSDL,并且您的Jython服务将作为Web服务公开。 如果您有兴趣了解有关部署程序的更多信息,建议您阅读有关Axis2部署的文章-自定义部署程序

上图显示了此解决方案的体系结构。 传入的SOAP消息由传输侦听器接收,并通过处理程序链传递。 然后将其提供给Jython消息接收器,该接收器遍历Axis Object Model(AXIOM)结构并检索相关信息。 检索到的信息将传递到Jython服务。 然后,将执行Jython服务,并将生成的对象传递回Jython消息接收器。 在Jython消息接收器中,从返回的Jython对象中创建AXIOM结构。 然后,响应通过处理程序链发送到传输发件人。 传输发件人将响应发送到客户端。 上面解释的过程针对每个交换的SOAP消息进行。

Jython服务的部署方式

在部署时,将读取Jython脚本的注释。 然后将动态Jython类型映射到静态Java类型。 此过程称为数据绑定。 映射对应的匹配类型之后,将在服务之外创建XML模式。 以下步骤描述了如何从Jython服务中生成XML模式:

  1. 读取Jython服务的注释。
  2. 为Jython服务创建了一个AxisService。
  3. 为每个Jython方法创建一个AxisOperation。
  4. AxisMessage已添加到操作中。 它包含方法参数的类型。
  5. 每个AxisOperation都添加到AxisService中。
  6. 最后,生成Jython消息的XML模式。

生成的AxisService被提供给Axis2引擎。 最后,Axis2引擎从中生成WSDL。

结论

可以以支持基于JVM脚本语言的方式扩展Apache Axis2。 进行扩展后,用户可以使用JVM脚本语言扩展来公开服务并编写服务客户端。

翻译自: https://www.infoq.com/articles/axis2_scripting/?topicPageSponsorship=c1246725-b0a7-43a6-9ef9-68102c8d48e1

axis框架

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值