扩展Axis2框架,支持基于JVM的脚本语言

本文介绍了如何扩展Axis2框架,以支持Jython、JRuby等基于Java虚拟机(JVM)的脚本语言。文章对这一主题进行了高层次概述,包括Apache Axis2的一些关键概念,以及如何利用Axis2为基于JVM的脚本语言提供扩展。读完此文,开发人员可以扩展Axis2框架,来支持基于JVM的脚本语言。Axis2框架扩展之后,可以轻松做到如下两点:

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

Apache Axis2是开源的Web服务引擎。它对应用广泛的Apache Axis SOAP堆栈进行了彻底的重新设计和编写。Axis2不仅能为Web应用添加Web服务接口,还能作为独立的服务器应用运转。Apache Axis2支持SOAP协议,也支持备受欢迎的REST风格Web服务。使用Axis2,你可以将业务逻辑实现暴露为WS-*风格的接口,与此同时,也可以将该实现暴露为REST/POX风格的接口。

\

设计JVM的初衷仅仅是为了支持Java编程语言。但随着时间的流逝,越来越多的语言移植到了Java平台,其中包括很多脚本语言。JVM现在支持诸多脚本语言,比如Jython、JRuby、ColdFusion等。简单起见,本文选择了Jython,不过描述的技术同样适用于其他语言。

\

Jython是Python编程语言的Java实现。它取Java、Python两者之所长,是这两种语言的混合编程。由于Jython是完全用Java编写的,所以用Jython编写的脚本能运行在任何兼容的JVM上,并能使用现有的Java库(这些Java库得是Python模块)。

\

Web服务的实现方法

\

Web服务是构建面向服务的体系架构(SOA)的一组技术。尽管SOA和Web服务之间的关系通常很容易混淆,但Web服务是一种实现技术,它采用标准协议来执行SOA,理解这一点很重要。开发Web服务的技术中,使用较为广泛的两种是代码优先和契约优先:

\

使用代码优先的方法,主要关注点是给出代码;你要先编写Java代码,再根据Java代码生成Web服务契约(WSDL)。相比之下,契约优先强调的则是服务契约;你先编写WSDL契约,然后使用Java或代码生成工具实现该契约。契约优先的方法有一些好处,它能促进:

\
  • 应用之间的松散耦合\
  • 多个服务之间的互操作性\
  • 抽象的使用,从而隐藏底层的实现细节\
  • 所有参与方之间的协作和一致的达成\

代码优先的方法则有如下优势:

\
  • 简单、省时\
  • 能将遗留系统暴露为Web服务\
  • 不用深入了解WSDL的相关知识\

这就是说,在设计服务契约时,你可以在代码优先和契约优先两种技术中择其一。最终的决定则取决于你是更想确保互操作性,还是更想提高生产力。本文将展示如何扩展Apache Axis2,使其对两种方式都进行支持。

\

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

\

Axis2包含一个基于XML的客户端API,功能甚为强大。这个API可用来开发Java服务客户端。现在的需求是用脚本语言编写服务客户端,我们选择Jython进行演示。

\

要让Jython与Axis2客户端库协作,我们需要开发Axis2客户端API的包装库。开发该包装库的目的是在现有功能主体之上创建一个抽象层。此时,我们要重新定义Axis2客户端API的接口,使其能接受Jython脚本。

\

04c09cb05985ecac8ed2e928db16c27e.jpg

\

上图显示了API的架构。当执行Jython客户端脚本时,会创建并执行一个相映射的Java服务客户端。接着会进行Web服务调用,将结果返回给客户端脚本。要获得更多有关Axis2服务客户端API的信息,请参看这里

\

通过客户端API发送SOAP消息时,会激活输出管道(Out Pipe)。输出管道将调用各个处理器,最终由传输发送者(Transport Sender)把SOAP消息发送给目标端点。SOAP消息由传输接收者(Transport Receiver)接收,传输接收者会读取SOAP消息、启动输入管道(In Pipe)。输入管道由一些处理器组成,终端是Jython消息接收者(Message Receiver),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 = \"\u0026lt;webSearch\u0026gt;\u0026lt;appid\u0026gt;ApacheRestDemo\u0026lt;/appid\u0026gt;\u0026lt;query\u0026gt;Sri Lanka\u0026lt;/query\u0026gt;\u0026lt;form/\u0026gt;\u0026lt;/webSearch\u0026gt;\"\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,\\t\t            \"http_method\" : \"GET\
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值