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

面向 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
|
|
|
|
|
|
|