首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

面向 Jython 的 Web 服务框架简介-2 WSF/Jython 特性

面向 Jython 的 Web 服务框架简介-2 WSF/Jython 特性

WSF/Jython 特性下面列出了 WSF/Jython 的服务器端和客户端特性。
服务器端特性
  • 支持使用 Jython 编写的服务
  • DataBinding 支持使用简单的注释机制
  • 自动 WSDL 生成
  • 支持将 Axis2 的所有企业特性公开给使用 Jython 编写的服务
客户端特性
  • 支持以简单、简洁的方式调用 Web 服务
  • 支持在调用服务时使用 WS-Addressing
  • 支持调用需要 WS-Security 的服务
  • 支持使用 MTOM 发送二进制附件
编写 Jython 服务现在,我们将编写一个简单的 Jython 脚本,在其中实现一个名为 deduct 的操作。它接收两个输入变量,并返回这两个数值的差。由于我们需要执行 XML 模式生成,因此必须为 Jython 脚本添加注释。添加了注释的 Jython 方法如下例所示。            
清单 1. 简单服务
1
2
3
4
#@annotate("returns=int", "operationName=deduct", var1="integer", var2="integer")
def deduct(var1,var2):
    var3 = var1 - var2
    return var3




在注释 Jython 脚本时应该遵循的步骤如下:
  • 注释以 #@annotate 作为开头。
  • 每个属性都应该包含在双引号中。
  • return 属性应该与方法的返回类型相同。
  • operationName 属性应该与方法的操作名称相同。
  • 各输入参数应该有自己的变量名和值。
  • 各参数应该有一个唯一的引用名。
清单 2. 注释
1
#@annotate("returns=int", "operationName=deduct", var1="integer", var2="integer")




使用限制在部署 Jython 脚本时,必须遵循以下指导方针:
  • 应依照上述注释机制对脚本进行注释。
  • 参数名(引用变量)应该使用唯一的名称。
  • 如果没有返回类型,则必须将它指定为 hashNone。
  • 在 axis.xml 中添加以下内容():
清单 3.  添加到 axis.xml 中的内容
1
2
3
<deployer extension=".py" directory="scripts"
class="org.wso2.wsf.jython.deployer.JythonDeployer">
</deployer>




一个简单的服务依照上述关于注释的说明,您可以编写一个简单的 Jython 服务(如下所示),并借助 Jython 部署程序将它公开为 Web 服务。
清单 4. 示例服务
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#@annotate("returns=double", "operationName=f", a="double")
def f(a):
    return a

#@annotate("returns=int", "operationName=add", var1="integer", var2="integer")
def add(var1,var2):
    return var1+var2

#@annotate("returns=double", "operationName=deduct", var1="double", var2="double")
def deduct(var1,var2):
    return var1-var2

#@annotate("returns=int", "operationName=addTwo", var1="integer", var2="integer",
var3=(a="string", b="integer"))
def addTwo(var1,var2,var3):
    return var1+var2

#@annotate("returns=int", "operationName=doComplexStuff", var1="integer",
var2="(a="integer", b="integer")", var3="(a="string", b="integer")")
def doComplexStuff(var1,var2,var3):
    return var1

class MyClass:
    #@annotate("returns=integer", "operationName=MyClass.multiply", var1="integer",
    var2="integer")
    def multiply(var1,var2):
        return var1*var2

返回列表