E4X 提供者要求您使用 E4XProvider.jar(下面会用到)来更新 Axis 类路径,除此之外还要包含 rhino.jar 和 xbean.jar。
一旦更新了 Axis 类路径,您需要创建一个部署脚本并将其部署到 Axis 中。与使用一个 Java 实现的服务不同,在这个模型中我们不需要将任何代码部署到类路径中。相反,我们将代码放到部署描述符中,如本文中的一个例子 e4xstock.wsdd 所示。
清单 1. e4xstock.wsdd
<deployment name="test" xmlns="http://xml.apache.org/axis/wsdd/"
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<service name="E4XStock" provider="java:E4X">
<parameter name="type" value="body"/>
<documentation>
<![CDATA[
function service(x) {
var value = (x..*::Symbol=="IBM")?983:52.5;
var n = new Namespace("urn:quoteservice");
default xml namespace = n;
response =
<getQuoteReturn>
<Result>{value}</Result>
</getQuoteReturn>;
return response;
}
]]>
</documentation>
</service>
</deployment>
它首先定义了一套标准的命名空间(namespace)。 元素定义了服务名称和提供者类型:E4XProvider 所提供的 E4X。
parameter 标记使您可以配置提供者的参数。这里 E4X 提供者支持的唯一参数是 type,它的值可以是 body 或是 envelope。在这个例子中,“body”意味着脚本仅仅需要处理消息体元素。
E4X 提供者使用 documentation 元素来存储脚本。这是个极其简便的实现方法——明智的方法往往不是偶然的!字符串 允许我们在其中填写任意字符,包括脚本中的 "" 与 <>。
脚本本身定义了一个独立的函数,它以一个 XML 参数作为输入同时输出一个 XML。使用语法 x..*::Symbol 来摘取出符号。同时,这也是从 SOAP 主体中任意深度的任意命名空间来提取标记 Symbol。如果与等于“IBM”,我们设置值为 983。(好,对于我们的股票程序,我们已经有一点点希望了)否则,我们返回 52.5。
我们使用在第 1 篇文章中描述的 {} 语法来创建响应:
response =
<getQuoteReturn>
<Result>{value}</Result>
</getQuoteReturn>;
为了测试它,首先要象上面描述的那样正确设置类路径,以使 Axis 运行起来。我们假定 Axis 运行在本地 8080 端口。在本例中使用 SimpleAxisServer 已经足够了。现在键入:
> java org.apache.axis.client.AdminClient
-l "http://localhost:8080/axis/services/AdminService" e4xstock.wsdd
(所有这些必须输入在同一行)
