Устранение ошибок развертывания политики извлечения переменных

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

NothingToExtract

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

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

Error Saving Revision [revision_number]
ExtractVariables [policy_name]: at least one of URIPath, QueryParam, Header, FormParam, XMLPayload, JSONPayload is mandatory. Revision:[revision_number]; APIProxy:[proxy_name]; Organization:[org_name]; Environment:[env_name].

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

Error Saving Revision 2
ExtractVariables EV-XML-Age: at least one of URIPath, QueryParam, Header, FormParam, XMLPayload, JSONPayload is mandatory.

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

Причина

Если в политике извлечения переменных отсутствуют какие-либо элементы URIPath , QueryParam , Header , FormParam , XMLPayload или JSONPayload , развертывание API-прокси завершится неудачей, поскольку извлекать нечего.

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

Диагноз

Изучите политику извлечения переменных, указанную в сообщении об ошибке. Если в политике отсутствует хотя бы один из следующих элементов: URIPath , QueryParam , Header , FormParam , XMLPayload или JSONPayload , то это и является причиной ошибки. Например, следующая политика извлечения переменных не содержит ни одного из вышеперечисленных элементов:

<ExtractVariables async="false" continueOnError="false" enabled="true" name="EV-XML-Age">
    <DisplayName>EV-XML-Age</DisplayName>
    <Properties/>
</ExtractVariables>

Поскольку ни один из обязательных элементов не присутствует в политике извлечения переменных, развертывание API-прокси завершается неудачей.

Разрешение

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

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ExtractVariables async="false" continueOnError="false" enabled="true" name="EV-XML-Age">
  <DisplayName>EV-XML-Age</DisplayName>
  <Properties/>
  <Source>request</Source>
  <XMLPayload>
    <Namespaces/>
      <Variable name="age" type="integer">
          <XPath>/age</XPath>
      </Variable>
  </XMLPayload>
</ExtractVariables>

NONEmptyPrefixMappedToEmptyURI

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

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

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

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

Error Saving Revision 3
ExtractVariables EV-XML-Age: Non-empty prefix apigee cannot be mapped to empty uri.

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

Причина

Эта ошибка возникает, если политика извлечения переменных имеет префикс, определенный в элементе <Namespace> внутри элемента <XMLPayload> , но URI не определен.

Диагноз

  1. Укажите политику извлечения переменных, в которой произошла ошибка, и имя префикса. Оба эти элемента можно найти в сообщении об ошибке. Например, в следующем примере ошибки имя политики — EV-XML-Age , а префикс — apigee :

    ExtractVariables EV-XML-Age: 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"?>
    <ExtractVariables async="false" continueOnError="false" enabled="true" name="EV-XML-Age">
        <DisplayName>EV-XML-Age</DisplayName>
        <Source clearPayload="false">request</Source>
        <XMLPayload stopPayloadProcessing="false">
          <Namespaces>
            <Namespace prefix="apigee"></Namespace>
            <Namespace prefix="gmail">http://mail.google.com</Namespace>
          </Namespaces>
        <Variable name="legName" type="string">
        <XPath>/apigee:Directions/apigee:route/apigee:leg/apigee:name</Xpath>
            </Variable>
        </XMLPayload>
    </ExtractVariables>
    
  3. Проверьте, имеет ли элемент <Namespace> с указанным на шаге #2 префиксом действительный URI. Если URI отсутствует, это и является причиной ошибки.

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

    ExtractVariables EV-XML-Age: Non-empty prefix apigee cannot be mapped to empty uri.
    
    

Разрешение

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

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ExtractVariables async="false" continueOnError="false" enabled="true" name="EV-XML-Age">
    <DisplayName>EV-XML-Age</DisplayName>
    <Source clearPayload="false">request</Source>
    <XMLPayload stopPayloadProcessing="false">
    <Namespaces>
        <Namespace prefix="apigee">http://www.apigee.com</Namespace>
        <Namespace prefix="gmail">http://mail.google.com</Namespace>
     </Namespaces>
    <Variable name="legName" type="string">
        <XPath>/apigee:Directions/apigee:route/apigee:leg/apigee:name</Xpath>
    </Variable>
    </XMLPayload>
</ExtractVariables>

DuplicatePrefix

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

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

Error Saving Revision [revision_number]
ExtractVariables [policy_name]: Duplicate prefix [prefix_name].

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

Error Saving Revision 2
ExtractVariables EV-XML-Age: Duplicate prefix apigee.

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

Причина

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

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

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

Диагноз

  1. Укажите политику извлечения переменных, в которой произошла ошибка, и имя префикса. Оба эти элемента можно найти в сообщении об ошибке. Например, в следующем сообщении об ошибке имя политики — EV-XML-Age , а префикс — apigee :

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

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <ExtractVariables async="false" continueOnError="false" enabled="true" name="EV-XML-Age">
        <DisplayName>EV-XML-Age</DisplayName>
        <Source clearPayload="false">request</Source>
        <XMLPayload stopPayloadProcessing="false">
          <Namespaces>
              <Namespace prefix="gmail">http://mail.google.com</Namespace>
              <Namespace prefix="apigee">http://www.apigee.com</Namespace>
              <Namespace prefix="apigee">http://www.apigee.com</Namespace>
          </Namespaces>
          <Variable name="legName" type="string
              <XPath>/apigee:Directions/apigee:route/apigee:leg/apigee:name</XPath>
          </Variable>
        </XMLPayload>
      </ExtractVariables>
    
  3. Определите, был ли элемент <Namespace> с указанным на шаге #2 префиксом определен более одного раза. Если он определен более одного раза, то это и является причиной ошибки.

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

    ExtractVariables EV-XML-Age: Duplicate prefix apigee.
    
    

Разрешение

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

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ExtractVariables async="false" continueOnError="false" enabled="true" name="EV-XML-Age">
    <DisplayName>EV-XML-Age</DisplayName>
    <Source clearPayload="false">request</Source>
    <XMLPayload stopPayloadProcessing="false">
      <Namespaces>
          <Namespace prefix="apigee">http://www.apigee.com</Namespace>
          <Namespace prefix="gmail">http://mail.google.com</Namespace>
      </Namespaces>
      <Variable name="legName" type="string">
          <XPath>/apigee:Directions/apigee:route/apigee:leg/apigee:name</Xpath>
      </Variable>
    </XMLPayload>
</ExtractVariables>

NoXPathsToEvaluate

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

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

Error Saving Revision [revision_number]
ExtractVariables [policy_name]:no xpaths to evaluate in variable name.

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

Error Saving Revision 4
ExtractVariables Extract-Variables-1: no xpaths to evaluate in variable name.

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

Причина

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

Диагноз

  1. Определите, какая политика извлечения переменных не удалась, из сообщения об ошибке. Например, в следующем сообщении об ошибке имя политики — Extract-Variables-1 :

    ExtractVariables Extract-Variables-1: no xpaths to evaluate in variable name.
    
  2. В XML-файле политики извлечения переменных, в котором произошла ошибка, проверьте, есть ли элемент <XMLPayload> без дочернего элемента <XPath> . Если есть, то это и есть причина ошибки.

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

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <ExtractVariables async="false" continueOnError="false" enabled="true" name="Extract-Variables-1">
        <DisplayName>Extract Variables-1</DisplayName>
        <Properties/>
        <Source clearPayload="false">request</Source>
        <VariablePrefix>apigee</VariablePrefix>
        <XMLPayload stopPayloadProcessing="false">
            <Namespaces/>
            <Variable name="HostReachable" type="boolean">
            </Variable>
        </XMLPayload>
    </ExtractVariables>
    

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

Разрешение

Убедитесь, что политика «Извлечение переменных» содержит элемент <XPath> , определенный внутри элемента <XMLPayload> . Например:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ExtractVariables async="false" continueOnError="false" enabled="true" name="Extract-Variables-1">
    <DisplayName>Extract Variables-1</DisplayName>
    <Properties/>
    <Source clearPayload="false">request</Source>
    <VariablePrefix>apigee</VariablePrefix>
    <XMLPayload stopPayloadProcessing="false">
        <Namespaces/>
        <Variable name="HostReachable" type="boolean">
            <XPath>/isReachable</XPath>
        </Variable>
    </XMLPayload>
</ExtractVariables>

EmptyXPathExpression

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

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

Error Saving Revision [revision_number]
ExtractVariables [policy_name]: XPath expression is empty in variable name.

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

Error Saving Revision 6
ExtractVariables Extract-Variables-1: XPath expression is empty in variable name.

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

Причина

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

Диагноз

  1. Определите, какая политика извлечения переменных не удалась, из сообщения об ошибке. Например, в следующем сообщении об ошибке имя политики — Extract-Variables-1 :

    ExtractVariables Extract-Variables-1: no xpaths to evaluate in variable name.
    
  2. В XML-файле политики извлечения переменных, в котором произошла ошибка, определите, существует ли элемент <XMLPayload> с пустым дочерним элементом <XPath> . Если да, то это и есть причина ошибки.

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

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <ExtractVariables async="false" continueOnError="false" enabled="true" name="Extract-Variables-1">
        <DisplayName>Extract Variables-1</DisplayName>
        <Properties/>
        <Source clearPayload="false">request</Source>
        <VariablePrefix>apigee</VariablePrefix>
        <XMLPayload stopPayloadProcessing="false">
            <Namespaces/>
            <Variable name="address" type="string">
                <XPath></XPath>
            </Variable>
        </XMLPayload>
    </ExtractVariables>
    

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

Разрешение

Убедитесь, что политика «Извлечение переменных» содержит непустой и допустимый элемент <XPath> , определенный внутри элемента <XMLPayload> . Например:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ExtractVariables async="false" continueOnError="false" enabled="true" name="Extract-Variables-1">
    <DisplayName>Extract Variables-1</DisplayName>
    <Properties/>
    <Source clearPayload="false">request</Source>
    <VariablePrefix>apigee</VariablePrefix>
    <XMLPayload stopPayloadProcessing="false">
        <Namespaces/>
        <Variable name="address" type="string">
            <XPath>/address</XPath>
        </Variable>
    </XMLPayload>
</ExtractVariables>

NoJSONPathsToEvaluate

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

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

Error Saving Revision [revision_number]
ExtractVariables [policy_name]:no jsonpaths to evaluate in variable name.

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

Error Saving Revision 6
ExtractVariables Extract-Variables-1: no jsonpaths to evaluate in variable name.

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

Причина

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

Диагноз

  1. Определите, какая политика извлечения переменных не удалась, из сообщения об ошибке. Например, в следующем сообщении об ошибке имя политики — Extract-Variables-1 :

    ExtractVariables Extract-Variables-1: no jsonpaths to evaluate in variable name.
    
  2. В XML-файле политики извлечения переменных, в котором произошла ошибка, определите, существует ли элемент <JSONPayload> без обязательного дочернего элемента <JSONPath> . Если да, то это и есть причина ошибки.

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

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <ExtractVariables async="false" continueOnError="false" enabled="true" name="Extract-Variables-1">
        <DisplayName>Extract Variables-1</DisplayName>
        <Properties/>
        <JSONPayload>
            <Variable name="title">
            </Variable>
        </JSONPayload>
        <Source clearPayload="false">request</Source>
        <VariablePrefix>apigee</VariablePrefix>
    </ExtractVariables>
    

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

Разрешение

Убедитесь, что в политике извлечения переменных определен элемент <JSONPath> внутри элемента <JSONPayload> . Например:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ExtractVariables async="false" continueOnError="false" enabled="true" name="Extract-Variables-1">
    <DisplayName>Extract Variables-1</DisplayName>
    <Properties/>
    <JSONPayload>
        <Variable name="title">
            <JSONPath>$.book.title</JSONPath>
        </Variable>
    </JSONPayload>
    <Source clearPayload="false">request</Source>
    <VariablePrefix>apigee</VariablePrefix>
</ExtractVariables>

EmptyJSONPathExpression

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

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

Error Saving Revision [revision_number]
ExtractVariables [policy_name]: JSONPath expression is empty in variable name.

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

Error Saving Revision 6
ExtractVariables Extract-Variables-1: JSONPath expression is empty in variable name.

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

Причина

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

Диагноз

  1. Определите, какая политика извлечения переменных не удалась, из сообщения об ошибке. Например, в следующем сообщении об ошибке имя политики — Extract-Variables-1 :

    ExtractVariables Extract-Variables-1: JSONPath expression is empty in variable name.
    
  2. В XML-файле политики извлечения переменных, в котором произошла ошибка, проверьте, есть ли элемент <JSONPayload> с пустым дочерним элементом <JSONPath> . Если да, то это и есть причина ошибки.

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

        <ExtractVariables async="false" continueOnError="false" enabled="true" name="Extract-Variables-1">
            <DisplayName>Extract Variables-1</DisplayName>
            <Properties/>
            <JSONPayload>
                <Variable name="account_number" type="integer">
                    <JSONPath></JSONPath>
                </Variable>
            </JSONPayload>
            <Source clearPayload="false">request</Source>
            <VariablePrefix>apigee</VariablePrefix>
        </ExtractVariables>
    

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

Разрешение

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

<ExtractVariables async="false" continueOnError="false" enabled="true" name="Extract-Variables-1">
    <DisplayName>Extract Variables-1</DisplayName>
    <Properties/>
    <JSONPayload>
        <Variable name="account_number" type="integer">
           <JSONPath>$.account.number</JSONPath>
        </Variable>
    </JSONPayload>
    <Source clearPayload="false">request</Source>
    <VariablePrefix>apigee</VariablePrefix>
</ExtractVariables>

MissingName

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

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

Error Saving Revision [revision_number]
Error occurred while validation of bean [policy_name].xml Reason: - Required attribute name is missing in [element_name]

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

Error Saving Revision 6
Error occurred while validation of bean Extract-Variables-1.xml. Reason: - Required attribute name is missing in Variable

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

Причина

Если в политике извлечения переменных отсутствует атрибут name ни в одном из элементов политики, таких как QueryParam , Header , FormParam или Variable , где он необходим, то развертывание API-прокси завершится неудачей.

Например, эта ошибка возникает, если в элементе Variable отсутствует атрибут name .

Диагноз

  1. Укажите название политики «Извлечение переменных», в которой произошла ошибка, и элемент, у которого отсутствует атрибут name . Эти данные можно найти в сообщении об ошибке. Например, в следующем сообщении об ошибке название политики — Extract-Variables-1 , а имя элемента — Variable :

    Error occurred while validation of bean Extract-Variables-1.xml. Reason: - Required attribute name is missing in Variable
    
  2. В XML-файле политики извлечения переменных, в котором произошла ошибка, убедитесь, что все элементы с именем, определенным на шаге №1 выше, имеют атрибут name . Если какой-либо элемент не имеет атрибута name, то это и является причиной ошибки.

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

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <ExtractVariables async="false" continueOnError="false" enabled="true" name="Extract-Variables-1">
        <DisplayName>Extract Variables-1</DisplayName>
        <Properties/>
        <Variable type="boolean">
            <Pattern>{isAccountActive}</Pattern>
        </Variable>
    </ExtractVariables>
    

    Обратите внимание, что в элементе Variable отсутствует атрибут name , поэтому развертывание API-прокси завершается неудачей.

Разрешение

Убедитесь, что политика извлечения переменных содержит необходимый атрибут name для элементов QueryParam , Header , FormParam или Variable . Например:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ExtractVariables async="false" continueOnError="false" enabled="true" name="Extract-Variables-1">
    <DisplayName>Extract Variables-1</DisplayName>
    <Properties/>
    <Variable name="account_active" type="boolean">
        <Pattern>{isAccountActive}</Pattern>
    </Variable>
</ExtractVariables>

PatternWithoutVariable

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

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

Error Saving Revision [revision_number]
Pattern [pattern] should have at least one variable in ExtractVariables stepDefinition [policy_name]

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

Error Saving Revision 7
Pattern /a/b/ should have at least one variable in ExtractVariables stepDefinition ExtractVariables-1.

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

Причина

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

Диагноз

  1. Укажите название политики извлечения переменных, в которой произошла ошибка, и шаблон, для которого отсутствует переменная. Эти данные можно найти в сообщении об ошибке. Например, в следующем сообщении об ошибке название политики — Extract-Variables-1 , а имя элемента — /a/b :

    Pattern /a/b/ should have at least one variable in ExtractVariables stepDefinition ExtractVariables-1.
    
  2. В XML-файле политики извлечения переменных, в которой произошла ошибка, убедитесь, что шаблон, заданный в элементе <Pattern> соответствует шаблону, указанному в сообщении об ошибке (шаг № 1 выше). Например, следующая политика задает шаблон /a/b , который соответствует содержимому сообщения об ошибке:

    Например, вот политика извлечения переменных, содержащая три элемента <Pattern> :

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <ExtractVariables name="ExtractVariables-1">
       <Source>request</Source>
       <URIPath>
          <Pattern ignoreCase="true">/a/{pathSeg}</Pattern>
          <Pattern ignoreCase="true">/a/b/</Pattern>
          <Pattern ignoreCase="true">/a/b/c/{pathSeg}</Pattern>
       </URIPath>
       <VariablePrefix>urirequest</VariablePrefix>
    </ExtractVariables>
    
  3. Проверьте, не содержит ли элемент <Pattern> , определенный на шаге №2, переменную. Переменные должны быть заключены в фигурные скобки. Если в шаблоне отсутствует переменная, то это и является причиной ошибки.

    Элемент <Pattern> с шаблоном /a/b не содержит переменной; следовательно, развертывание API-прокси завершается неудачей.

    <Pattern ignoreCase="true">/a/b/</Pattern>
    
    

Разрешение

Убедитесь, что все элементы <Pattern> содержат переменную (имя, заключенное в фигурные скобки). Например:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ExtractVariables name="ExtractVariables-1">
   <Source>request</Source>
   <URIPath>
      <Pattern ignoreCase="true">/a/{pathSeg}</Pattern>
      <Pattern ignoreCase="true">/a/b/{pathSeg}</Pattern>
      <Pattern ignoreCase="true">/a/b/c/{pathSeg}</Pattern>
   </URIPath>
   <VariablePrefix>urirequest</VariablePrefix>
</ExtractVariables>

Невозможно преобразовать в набор узлов

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

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

Error Deploying Revision [revision_number]
ExtractVariables [policy_name]: Result of xpath [policy_name] cannot be converted to nodeset. Context Revision:[revision_number]; APIProxy:[proxy_name]; Organization:[org_name]; Environment:[env_name].

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

Error Deploying Revision 4 to test
ExtractVariables Extract-Variables-1: Result of xpath 123 cannot be converted to nodeset. Context Revision:4;APIProxy:EV-XML;Organization:aprabhashankar-eval;Environment:test.

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

Причина

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

Диагноз

  1. Определите политику извлечения переменных, в которой произошла ошибка, и XPath, который не может быть преобразован в набор узлов. Оба этих элемента можно найти в сообщении об ошибке. Например, в следующем сообщении об ошибке имя политики — Extract-Variables-1 , а XPath — 123 .

    ExtractVariables Extract-Variables-1: Result of xpath 123 cannot be converted to nodeset. Context Revision:4;APIProxy:EV-XML;Organization:aprabhashankar-eval;Environment:test.
    
  2. В XML-файле политики извлечения переменных, в которой произошла ошибка, убедитесь, что XPath, заданный в элементе <XPath> совпадает с XPath, указанным в сообщении об ошибке (шаг № 1 выше). Например, следующая политика указывает следующее: как 123 , что соответствует сообщению об ошибке:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <ExtractVariables async="false" continueOnError="false" enabled="true" name="Extract-Variables-1">
        <DisplayName>Extract Variables-1</DisplayName>
        <Properties/>
        <Source clearPayload="false">request</Source>
        <VariablePrefix>visitor</VariablePrefix>
        <XMLPayload stopPayloadProcessing="false">
            <Namespaces/>
            <Variable name="age" type="nodeset">
                <XPath>123</XPath>
            </Variable>
        </XMLPayload>
    </ExtractVariables>
    
  3. Проверьте тип элемента <Variable> , соответствующего <XPath> , определенному на шаге №2 выше. Если тип <Variable>nodeset , то это и является причиной ошибки.

    Обратите внимание, что в примере политики извлечения переменных выражение <XPath> равно 123 .

    <XPath>123</XPath>
    

    Выражение 123 не может быть преобразовано в набор узлов. Поэтому развертывание API-прокси завершается неудачей.

Разрешение

Убедитесь, что выражения <XPath> , используемые в политике извлечения переменных, могут быть преобразованы в набор узлов, если тип <Variable> определен как набор узлов. Например:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ExtractVariables async="false" continueOnError="false" enabled="true" name="Extract-Variables-1">
    <DisplayName>Extract Variables-1</DisplayName>
    <Properties/>
    <Source clearPayload="false">request</Source>
    <VariablePrefix>visitor</VariablePrefix>
    <XMLPayload stopPayloadProcessing="false">
        <Namespaces/>
        <Variable name="age" type="nodeset">
            <XPath>/visitor/age</XPath>
        </Variable>
    </XMLPayload>
</ExtractVariables>

InvalidPattern

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

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

Error Deploying Revision [revision_number]
Pattern [pattern] is invalid in ExtractVariables stepDefinition [policy_name]

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

Error Deploying Revision 18 to test
Pattern {*} is invalid in ExtractVariables stepDefinition ExtractVariables-2.

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

Причина

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

Диагноз

  1. Определите, какая политика извлечения переменных не работает, из сообщения об ошибке. Например, в следующем сообщении об ошибке имя политики — Extract-Variables-2 :

    Pattern {*} is invalid in ExtractVariables stepDefinition ExtractVariables-2.
    
  2. В XML-файле политики извлечения переменных, в котором произошла ошибка, проверьте наличие следующих элементов и включите в него элемент <Pattern> : URIPath , QueryParam , Header , FormParam , XMLPayload или JSONPayload .

    Например, вот пример политики извлечения переменных с элементом <Pattern> внутри элемента <QueryParam> :

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <ExtractVariables name="ExtractVariables-2">
        <DisplayName>ExtractVariables-2</DisplayName>
        <Source>request</Source>
        <QueryParam name="code">
            <Pattern ignoreCase="true">{*}</Pattern>
        </QueryParam>
        <VariablePrefix>queryinfo</VariablePrefix>
    </ExtractVariables>
    
  3. Проверьте определение каждого из элементов <Pattern> . Если какой-либо элемент <Pattern> имеет недопустимое определение, то это и является причиной ошибки.

    В приведенном выше примере политики извлечения переменных обратите внимание, что определение <Pattern> внутри элемента <QueryParam> недействительно; следовательно, развертывание API-прокси завершается неудачей. См. также раздел «О сопоставлении и создании переменных» .

    <Pattern ignoreCase="true">{*}</Pattern>
    
    

Разрешение

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

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ExtractVariables name="ExtractVariables-2">
    <DisplayName>Extract a value from a query parameter</DisplayName>
    <Source>request</Source>
    <QueryParam name="code">
        <Pattern ignoreCase="true">{code}</Pattern>
    </QueryParam>
    <VariablePrefix>queryinfo</VariablePrefix>
</ExtractVariables>

См. также раздел «О сопоставлении и создании переменных».

XPathCompilationFailed

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

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

Error Deploying Revision [revision_number]
ExtractVariables [policy_name]: Failed to compile xpath [xpath] Context Revision:[revision_number]; APIProxy:[proxy_name]; Organization:[org_name]; Environment:[env_name].

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

Error Deploying Revision 1 to test
ExtractVariables EV-XML-Age: Failed to compile xpath /apigee:Directions/apigee:route/apigee:leg/apigee:name. Context Revision:1;APIProxy:EV-XML;Organization:aprabhashankar-eval;Environment:test.

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

Причина

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

Более подробную информацию о пространствах имен, XPath и префиксах можно найти в статье «Пространства имен XML и их влияние на XPath и XSLT» .

Диагноз

  1. Определите политику извлечения переменных, в которой произошла ошибка, и XPath, который не удалось скомпилировать. Оба этих элемента можно найти в сообщении об ошибке. Например, в следующем сообщении об ошибке имя политики — EV-XML-Age , а XPath /apigee:Directions/apigee:route/apigee:leg/apigee:name .

    ExtractVariables EV-XML-Age: Failed to compile xpath /apigee:Directions/apigee:route/apigee:leg/apigee:name. Context Revision:1;APIProxy:EV-XML;Organization:aprabhashankar-eval;Environment:test.
    
  2. В XML-файле политики извлечения переменных, в которой произошла ошибка, убедитесь, что XPath, заданный в элементе <XPath> совпадает с XPath, указанным в сообщении об ошибке (шаг № 1 выше). Например, следующая политика указывает следующее: как /apigee:Directions/apigee:route/apigee:leg/apigee:name , что соответствует сообщению об ошибке:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <ExtractVariables async="false" continueOnError="false" enabled="true" name="EV-XML-Age">
      <DisplayName>EV-XML-Age</DisplayName>
      <Source clearPayload="false">request</Source>
      <XMLPayload stopPayloadProcessing="false">
        <Namespaces>
            <Namespace prefix="gmail">http://mail.google.com</Namespace>
        </Namespaces>
        <Variable name="legName" type="string">
        <XPath>/apigee:Directions/apigee:route/apigee:leg/apigee:name</XPath>
            </Variable>
      </XMLPayload>
    </ExtractVariables>
    
  3. Проверьте элементы <Namespaces> и <XPath> в политике извлечения переменных. Если указанный в сообщении об ошибке элемент <XPath> использует префикс или значение, не входящее в пространства имен, объявленные в политике извлечения переменных, то это и является причиной ошибки.

    Обратите внимание, что в примере политики извлечения переменных в конкретном <XPath> используется префикс apigee .

    <XPath>/apigee:Directions/apigee:route/apigee:leg/apigee:name</XPath>
    

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

Разрешение

Убедитесь, что все пространства имен, используемые в элементах <XPath> , объявлены в политике извлечения переменных. Например:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ExtractVariables async="false" continueOnError="false" enabled="true" name="EV-XML-Age">
  <DisplayName>EV-XML-Age</DisplayName>
  <Source clearPayload="false">request</Source>
  <XMLPayload stopPayloadProcessing="false">
    <Namespaces>
        <Namespace prefix="apigee">http://www.apigee.com</Namespace>
        <Namespace prefix="gmail">http://mail.google.com</Namespace>
    </Namespaces>
    <Variable name="legName" type="string">
        <XPath>/apigee:Directions/apigee:route/apigee:leg/apigee:name</XPath>
    </Variable>
  </XMLPayload>
</ExtractVariables>