【发布时间】:2026-01-09 14:55:01
【问题描述】:
我在策略中有一条规则,我想处理一条错误消息。例如,如果我收到错误代码“0x80e003aa”,停止规则并编写输入“code13”(一些错误代码)。我知道有“错误操作”,但有些东西不起作用。有什么想法吗?
【问题讨论】:
-
有人请吗?
标签: ibm-datapower
我在策略中有一条规则,我想处理一条错误消息。例如,如果我收到错误代码“0x80e003aa”,停止规则并编写输入“code13”(一些错误代码)。我知道有“错误操作”,但有些东西不起作用。有什么想法吗?
【问题讨论】:
标签: ibm-datapower
您需要确保捕获规则中的第一个错误。设置调试日志并产生错误。在日志中,您(很可能)会看到许多错误,然后复制第一个错误代码。
在您的处理策略中创建一个新的匹配规则并将其设置为匹配错误代码。在您可以选择错误代码的选择列表中,找到您复制的代码并添加它。如果您在列表中找不到代码,则它不是可以捕获的“主要”错误,您将不得不添加另一个错误代码。 如果您不确定,只需将所有代码添加到您的匹配操作中(您可以有多个)。
接下来确保您的规则是“错误规则”,并且在它之前没有放置其他错误规则(在规则列表中较高)。 DataPower 只执行一个错误规则,因此您需要确保它们按顺序排列。
另一种解决方案是添加一个带有“全部匹配”(*) 匹配操作的新错误规则,并在其中使用 GatewayScript 或 XSLT 检查代码并采取适当的操作,例如对于 GWS:
// get the service metadata, i.e. the service var's
var sm = require ('service-metadata');
console.log(JSON.stringify(sm));
console.log(JSON.stringify(sm).slice(1566));
console.log(sm.errorSubcode);
if (sm.errorSubcode === '0x01d30003') {
// This is a XSD schema validation error
const err = sm.errorMessage.slice(sm.errorMessage.indexOf('/validate: ') + 10).trim();
session.output.write(err);
} else {
session.output.write(sm.errorMessage);
}
【讨论】: