Устранение неполадок при развертывании правил защиты на основе регулярных выражений

Вы просматриваете документацию по Apigee Edge.
Перейдите к документации по Apigee X.
Информация

InvalidRegularExpression

Сообщение об ошибке

Развертывание прокси-сервера API через интерфейс Edge или API управления Edge завершается неудачно с сообщением об ошибке:

Error Deploying Revision revision_number to environment
RegularExpressionProtection policy_name: Invalid Regular Expression com.apigee.steps.regexprotection.RegularExpressionProtectionBean$RegexPattern@f4ecb23, Context Revision:revision_number;APIProxy:RegexThreat;Organization:organization;Environment:environment.

Пример сообщения об ошибке

Error Deploying Revision 1 to test
RegularExpressionProtection Regular-Expression-Protection-1: Invalid Regular Expression com.apigee.steps.regexprotection.RegularExpressionProtectionBean$RegexPattern@f4ecb23, Context Revision:1;APIProxy:RegexThreat;Organization:myorg;Environment:test.

Пример скриншота с ошибкой

Текст ошибки InvalidRegularExpression

Причина

Если регулярное выражение в элементе <Pattern> правила RegularExpressionProtection недействительно, развертывание прокси API завершится неудачно.

диагностика;

  1. Определите название правила RegularExpressionProtection из сообщения об ошибке. Например, в приведенной ниже ошибке название RegularExpressionProtection policy – Regular-Expression-Protection-1:.

    Error Deploying Revision 1 to test
    RegularExpressionProtection Regular-Expression-Protection-1: Invalid Regular Expression com.apigee.steps.regexprotection.RegularExpressionProtectionBean$RegexPattern@f4ecb23, Context Revision:1;APIProxy:RegexThreat;Organization:myorg;Environment:test.
  2. Проверьте все элементы <Pattern> в XML-файле с правилом защиты на основе регулярных выражений, которое не удалось применить. Проверьте, нет ли в элементах <Pattern> недействительных регулярных выражений. Если в каком-либо из элементов <Pattern> используется недопустимое регулярное выражение, это и будет причиной ошибки.

    Например, в следующем правиле для параметра Pattern> задано значение foo){2}, которое считается недопустимым регулярным выражением:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
        <RegularExpressionProtection async="false" continueOnError="false" enabled="true" name="Regular-Expression-Protection-1">
            <DisplayName>Regular Expression Protection-1</DisplayName>
            <Properties/>
            <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
            <URIPath>
                <Pattern>foo){2}</Pattern>
            </URIPath>
            <Source>request</Source>
        </RegularExpressionProtection>

    В приведенном выше примере в регулярном выражении, указанном в <Pattern>, отсутствует открывающая скобка. Поэтому оно считается недопустимым регулярным выражением. Поэтому развертывание прокси API не удается.

Разрешение

Убедитесь, что каждый элемент <Pattern> в правиле RegularExpressionProtection содержит действительное регулярное выражение. Для отладки регулярных выражений можно использовать различные онлайн- и офлайн-инструменты. Чтобы исправить пример правила защиты с использованием регулярных выражений, показанный выше, добавьте недостающие скобки:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <RegularExpressionProtection async="false" continueOnError="false" enabled="true" name="Regular-Expression-Protection-1">
        <DisplayName>Regular Expression Protection-1</DisplayName>
        <Properties/>
        <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
        <URIPath>
            <Pattern>(foo){2}</Pattern>
        </URIPath>
        <Source>request</Source>
    </RegularExpressionProtection>

XPathCompilationFailed

Сообщение об ошибке

Развертывание прокси-сервера API через интерфейс Edge или API управления Edge завершается неудачно с сообщением об ошибке:

Error Deploying Revision revision_number to environment
RegularExpressionProtection policy_name: Failed to compile xpath xpath_expression. Context Revision:revision_number;APIProxy:RegexThreat;Organization:organization;Environment:environment.

Пример сообщения об ошибке

Error Deploying Revision 1 to test
RegularExpressionProtection Regular-Expression-Protection-1: Failed to compile xpath /notapigee:foo/notapigee:bar. Context Revision:1;APIProxy:RegexThreat;Organization:myorg;Environment:test.

Пример скриншота с ошибкой

Текст ошибки XPathCompilationFailed

Причина

Если префикс или значение, используемое в элементе <XPath>, не входит ни в одно из объявленных пространств имен в правиле RegularExpressionProtection, развертывание прокси-сервера API завершится неудачей.

Дополнительную информацию о пространствах имен, XPath и префиксах можно найти в статье XML Namespaces and How They Affect XPath and XSLT.

диагностика;

  1. Определите название правила RegularExpressionProtection, в котором произошла ошибка, и использованное выражение XPath. Оба этих элемента можно найти в сообщении об ошибке.

    Например, в приведенном ниже сообщении об ошибке название правила – Regular-Expression-Protection-1 , а выражение XPath – /notapigee:foo/notapigee:bar:.

    Error Deploying Revision 1 to test
    RegularExpressionProtection Regular-Expression-Protection-1: Failed to compile xpath /notapigee:foo/notapigee:bar. Context Revision:1;APIProxy:RegexThreat;Organization:myorg;Environment:test.
  2. В XML-файле неудачной политики защиты на основе регулярных выражений убедитесь, что XPath, заданный в элементе Expression, соответствует XPath, указанному в сообщении об ошибке (шаг 1 выше).

    Например, в следующем правиле XPath указан как /notapigee:foo/notapigee:bar, что соответствует сообщению об ошибке:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <RegularExpressionProtection async="false" continueOnError="false" enabled="true" name="Regular-Expression-Protection-1">
        <DisplayName>Regular Expression Protection-1</DisplayName>
        <Properties/>
        <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
        <Source>request</Source>
         <XMLPayload>
             <Namespaces>
                 <Namespace prefix="apigee">http://www.apigee.com</Namespace>
             </Namespaces>
             <XPath>
                 <Expression>/notapigee:foo/notapigee:bar</Expression>
                 <Type>nodeset</Type>
                 <Pattern>pattern</Pattern>
                 <Pattern>pattern2</Pattern>
             </XPath>
         </XMLPayload>
    </RegularExpressionProtection>
  3. Проверьте элементы <Namespaces> и <Expression> в правилах защиты на основе регулярных выражений. Если в элементе <Expression>, указанном в сообщении об ошибке, используется префикс или значение, не входящее в пространства имен, объявленные в правиле RegularExpressionProtection, то это и является причиной ошибки.

    Обратите внимание, что в примере Правила защиты регулярных выражений в определенном элементе <XPath> используется префикс notapigee:

    <Expression>/notapigee:foo/notapigee:bar</Expression>

    Однако префикс notapigee не определен ни в одном из элементов <Namespace>, поэтому компиляция <XPath> завершается неудачно, что приводит к сбою развертывания.

Разрешение

Убедитесь, что все пространства имен, используемые в элементах <Expression> в элементах <XPath>, объявлены в правиле RegularExpressionProtection. Чтобы исправить приведенный выше пример, можно заменить префикс notapigee на apigee, который объявлен в пространствах имен:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<RegularExpressionProtection async="false" continueOnError="false" enabled="true" name="Regular-Expression-Protection-1">
    <DisplayName>Regular Expression Protection-1</DisplayName>
    <Properties/>
    <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
    <Source>request</Source>
     <XMLPayload>
         <Namespaces>
             <Namespace prefix="apigee">http://www.apigee.com</Namespace>
         </Namespaces>
         <XPath>
             <Expression>/apigee:foo/apigee:bar</Expression>
             <Type>nodeset</Type>
             <Pattern>pattern</Pattern>
             <Pattern>pattern2</Pattern>
         </XPath>
     </XMLPayload>
</RegularExpressionProtection>

CannotBeConvertedToNodeset

Сообщение об ошибке

Развертывание прокси-сервера API через интерфейс Edge или API управления Edge завершается неудачно с сообщением об ошибке:

Error Deploying Revision revision_number to environment
RegularExpressionProtection policy_name: Result of xpath xpath_expression cannot be converted to nodeset. Context Revision:revision_number;APIProxy:RegexThreat;Organization:organization;Environment:environment.

Пример сообщения об ошибке

Error Deploying Revision 1 to test
RegularExpressionProtection Regular-Expression-Protection-1: Result of xpath count(//apigee:foo) cannot be converted to nodeset. Context Revision:1;APIProxy:RegexThreat;Organization:myorg;Environment:test.

Пример скриншота с ошибкой

Текст ошибки CannotBeConvertedToNodeset

Причина

Если в правиле регулярных выражений есть выражение <XPath>, в котором элемент <Type> определен как nodeset, но выражение нельзя преобразовать в nodeset, развертывание прокси-сервера API завершится неудачно.

диагностика;

  1. Определите правило RegularExpressionProtection, в котором произошла ошибка, и выражение XPath, которое нельзя преобразовать в набор узлов. Оба этих элемента можно найти в сообщении об ошибке.

    Например, в приведенном ниже сообщении об ошибке название правила – Regular-Expression-Protection-1 , а выражение XPath – count(//apigee:foo):.

    Error Deploying Revision 1 to test
    RegularExpressionProtection Regular-Expression-Protection-1: Result of xpath count(//apigee:foo) cannot be converted to nodeset. Context Revision:1;APIProxy:RegexThreat;Organization:myorg;Environment:test.
  2. В XML-файле с ошибкой защиты на основе регулярных выражений убедитесь, что XPath, заданный в элементе <Expression> элемента <XPath>, соответствует XPath, указанному в сообщении об ошибке (шаг 1 выше).

    Например, в следующем правиле указано значение count(//apigee:foo), которое соответствует значению в сообщении об ошибке:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
        <RegularExpressionProtection async="false" continueOnError="false" enabled="true" name="Regular-Expression-Protection-1">
            <DisplayName>Regular Expression Protection-1</DisplayName>
            <Properties/>
            <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
            <Source>request</Source>
             <XMLPayload>
                 <Namespaces>
                     <Namespace prefix="apigee">http://www.apigee.com</Namespace>
                 </Namespaces>
                 <XPath>
                     <Expression>count(//apigee:foo)</Expression>
                     <Type>nodeset</Type>
                     <Pattern>pattern</Pattern>
                     <Pattern>pattern2</Pattern>
                 </XPath>
             </XMLPayload>
        </RegularExpressionProtection>
  3. Проверьте значение, заданное в элементе <Type>, который находится под элементом <XPath>. Если элемент <Type> имеет значение nodeset, то это и является причиной ошибки.

    В этом примере выражение XPath – count(), которое не возвращает один или несколько узлов. Поэтому развертывание прокси API не удается.

Разрешение

Если для элемента <Type> задано значение nodeset, убедитесь, что результатом набора элементов <Expression>, заданного в <XPath>, является один или несколько узлов. Вы также можете изменить элемент <Type>, чтобы он лучше соответствовал вашим потребностям.

Чтобы исправить приведенный выше пример, можно изменить элемент <Expression> на другое значение, которое может возвращать узлы:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<RegularExpressionProtection async="false" continueOnError="false" enabled="true" name="Regular-Expression-Protection-1">
    <DisplayName>Regular Expression Protection-1</DisplayName>
    <Properties/>
    <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
    <Source>request</Source>
     <XMLPayload>
         <Namespaces>
             <Namespace prefix="apigee">http://www.apigee.com</Namespace>
         </Namespaces>
         <XPath>
             <Expression>/apigee:foo/apigee:bar</Expression>
             <Type>nodeset</Type>
             <Pattern>pattern</Pattern>
             <Pattern>pattern2</Pattern>
         </XPath>
     </XMLPayload>
</RegularExpressionProtection>

JSONPathCompilationFailed

Сообщение об ошибке

Развертывание прокси-сервера API через интерфейс Edge или API управления Edge завершается неудачно с сообщением об ошибке:

Error Deploying Revision revision_number to environment
RegularExpressionProtection policy_name: Failed to compile jsonpath jsonpath_expression Context Revision:revision_number;APIProxy:RegexThreat;Organization:organization;Environment:environment.

Пример сообщения об ошибке

Error Deploying Revision 1 to test
RegularExpressionProtection Regular-Expression-Protection-1: Failed to compile jsonpath $.store.book[*.author. Context Revision:1;APIProxy:RegexThreat;Organization:myorg;Environment:test.

Пример скриншота с ошибкой

Текст ошибки JSONPathCompilationFailed

Причина

Если элемент <Expression> под элементом <JSONPath> в правиле защиты с помощью регулярных выражений содержит недопустимое выражение JSONPath, развертывание прокси API завершится неудачно.

диагностика;

  1. Определите название правила RegularExpressionProtection, в котором произошла ошибка и было использовано недействительное выражение JSONPath. Оба этих элемента можно найти в сообщении об ошибке.

    Например, в приведенной ниже ошибке название правила – Regular-Expression-Protection-1 , а выражение JSONPath – $.store.book[*.author:.

    Error Deploying Revision 1 to test
    RegularExpressionProtection Regular-Expression-Protection-1: Failed to compile jsonpath $.store.book[*.author. Context Revision:1;APIProxy:RegexThreat;Organization:myorg;Environment:test.
  2. В XML-файле с нарушением правил защиты регулярных выражений убедитесь, что JSONPath, заданный в элементе Expression, соответствует JSONPath, указанному в сообщении об ошибке (шаг 1 выше).

    Например, в следующем правиле элемент Expression под элементом <JSONPath> указан как $.store.book[*.author, что соответствует сообщению об ошибке:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
        <RegularExpressionProtection async="false" continueOnError="false" enabled="true" name="Regular-Expression-Protection-1">
            <DisplayName>Regular Expression Protection-1</DisplayName>
            <Properties/>
            <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
            <Source>request</Source>
            <JSONPayload>
                 <JSONPath>
                     <Expression>$.store.book[*.author</Expression>
                     <Pattern>REGEX PATTERN</Pattern>
                     <Pattern>REGEX PATTERN</Pattern>
                 </JSONPath>
                </JSONPayload>
        </RegularExpressionProtection>
  3. Изучите элемент <Expression> в элементе <JSONPath> в правилах. Если он не соответствует синтаксису JSONPath, то это и есть причина ошибки. В примере выше отсутствует закрывающая квадратная скобка, поэтому выражение недопустимо.

    Поскольку выражение JSON Path недействительно, развертывание прокси API не удается.

Разрешение

Убедитесь, что значение элемента <Expression> внутри элемента <JSONPath> в правиле защиты регулярных выражений является допустимым выражением JSONPath.

Чтобы исправить приведенный выше пример, добавьте недостающую закрывающую квадратную скобку к значению элемента <Expression>:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<RegularExpressionProtection async="false" continueOnError="false" enabled="true" name="Regular-Expression-Protection-1">
    <DisplayName>Regular Expression Protection-1</DisplayName>
    <Properties/>
    <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
    <Source>request</Source>
    <JSONPayload>
         <JSONPath>
             <Expression>$.store.book[*].author</Expression>
             <Pattern>REGEX PATTERN</Pattern>
             <Pattern>REGEX PATTERN</Pattern>
         </JSONPath>
        </JSONPayload>
</RegularExpressionProtection>

NothingToEnforce

Сообщение об ошибке

Развертывание прокси-сервера API через интерфейс Edge или API управления Edge завершается неудачно с сообщением об ошибке:

Error Saving Revision revision_number
RegularExpressionProtection policy_name: at least one of URIPath, QueryParam, Header, FormParam, XMLPayload, JSONPayload is mandatory.

Пример сообщения об ошибке

Error Saving Revision 1
RegularExpressionProtection Regular-Expression-Protection-1: at least one of URIPath, QueryParam, Header, FormParam, XMLPayload, JSONPayload is mandatory.

Пример скриншота с ошибкой

Текст ошибки NothingToEnforce

Причина

Если в правиле RegularExpressionProtection нет ни одного из элементов <URIPath>, <QueryParam>, <Header>, <FormParam>, <XMLPayload> или <JSONPayload>, развертывание прокси API завершится неудачно.

Как указано в сообщении об ошибке, в правиле RegularExpressionProtection должен быть хотя бы один из следующих элементов: <URIPath>, <QueryParam>, <Header>, <FormParam>, <XMLPayload> или <JSONPayload>.

диагностика;

  1. Определите название правила RegularExpressionProtection, в котором произошла ошибка. Он указан в сообщении об ошибке. Например, в приведенном ниже сообщении об ошибке название правила – Regular-Expression-Protection-1:.

    RegularExpressionProtection Regular-Expression-Protection-1: at least one of URIPath, QueryParam, Header, FormParam, XMLPayload, JSONPayload is mandatory.
  2. Проверьте правила защиты с помощью регулярных выражений, которые не сработали (определены на шаге 1 выше). Если в правиле нет хотя бы одного из следующих элементов: <URIPath>, <QueryParam>, <Header>, <FormParam>, <XMLPayload> или <JSONPayload>, то это и является причиной ошибки.

    Например, в приведенном ниже правиле защиты с использованием регулярных выражений нет ни одного из упомянутых выше элементов:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
        <RegularExpressionProtection async="false" continueOnError="false" enabled="true" name="Regular-Expression-Protection-1">
            <DisplayName>Regular Expression Protection-1</DisplayName>
            <Properties/>
            <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
            <Source>request</Source>
        </RegularExpressionProtection>

    Поскольку в правиле Extract Variables нет ни одного обязательного элемента, развертывание прокси-сервера API не удается.

Разрешение

Убедитесь, что в правиле RegularExpressionProtection есть хотя бы один из следующих обязательных элементов: <URIPath>, <QueryParam>, <Header>, <FormParam>, <XMLPayload> или <JSONPayload>. Пример:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<RegularExpressionProtection async="false" continueOnError="false" enabled="true" name="Regular-Expression-Protection-1">
    <DisplayName>Regular Expression Protection-1</DisplayName>
    <Properties/>
    <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
    <Source>request</Source>
    <JSONPayload>
        <JSONPath>
            <Expression>$.store.book[*].author</Expression>
            <Pattern>REGEX PATTERN</Pattern>
            <Pattern>REGEX PATTERN</Pattern>
        </JSONPath>
    </JSONPayload>
</RegularExpressionProtection>

NoPatternsToEnforce

Сообщение об ошибке

Развертывание прокси-сервера API через интерфейс Edge или API управления Edge завершается неудачно с сообщением об ошибке:

Error Saving Revision revision_number
RegularExpressionProtection policy_name: No patterns to enforce in payload_name.

Пример сообщения об ошибке

Error Saving Revision 1
RegularExpressionProtection Regular-Expression-Protection-1: No patterns to enforce in XPath.

Пример скриншота с ошибкой

Текст ошибки NoPatternsToEnforce

Причина

Если для какого-либо элемента верхнего уровня (<URIPath>, <QueryParam>, <Header>, <FormParam>, <XMLPayload> или <JSONPayload>) не определен элемент <Pattern> в правиле RegularExpressionProtection, развертывание прокси-сервера API завершится неудачно.

диагностика;

  1. Определите название правила RegularExpressionProtection, в котором произошла ошибка, и дочерний элемент, в котором отсутствует элемент <Pattern>. Оба этих элемента можно найти в сообщении об ошибке.

    Например, в приведенной ниже ошибке название правила – Regular-Expression-Protection-1, а дочерний элемент – XPath:.

    RegularExpressionProtection Regular-Expression-Protection-1: No patterns to enforce in XPath.
  2. Проверьте правило защиты с помощью регулярных выражений и убедитесь, что у дочернего элемента, определенного на шаге 1, нет элемента <Pattern>. Если элемента <Pattern> нет, то в этом и заключается причина ошибки.

    Например, в приведенных ниже правилах элемент <Pattern> не вложен в <XPath>:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
        <RegularExpressionProtection async="false" continueOnError="false" enabled="true" name="Regular-Expression-Protection-1">
          <DisplayName>Regular Expression Protection-1</DisplayName>
          <Properties/>
          <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
          <Source>request</Source>
          <XMLPayload>
            <Namespaces>
              <Namespace prefix="apigee">http://www.apigee.com</Namespace>
            </Namespaces>
            <XPath>
              <Expression>/apigee:Greeting/apigee:User</Expression>
              <Type>string</Type>
            </XPath>
          </XMLPayload>
        </RegularExpressionProtection>

    Поскольку у элемента <XPath> нет элемента <Pattern>, развертывание прокси API не удается.

Разрешение

Убедитесь, что для каждого из элементов <URIPath>, <QueryParam>, <Header>, <FormParam>, <XMLPayload> или <JSONPayload> указано хотя бы одно значение <Pattern>. Подробнее о том, как правильно указать элемент…

Чтобы исправить приведенный выше пример, можно добавить элемент <Pattern> в элемент <XPath> под элементом <XMLPayload>:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<RegularExpressionProtection async="false" continueOnError="false" enabled="true" name="Regular-Expression-Protection-1">
  <DisplayName>Regular Expression Protection-1</DisplayName>
  <Properties/>
  <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
  <Source>request</Source>
  <XMLPayload>
    <Namespaces>
      <Namespace prefix="apigee">http://www.apigee.com</Namespace>
    </Namespaces>
    <XPath>
      <Expression>/apigee:Greeting/apigee:User</Expression>
      <Type>string</Type>
      <Pattern>REGEX PATTERN</Pattern>
    </XPath>
  </XMLPayload>
</RegularExpressionProtection>

NONEmptyPrefixMappedToEmptyURI

Сообщение об ошибке

Развертывание прокси-сервера API через интерфейс Edge или API управления Edge завершается неудачно с сообщением об ошибке:

Error Saving Revision revision_number
RegularExpressionProtection policy_name: Non-empty prefix prefix_name cannot be mapped to empty uri.

Пример сообщения об ошибке

Error Saving Revision 1
RegularExpressionProtection Regular-Expression-Protection-1: Non-empty prefix apigee cannot be mapped to empty uri.

Пример скриншота с ошибкой

Текст ошибки NONEmptyPrefixMappedToEmptyURI

Причина

Эта ошибка возникает, если в правиле RegularExpressionProtection в элементе <Namespace> под элементом <XMLPayload> задан префикс, но не задан URI.

диагностика;

  1. Определите правило RegularExpressionProtection, в котором произошла ошибка, и название префикса, не сопоставленного с URI. Оба этих элемента можно найти в сообщении об ошибке.

    Например, в приведенной ниже ошибке название правила – Regular Expression Protection-1, а префикс – apigee:

    RegularExpressionProtection Regular-Expression-Protection-1: Non-empty prefix apigee cannot be mapped to empty uri.
  2. В XML-файле правила защиты с помощью регулярных выражений, которое не удалось применить, убедитесь, что название префикса, заданное в элементе <Namespace> под элементом <XMLPayload>, совпадает с названием префикса, указанным в сообщении об ошибке (шаг 1 выше).

    Например, в следующем правиле в элементе <Namespace> указан префикс apigee , который соответствует префиксу в сообщении об ошибке:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
        <RegularExpressionProtection async="false" continueOnError="false" enabled="true" name="Regular-Expression-Protection-1">
          <DisplayName>Regular Expression Protection-1</DisplayName>
          <Properties/>
          <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
          <Source>request</Source>
          <XMLPayload>
            <Namespaces>
              <Namespace prefix="apigee"/>
              <Namespace prefix="gmail">http://mail.google.com</Namespace>
            </Namespaces>
            <XPath>
              <Expression>/apigee:Greeting/apigee:User</Expression>
              <Type>string</Type>
              <Pattern>REGEX PATTERN</Pattern>
            </XPath>
          </XMLPayload>
        </RegularExpressionProtection>
  3. Проверьте, есть ли у элемента <Namespace> с префиксом, определенным на шаге 2, действительный URI. Если URI отсутствует, это и есть причина ошибки.

    В примере правила защиты на основе регулярных выражений, показанном выше, обратите внимание, что для элемента <Namespace> с префиксом apigee нет URI. Поэтому возникает ошибка:

    Non-empty prefix apigee cannot be mapped to empty uri.

Разрешение

Убедитесь, что все элементы <Namespace>, определенные с префиксом, имеют соответствующий URI в правиле Extract Variables. Пример:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<RegularExpressionProtection async="false" continueOnError="false" enabled="true" name="Regular-Expression-Protection-1">
  <DisplayName>Regular Expression Protection-1</DisplayName>
  <Properties/>
  <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
  <Source>request</Source>
  <XMLPayload>
    <Namespaces>
      <Namespace prefix="apigee">http://www.apigee.com</Namespace>
      <Namespace prefix="gmail">http://mail.google.com</Namespace>
    </Namespaces>
    <XPath>
      <Expression>/apigee:Greeting/apigee:User</Expression>
      <Type>string</Type>
      <Pattern>REGEX PATTERN</Pattern>
    </XPath>
  </XMLPayload>
</RegularExpressionProtection>

DuplicatePrefix

Сообщение об ошибке

Развертывание прокси-сервера API через интерфейс Edge или API управления Edge завершается неудачно с сообщением об ошибке:

Error Saving Revision revision_number
RegularExpressionProtection policy_name: Duplicate prefix prefix_name.

Пример сообщения об ошибке

Error Saving Revision 1
RegularExpressionProtection Regular-Expression-Protection-1: Duplicate prefix apigee.

Пример скриншота с ошибкой

Текст ошибки DuplicatePrefix

Причина

Эта ошибка возникает, если в правилах RegularExpressionProtection один и тот же префикс определен более одного раза в элементе <Namespace> под элементом <XMLPayload>.

Например, эта ошибка возникает, поскольку префикс apigee определен дважды, как показано ниже:

<Namespace prefix="apigee">http://www.apigee.com</Namespace>
<Namespace prefix="apigee">http://www.apigee.com</Namespace>

диагностика;

  1. Определите правило RegularExpressionProtection, в котором произошла ошибка, и название префикса. Оба этих элемента можно найти в сообщении об ошибке.

    Например, в приведенной ниже ошибке название правила – Regular Expression Protection-1, а префикс – apigee:

    RegularExpressionProtection Regular-Expression-Protection-1: Duplicate prefix apigee.
  2. В XML-файле правила защиты с помощью регулярных выражений, которое не удалось применить, убедитесь, что название префикса, заданное в элементе <Namespace> под элементом <XMLPayload>, совпадает с названием префикса, указанным в сообщении об ошибке (шаг 1 выше).

    Например, в следующем правиле в элементе <Namespace> указан префикс apigee , который соответствует префиксу в сообщении об ошибке:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
        <RegularExpressionProtection async="false" continueOnError="false" enabled="true" name="Regular-Expression-Protection-1">
          <DisplayName>Regular Expression Protection-1</DisplayName>
          <Properties/>
          <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
          <Source>request</Source>
          <XMLPayload>
            <Namespaces>
              <Namespace prefix="apigee">http://www.apigee.com</Namespace>
              <Namespace prefix="apigee">http://www.apigee.com</Namespace>
            </Namespaces>
            <XPath>
              <Expression>/apigee:Greeting/apigee:User</Expression>
              <Type>string</Type>
              <Pattern>REGEX PATTERN</Pattern>
            </XPath>
          </XMLPayload>
        </RegularExpressionProtection>
  3. Проверьте, не был ли элемент <Namespace> с определенным префиксом, указанным на шаге 2, задан более одного раза. Если он определен несколько раз, это и является причиной ошибки.

    В примере правила защиты с помощью регулярных выражений, приведенном выше, элемент <Namespace> с префиксом apigee определен дважды, поэтому возникает ошибка:

    Duplicate prefix apigee.

Разрешение

Убедитесь, что в элементах <Namespace> в правиле RegularExpressionProtection для каждого префикса есть только одно определение. Пример:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <RegularExpressionProtection async="false" continueOnError="false" enabled="true" name="Regular-Expression-Protection-1">
      <DisplayName>Regular Expression Protection-1</DisplayName>
      <Properties/>
      <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
      <Source>request</Source>
      <XMLPayload>
        <Namespaces>
          <Namespace prefix="apigee">http://www.apigee.com</Namespace>
        </Namespaces>
        <XPath>
          <Expression>/apigee:Greeting/apigee:User</Expression>
          <Type>string</Type>
          <Pattern>REGEX PATTERN</Pattern>
        </XPath>
      </XMLPayload>
    </RegularExpressionProtection>

EmptyXPathExpression

Сообщение об ошибке

Развертывание прокси-сервера API через интерфейс Edge или API управления Edge завершается неудачно с сообщением об ошибке:

Error Saving Revision revision_number
RegularExpressionProtection policy_name: Empty XPath expression.

Пример сообщения об ошибке

Error Saving Revision 1
RegularExpressionProtection Regular-Expression-Protection-1: Empty XPath expression.

Пример скриншота с ошибкой

Текст ошибки EmptyXPathExpression

Причина

Если в правиле RegularExpressionProtection нет элемента <Expression> в элементе <XPath>, развертывание прокси-сервера API завершится неудачно.

диагностика;

  1. Определите, какое правило защиты на основе регулярных выражений не удалось применить, по сообщению об ошибке. Например, в приведенной ниже ошибке название правила – Regular-Expression-Protection-1:

    RegularExpressionProtection Regular-Expression-Protection-1: Empty XPath expression.
  2. В XML-файле правил защиты с помощью регулярных выражений определите, есть ли элемент <XMLPayload> с дочерним элементом <XPath>, в котором не определен элемент <Expression> или для элемента <Expression> не задано значение. Если да, то это и есть причина ошибки.

    Ниже приведен пример правила защиты с использованием регулярных выражений, в котором есть элемент <XMLPayload>:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <RegularExpressionProtection async="false" continueOnError="false" enabled="true" name="Regular-Expression-Protection-1">
      <DisplayName>Regular Expression Protection-1</DisplayName>
      <Properties/>
      <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
      <Source>request</Source>
      <XMLPayload>
        <Namespaces>
          <Namespace prefix="apigee">http://www.apigee.com</Namespace>
        </Namespaces>
        <XPath>
          <Expression></Expression>
          <Type>string</Type>
          <Pattern>REGEX PATTERN</Pattern>
        </XPath>
      </XMLPayload>
    </RegularExpressionProtection>

    Поскольку в элементе <XPath> есть пустой элемент <Expression>, развертывание прокси API не удается.

Разрешение

Убедитесь, что в правиле RegularExpressionProtection под элементом <XPath> определен непустой и действительный элемент <Expression>. Пример:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<RegularExpressionProtection async="false" continueOnError="false" enabled="true" name="Regular-Expression-Protection-1">
  <DisplayName>Regular Expression Protection-1</DisplayName>
  <Properties/>
  <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
  <Source>request</Source>
  <XMLPayload>
    <Namespaces>
      <Namespace prefix="apigee">http://www.apigee.com</Namespace>
    </Namespaces>
    <XPath>
      <Expression>/apigee:Greeting/apigee:User</Expression>
      <Type>string</Type>
      <Pattern>REGEX PATTERN</Pattern>
    </XPath>
  </XMLPayload>
</RegularExpressionProtection>

EmptyJSONPathExpression

Сообщение об ошибке

Развертывание прокси-сервера API через интерфейс Edge или API управления Edge завершается неудачно с сообщением об ошибке:

Error Saving Revision revision_number
RegularExpressionProtection policy_name: Empty JSONPath expression.

Пример сообщения об ошибке

Error Saving Revision 1
RegularExpressionProtection Regular-Expression-Protection-1: Empty JSONPath expression.

Пример скриншота с ошибкой

Текст ошибки EmptyJSONPathExpression

Причина

Если в правиле RegularExpressionProtection нет элемента <Expression> в элементе <JSONPath>, развертывание прокси-сервера API завершится неудачно.

диагностика;

  1. Определите, какое правило защиты на основе регулярных выражений не удалось применить, по сообщению об ошибке. Например, в приведенной ниже ошибке название правила – Regular-Expression-Protection-1:

    Error Saving Revision 1
    RegularExpressionProtection Regular-Expression-Protection-1: Empty JSONPath expression.
  2. В XML-файле правил защиты с помощью регулярных выражений, которые не удалось применить, определите, есть ли элемент <JSONPayload> с дочерним элементом <JSONPath>, в котором не определен элемент <Expression> или для элемента <Expression> не задано значение. Если да, то это и есть причина ошибки.

    Ниже приведен пример правила защиты с использованием регулярных выражений, в котором есть элемент <JSONPayload>:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
        <RegularExpressionProtection async="false" continueOnError="false" enabled="true" name="Regular-Expression-Protection-1">
          <DisplayName>Regular Expression Protection-1</DisplayName>
          <Properties/>
          <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
          <Source>request</Source>
          <JSONPayload>
            <JSONPath>
              <Expression></Expression>
              <Pattern>REGEX PATTERN</Pattern>
              <Pattern>REGEX PATTERN</Pattern>
            </JSONPath>
          </JSONPayload>
        </RegularExpressionProtection>

    Поскольку в элементе <JSONPath> есть пустой элемент <Expression>, развертывание прокси API не удается.

Разрешение

Убедитесь, что в правиле RegularExpressionProtection под элементом <JSONPath> определен непустой и действительный элемент <Expression>. Пример:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<RegularExpressionProtection async="false" continueOnError="false" enabled="true" name="Regular-Expression-Protection-1">
  <DisplayName>Regular Expression Protection-1</DisplayName>
  <Properties/>
  <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
  <Source>request</Source>
  <JSONPayload>
    <JSONPath>
      <Expression>$.store.book[*].author</Expression>
      <Pattern>REGEX PATTERN</Pattern>
      <Pattern>REGEX PATTERN</Pattern>
    </JSONPath>
  </JSONPayload>
</RegularExpressionProtection>