![[AIX Solaris HP-UX Linux Windows]](../images/dist.gif)
![[z/OS]](../images/ngzos.gif)
Intelligent Management:SOAP 操作数
使用子表达式实用程序构建器中的 SOAP 操作数,此构建器是一个可选工具,可帮助您通过使用 AND、OR、NOT 和括号分组从子表达式构建复杂的规则条件。
规则
每个工作类都包含一个可选的有序规则列表,对特定请求计算这些规则以确定该请求的策略。每个规则都由一个布尔表达式和一个策略值组成。如果该表达式对于特定请求计算为 true,那么将使用与该规则相关联的策略。
规则的布尔表达式的语法和语义类似于结构化查询语言 (SQL) 表达式的 WHERE 子句。更精确地说,表达式的语法由 Java™ Message Service (JMS) 1.1 规范定义。有关表达式的语法和语义的更多信息,请阅读“基于规则的请求分类”。
在 JMS 规范中,标识指的是与请求相关联的各种属性,例如,特定查询参数、cookie 或 HTTP 头。JMS 标识可视为请求变量或操作数。这些操作数可以特定于协议。例如,SOAP 服务名称是一个仅在 SOAP 工作类中有效的操作数。
clienthost LIKE '%.ibm.com'
'%.ibm.com' 是字面值,用于与请求的客户机主机名进行比较。此表达式对于所有由 ibm.com® 域中的计算机发出的请求为 true。用单引号将字符串文字括起。不要用单引号将数字文字括起。另外,还可以将括号以及 AND、OR 和 NOT 运算符一起使用以设定复合布尔表达式的格式。请参阅 JMS 1.1 规范以获取详细描述。SOAP 操作数
操作数 | 语法 | 描述 |
---|---|---|
客户机主机 |
clienthost | 标准的客户机主机名。这是因特网协议 (IP) 命令主机名的值。此操作数不支持 >、>=、< 和 <= 之类的数字运算符。 |
客户机 IPV4 |
clientipv4 | 使用因特网协议 V4 (IPv4) 点分四组地址类型 n.n.n.n 的客户机的 IP 地址。 |
客户机 IPV6 |
clientipv6 | 因特网协议版本 6 (IPv6) 128 位地址类型 x:x:x:x:x:x:x:x,符合客户机的请求评论 1924 (RFC 1924)。 |
Cookie 名称 |
cookie$<name> | cookie 名称。 例如,表达式 cookie$My_Cookie_Name='My_Cookie_Value' 对请求进行测试,以查看它是否包含名为 My_Cookie_Name、值为 My_Cookie_Value 的 cookie。要测试是存在还是缺少特定 cookie,请使用下列其中一个表达式:
|
头名称 |
header$<name> | 头名称和值。 例如,表达式 header$Host='localhost' 对请求进行测试,以查看它是否包含值为 localhost 的 HTTP 主机头。要测试是存在还是缺少主机头,请使用下列其中一个表达式:
|
HTTP 方法 |
HTTPMethod | 请求的 HTTP 方法。可能值为 POST、GET、PUT 和 DELETE。 |
MIME 类型 |
MIMEType | 请求的 MIME 类型。 |
操作 |
operation | Web Service 操作的名称。 |
百分比 |
percentage$<val> | 百分比操作数对时间的固定百分比求值为 true。 例如,percentage$50 对时间的平均值 50% 求值为 true。 |
端口 |
端口(port) | 接收请求所在的侦听端口。 |
协议 |
协议 | 用于传输请求的通信协议。当前受支持的协议是 HTTP、HTTPS、SOAP 和 SOAPS。 |
查询参数 |
queryparm$<name> | 头名称和值。 例如,表达式 queryparm$timezone='EST' 对请求进行测试,以查看它是否包含名为 timezone、值为 EST 的 HTTP 查询参数。要测试是存在还是缺少查询参数,请使用下列其中一种形式:
|
Rampup |
rampup$<startTime> $<completionTime> |
rampup 操作数对时间的可变百分比求值为 true。在 <startTime> 之前,此操作数始终求值为
false;在 <completionTime> 之后,它始终求值为
true。随着时间从 <startTime> 推移到
<completionTime>,此操作数按线性递增百分比概率求值为 true。
<startTime> 和 <completionTime> 的格式为 day/month/year::hour:min:sec。 其中 day 表示月份中的日期,month 表示月份(Jan、Feb、Mar、Apr、May、Jun、Jul、Aug、Sep、Oct、Nov 和 Dec),year 是用 4 位数字表示的年份,hour 是用 2 位数字表示的 24 小时制的小时,min 和 sec 分别是用 2 位数字值表示的分钟和秒。例如, rampup$01/Jan/2007::08:00:00$01/Jan/2007::17:00:00 开始在 2007 年 1 月 1 日上午 8 点偶然求值为 true,并且在同一天的下午 5 点 ramp up 完成时一直求值为 true。 |
服务器主机 |
serverhost | 服务器的标准主机名称。此操作数不支持 >、>=、< 和 <= 之类的数字运算符。 |
服务器 IPV4 |
serveripv4 | 服务器计算机的 IP 地址,使用 IPv4 点分四段地址类型 n.n.n.n。 |
服务器 IPV6 |
serveripv6 | IPv6 128 位地址类型 x:x:x:x:x:x:x:x,遵循服务器计算机的 RFC 1924 协议。 |
Service |
服务 | Web Service 的名称。 |
时间 |
time | 用于定义必须执行给定请求的日期和时间。两个可选字段是“开始时间”和“结束时间”。如果在所定义的时间范围以外收到请求,那么将不处理该请求。 “开始时间”和“结束时间”字段都使用以下格式:dayOfWeek/dayOfMonth/month/year::hour:minute:second。 例如,2007 年 4 月 11 日星期四下午 1 点 3 分 45 秒被指定为: Thu/11/Apr/2007::13:03:45 任何字段都可以使用值 * 作为通配符。 例如,将每个月的第一天指定为 */1。 dayofWeek 值为 Sun、Mon、Tue、Wed、Thu、Fri 和 Sat,而 dayOfMonth 值的范围介于 1 至 31。 month 值是表示十二个月的非数字值:Jan、Feb、Mar、Apr、May、Jun、Jul、Aug、Sep、Oct、Nov 和 Dec。 year 值由表示某个年份的四个数字组成。例如 2007。 hour 值是一天中的某个小时(以 24 小时制表示)。例如,早上 8 点表示为 ::8。minute 和 second 是范围介于 0 至 59 的整数。 正斜杠(/)用于分隔 date 参数、双冒号(::)用于分隔 hour 参数以及冒号(:)用于分隔 timeOfDay 参数。注意,由使用了 time 操作数的整个规则的布尔结果确定要执行的路由操作。 |
虚拟门户网站 |
virtualportal | 在 WebSphere® Portal Server 中创建虚拟门户网站,并且 Intelligent Management 支持此操作数以与 WebSphere Portal Server 更好地集成在一起。从请求 URL 中减去 WebSphere Portal 应用程序的 Web 模块的上下文根即可得到虚拟门户网站。如果给定请求与已定义的虚拟门户网站匹配,那么将执行对该规则定义的路由操作。 |
Xpath 表达式
Xpath 表达式的语法是 xpathexpr,并受 SOAP 支持。
XPath 字符串表达式有一个用于包含 XPath 表达式的必需字段和一个用于定义局部名称空间的可选字段。如果 XPath 表达式中包含的所有名称空间都是标准的,那么第二个字段可以是可选的。如果存在多个局部名称空间,那么使用逗号(,)分隔各个局部名称空间。
以下示例显示带有一个局部名称空间定义的 xpathexpr:
xpathexpr$/soap:Envelope/soap:Body/m:getTimeZone/n:clientId$m\\=http://test.classify.ws.ibm.com,n\\=http://test2.classify.ws.ibm.com
= \\'1000\\' or operation IS NOT NULL
在上一表达式中,XPath 表达式为 /soap:Envelope/soap:Body/n:getTimeZone/n:clientId。它包含 n 局部名称空间。因此,xpathexpr 的第二个字段定义为 n \\=http://test.classify.ws.ibm.com。美元符号($)用于表示字段定义的开头。在此示例中,双反斜杠是转义序列。第一个等于号(=)是局部名称空间定义的一部分,因此进行了转义,而第二个等于号(=)是分类表达式中的运算符,不能转义。
以下示例显示带有两个局部名称空间的 xpathexpr:
xpathexpr$/soap:Envelope/soap:Body/m:getTimeZone/n:clientId$m\\=http://test.classify.ws.ibm.com,n\\=http://test2.classify.ws.ibm.com
= \\'1000\\' or operation IS NOT NULL
名称空间 | URL |
---|---|
soap | http://schemas.xmlsoap.org/soap/envelope/ |
soap-env | http://schemas.xmlsoap.org/soap/envelope/ |
soapenc | http://schemas.xmlsoap.org/soap/encoding/ |
soapbind | http://schemas.xmlsoap.org/wsdl/soap/ |
xsd | http://www.w3.org/2001/XMLSchema |
xsi | http://www.w3.org/2001/XMLSchema-instance |
xsi | http://ws-i.org/schemas/conformanceClaim/ |
wsdl | http://schemas.xmlsoap.org/wsdl/ |
运算符
Intelligent Management 支持在下表中的规则表达式中使用运算符。因为这些运算符出现在 WHERE 或 HAVING 子句中,所以在 SQL 术语中也将其称为谓词。运算符不区分大小写。
运算符 | 描述 |
---|---|
OR | 逻辑 OR 运算符。 |
AND | 逻辑 AND 运算符。 |
NOT | 否定运算符。 |
IN | 在单个表达式中使用多个值来表示一个操作数。其含义与运算符的 SQL 标准含义一致。 例如,如果要将端口值表示为 9080、9090 和 9091 等值中的任意值或所有值,请使用表达式片段:
在 SQL 中,如何在括号中表示这些值取决于端口的数据类型。如果端口是整数,那么未加单引号的值在语法上是正确的。如果端口是字符串,那么正确的表达式为:
|
LIKE | 表示针对字符串操作数值的模式匹配。值必须在模式匹配的预期开始位置包含通配符 (%)。 例如,表达式:
host LIKE %blanca匹配单词 blanca 和任何其他以 blanca 结尾的值,而表达式为: host LIKE blanca%匹配单词 blanca 和任何其他以 blanca 开头的单词。表达式: host LIKE %blanca%匹配单词 blanca 和任何包含其中嵌入标记 blanca 的单词。 使用了 java.util.regex.Pattern 类。 |
= | “等于”运算符表示匹配时区分大小写。 |
> | “大于”运算符,与数字操作数配合使用。 |
>= | “大于”或“等于”运算符,与数字操作数配合使用。 |
< | “小于”运算符,与数字操作数配合使用。 |
<= | “小于”或“等于”运算符,与数字操作数配合使用。 |
< > | “不等于”运算符。 |
BETWEEN | 与 AND 配合使用,用于选择一组值,包括第一个值(下限值)和最后一个值(上限值)。这两个运算符可以共同对数字和日期值执行运算。 |
IS NULL | 测试操作数是否包含 NULL 值。 |
IS NOT NULL | 测试操作数是否包含非 NULL 值。 |