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

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

ИнвалидРегулярноеВыражение

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

Развертывание прокси-сервера 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 из сообщения об ошибке. Например, в следующей ошибке имя политики RegularExpressionProtectionRegular-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> of 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 и как они влияют на XPath и 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> в политике RegularExpressionProtection . Если конкретное <Expression> , указанное в сообщении об ошибке, использует префикс или значение, которое не является частью пространств имен, объявленных в политике RegularExpressionProtection , то это и есть причина ошибки.

    Обратите внимание, что конкретный <XPath> использует префикс notapigee в примере политики RegularExpressionProtection :

    <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>

Каннотбеконвертедтонодесет

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

Развертывание прокси-сервера 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 выше).

    Например, следующая политика определяет as 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>

Ошибка компиляции JSONPath

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

Развертывание прокси-сервера 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 недопустимо, развертывание прокси-сервера 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>

НичегоToEnforce

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

Развертывание прокси-сервера 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>
    

    Поскольку ни один из обязательных элементов не присутствует в политике извлечения переменных, развертывание прокси-сервера 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> . См. политику RegularExpressionProtection для получения информации о том, как правильно указать элемент.

Чтобы исправить приведенный выше пример, мы могли бы просто добавить элемент <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 выше).

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

    <?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 отсутствует, это причина ошибки.

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

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

Разрешение

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

<?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>

Повторяющийся префикс

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

Развертывание прокси-сервера 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.

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

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

Причина

Эта ошибка возникает, если политика 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 выше).

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

    <?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>

Пустое выражениеXPathExpression

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

Развертывание прокси-сервера 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 в элементе <XPath> не установлен элемент <Expression> , развертывание прокси-сервера 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 имеет непустой и допустимый элемент <Expression> , определенный в элементе <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>
      <Pattern>REGEX PATTERN</Pattern>
    </XPath>
  </XMLPayload>
</RegularExpressionProtection>

Пустое выражениеJSONPathExpression

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

Развертывание прокси-сервера 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 в элементе <JSONPath> не установлен элемент <Expression> , развертывание прокси-сервера 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 имеет непустой и допустимый элемент <Expression> , определенный в элементе <JSONPath> . Например:

<?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>