IBM Cloud Application Performance Management

定义表达式

要定义符号,您必须使用表达式。 代理程序对表达式进行求值,以对符号指定值。

在表达式中使用数据

表达式可以使用以下数据:
  • 请求类型的输入数据符号
  • 同一请求映射器定义中描述的其他符号
  • 数字常数
  • 字符串常量(以 " 定界,如 "string"
  • 布尔常量(trueTRUEfalseFALSE
  • null 常量

有关输入数据符号的更多信息,请参阅表 2

如果符号的值是 Java™ 类的实例化,那么表达式可以包含对该类中定义的字段和方法的引用。 要引用字段,请使用 symbol.fieldname。 要引用方法,请使用 symbol.methodname(parameters)。 方法调用必须返回一个值。 例如,可以将 Java 字符串方法与具有字符串值的符号配合使用。

要引用类的静态字段或方法,您还可以使用 classname.fieldnameclassname.methodname(parameters)

如果符号引用数组对象,那么表达式可以选择一个元素 (symbol[selector]) 并确定数组长度 (symbol.length)

运算符

您可以在表达式中使用以下运算符:
  • 布尔运算符:AND&OR|NOT!
  • 比较:==!=GT>LT<GE>=LE<=
  • 数字运算符:+-*/
  • 用于强制执行求值顺序的括号:()
要点: 必须对 XML 中的符号 <>& 进行转义。 您也可以使用 GT(大于)、GE(大于或等于)、LT(小于)、LE(小于或等于)以及 AND 运算符。
通过使用 instanceof 运算符,表达式可以求出值是否是类的实例:
expression instanceof java.class.name
与 Java instanceof 运算符类似,此运算符生成布尔值。 在此示例中,如果 expression 值所属的类满足任何以下条件,值为 true:
  • 命名为 java.class.name
  • 是由 java.class.name 标识的类的直接或间接子类。
  • 直接或间接实现由 java.class.name 标识的接口。
通过使用 new 运算符,表达式还可以使 Java 类的新对象实例化。 此运算符类似于 Java new 运算符:
new java.class.name(expression1, expression2, ... expressionN)

运算符优先级

运算符按优先级顺序进行求值。 同一优先级顺序的运算符从左向右进行求值。 您可以使用括号 () 来更改求值顺序。
优先级顺序如下所示:
  1. . 运算符(方法调用或字段引用)
  2. [ ] (数组元素选择器)
  3. new
  4. !NOT
  5. *, /
  6. +, -
  7. GT>LT<GE>=LE<=instanceof
  8. ==, !=
  9. AND&
  10. OR|

示例

$s1 >= ( 2 * ($s2.sampMethod($s3, true) + 1))
此代理程序按以下方式对此表达式进行求值:
  1. $s1 符号进行求值。 它必须生成数字值。
  2. $s2 符号进行求值。 它必须生成 Java 对象。
  3. $s3 符号进行求值。
  4. $s2 求值产生的对象的 sampMethod 方法进行调用。 $s3 的求值结果将作为第一个参数传递,布尔值 true 将作为第二个参数传递。 对 sampMethod 的调用必须返回一个数字值。
  5. 将 1 添加到步骤 4 的结果中。
  6. 步骤 5 的结果乘以 2。
  7. 将步骤 1 的结果与步骤 6 的结果进行比较。 如果步骤 1 的结果大于或等于步骤 6 的结果,那么返回 true。 否则,返回 false