Как обработать ошибку в правиле политики DataPower при получении определенного кода ошибки - PullRequest
0 голосов
/ 22 мая 2019

У меня есть правило в политике, и я хочу обработать сообщение об ошибке.Например, если я получаю код ошибки «0x80e003aa», остановите правило и напишите ввод «code13» (некоторый код ошибки). Я знаю, что есть «On Error Action», но что-то не работает.Есть идеи?

1 Ответ

0 голосов
/ 31 мая 2019

Вам нужно убедиться, что вы поймали первую ошибку в правиле.Установите вход в систему отладки и выдайте ошибку.В журнале вы (скорее всего) увидите ряд ошибок, а затем скопируете код ошибки первой из них.

Создайте новое правило соответствия в своей политике обработки и задайте его в соответствии с кодом ошибки.В списке выбора, где вы можете выбрать коды ошибок, найдите скопированный код и добавьте его.Если вы не можете найти код в списке, это не «основная» ошибка, которую можно отследить, и вам придется добавить еще один код ошибки.Если вы не уверены, просто добавьте все коды в действие сопоставления (их может быть несколько).

Затем убедитесь, что ваше правило является «правилом ошибок» и что перед ним нет других правил ошибок.(выше в списке правил).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);
}
...