Solução de problemas de erro no ambiente de execução de variáveis

Esta é a documentação da Apigee e da Apigee híbrida.
Confira a documentação da Apigee Edge.

SourceMessageNotAvailable

Código do erro

steps.extractvariables.SourceMessageNotAvailable

Corpo da resposta de erro

{
  "fault": {
      "faultstring": "[variable_name] message is not available for ExtractVariable: [policy_name]",
      "detail": {
          "errorcode": "steps.extractvariables.SourceMessageNotAvailable"
      }
  }
}

Causa

Esse erro ocorrerá se a variável message especificada no elemento <Source> da política de extração de variáveis for:

  • fora do escopo (não disponível no fluxo específico em que a política está sendo executada) ou
  • não é possível resolver (não está definida)

Por exemplo, esse erro ocorrerá se a política de variáveis de extração for executada no fluxo da solicitação, mas o elemento <Source> estiver definido como a variável response ou error que não existe no fluxo da solicitação.

Diagnóstico

  1. Identifique a política de extração de variáveis em que o erro ocorreu e o nome da variável que não está disponível. É possível encontrar os dois itens no elemento faultstring da resposta de erro. Por exemplo, na seguinte string de falha, o nome da política é ExtractVariables-1 e a variável é response:

    "faultstring": "response message is not available for ExtractVariable: ExtractVariables-1"

  2. Na política XML com extração de variáveis com falha, verifique se o nome da variável no elemento corresponde ao nome da variável identificado na string de falha (etapa 1 acima). Por exemplo, a seguinte política de variáveis de extração especifica uma variável chamada response no elemento, que corresponde ao que está na string de falha:

    <ExtractVariables name="ExtractVariables-1">
        <Source>response</Source>
        <URIPath>
            <Pattern ignoreCase="true">/a/{pathSeg}</Pattern>
        </URIPath>
        <VariablePrefix>urirequest</VariablePrefix>
    </ExtractVariables>
    
  3. Determine se a variável usada no elemento <Source> está definida e disponível no fluxo em que a política de extração de variáveis está sendo executada.

  4. Se a variável for:

    • fora do escopo (não disponível no fluxo específico em que a política está sendo executada) ou
    • não é possível resolver (não está definida)

    essa será a causa do erro.

    Como exemplo, digamos que a política de extração de variáveis mostrada acima é executada no fluxo de solicitação. Lembre-se de que a variável response é usada no elemento <Source> da política de variáveis de extração. A variável response está disponível somente no fluxo de resposta.

    Como a variável response não existe no fluxo de solicitação, você recebe o código de erro: steps.extractvariables.SourceMessageNotAvailable.

Resolução

Verifique se a variável definida no elemento <Source> da política com falha de extração está definida e existe no fluxo em que a política é executada.

Para corrigir a política de extração de variáveis de exemplo mostrada acima, você pode modificar o elemento <Source> para usar a variável request como ela existe no fluxo de solicitação:

<ExtractVariables name="ExtractVariables-1">
    <Source>request</Source>
    <URIPath>
        <Pattern ignoreCase="true">/a/{pathSeg}</Pattern>
    </URIPath>
    <VariablePrefix>urirequest</VariablePrefix>
</ExtractVariables>

SetVariableFailed

Código do erro

steps.extractvariables.SetVariableFailed

Corpo da resposta de erro

{
    "fault": {
        "faultstring": "Failed to set variable [variable_name] value [variable_value] from ExtractVariables: [policy_name]",
        "detail": {
            "errorcode": "steps.extractvariables.SetVariableFailed"
        }
    }
}

Causa

Esse erro ocorre quando a política de extração de variáveis não pode definir o valor como uma variável. Isso geralmente acontece quando você tenta atribuir valores a diversas variáveis cujos nomes começam com as mesmas palavras em um formato separado por pontos aninhado.

Por exemplo, digamos que você criou/atribua um valor a uma variável var.color. Nesse caso, color é alocado como um nó de objeto. Se você tentar atribuir um valor a outra variável var.color.next, ela falhará porque color já está alocado e não está permitida a alocar outra variável para ela.

Diagnóstico

  1. Identifique a política de extração de variáveis em que o erro ocorreu e o nome da variável para a qual o valor não pode ser definido. É possível encontrar os dois itens no elemento faultstring da resposta de erro. Por exemplo, na seguinte string de falha, o nome da política é ExtractColors e a variável é var.color.next:

    "faultstring": "Failed to set variable var.color.next value red from ExtractVariables: ExtractColors"

  2. Na política XML de extração com falha, verifique se o nome da variável corresponde ao nome identificado na string de falha (etapa 1 acima). Por exemplo, a seguinte política tenta atribuir um valor de um parâmetro de consulta de solicitação a uma variável chamada var.color.next (o valor que aparece na string de falha):

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <ExtractVariables name="ExtractColors">
        <DisplayName>ExtractColors</DisplayName>
        <Source>request</Source>
        <QueryParam name="color">
            <Pattern ignoreCase="true">{color}</Pattern>
        </QueryParam>
        <QueryParam name="nextcolor">
            <Pattern ignoreCase="true">{color.next}</Pattern>
        </QueryParam>
        <VariablePrefix>var</VariablePrefix>
    </ExtractVariables>
    
  3. Examine todos os nomes de variáveis usados na política Extract Variables. Se você atribuiu um valor a outra variável cujo nome começa com o mesmo nome identificado na string de falha (etapa 1 acima), essa é a causa do erro.

    No exemplo de política de extração de variáveis mostrado acima, observe que:

    • O valor do parâmetro de consulta chamado color é atribuído primeiro a uma variável var.color . Observação: var é o prefixo de todas as variáveis, conforme definido no elemento <VariablePrefix>)
    • Na próxima atribuição, o valor do parâmetro de consulta nextcolor é atribuído a outra variável var.color.next.
    • Como o var.color já está alocado, a política de variáveis de extração não pode alocar outra variável aninhada var.color.next. Você recebe o código do erro: steps.extractvariables.SetVariableFailed

Resolução

Garanta que você não tenha vários nomes de variáveis com nomes que começam com as mesmas palavras aninhadas em formato separado por pontos.

Para corrigir a política de variáveis de extração mostradas acima, modifique o nome da variável var.color.next para usar var.nextcolor.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ExtractVariables name="ExtractColors">
    <DisplayName>ExtractColors</DisplayName>
    <Source>request</Source>
    <QueryParam name="color">
        <Pattern ignoreCase="true">{color}</Pattern>
    </QueryParam>
    <QueryParam name="nextcolor">
        <Pattern ignoreCase="true">{nextcolor}</Pattern>
    </QueryParam>
    <VariablePrefix>var</VariablePrefix>
</ExtractVariables>

Mais informações

Veja mais detalhes nesta postagem da comunidade.

InvalidJSONPath

Código do erro

steps.extractvariables.InvalidJSONPath

Corpo da resposta de erro

{
    "fault": {
        "faultstring": "Invalid JSON path [path_name] in policy [policy_name].",
        "detail": {
            "errorcode": "steps.extractvariables.InvalidJSONPath"
        }
    }
}

Causa

Esse erro ocorrerá se um caminho JSON inválido for usado no elemento <JSONPath> da política de variáveis de extração. Por exemplo, se um payload JSON não tiver o objeto Name, mas você especificar Name como o caminho na política de variáveis de extração, esse erro ocorrerá.

Diagnóstico

  1. Identifique a política de variáveis de extração em que o erro ocorreu e o caminho JSON inválido. É possível encontrar os dois itens no elemento faultstring da resposta de erro. Por exemplo, na string de falha a seguir, o nome da política é ExtractJSONVariables e o caminho JSON inválido é $.Name:

    "faultstring": "Invalid JSON path $.Name in policy ExtractJSONVariables."

  2. No XML de política de extração de variáveis com falha, verifique se o caminho JSON definido no elemento <JSONPath> corresponde ao caminho identificado na string de falha (etapa 1 acima). Por exemplo, a seguinte política de variáveis de extração especifica o caminho JSON $.Name, que corresponde ao que está na string de falha:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <ExtractVariables name="ExtractJSONVariables">
        <Source>response</Source>
        <JSONPayload>
            <Variable name="name" type="string">
                <JSONPath>$.Name</JSONPath>
            </Variable>
        </JSONPayload>
       <VariablePrefix>employee</VariablePrefix>
    </ExtractVariables>
    
  3. Analise o elemento <Source> e determine de qual payload JSON você está tentando extrair a variável. Por exemplo, se o elemento <Source> estiver definido como request, a política extrairá o payload JSON do objeto de solicitação. Se estiver definido como response, seria um objeto de resposta.

    No exemplo de política de extração de variáveis mostrado acima, o elemento <Source> é definido como response, de modo que as variáveis estão sendo extraídas do payload JSON da resposta.

    <Source>response</Source>

  4. Examine o payload JSON apropriado (determinado da etapa 3) e confirme se ele tem o objeto especificado no elemento <JSONPath>. Se o payload JSON não tiver esse objeto, essa será a causa do erro.

    Por exemplo, considere que você está tentando extrair variáveis do seguinte payload de resposta JSON:

    {
      "firstName":"John",
      "lastName":"Doe",
      "city":"San Jose",
      "state":"CA"
    }
    

    Como a carga útil da resposta JSON não tem o objeto Name, a política de variáveis de extração falha com o erro que você recebeu o código de erro: steps.extractvariables.InvalidJSONPath.

Resolução

Verifique se somente os objetos que fazem parte do payload JSON de onde as variáveis estão sendo extraídas são especificados no elemento <JSONPath> da política de variáveis de extração.

Para corrigir a política de extração de variáveis de exemplo mostrada acima, você pode modificar o elemento <JSONPath> para especificar um dos objetos disponíveis no exemplo de payload de resposta JSON (por exemplo, os objetos firstName e lastName são válidos):

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ExtractVariables name="ExtractJSONVariables">
    <Source>response</Source>
    <JSONPayload>
        <Variable name="name" type="string">
           <JSONPath>$.firstName</JSONPath>
        </Variable>
    </JSONPayload>
    <VariablePrefix>employee</VariablePrefix>
</ExtractVariables>

ExecutionFailed

Código do erro

steps.extractvariables.ExecutionFailed

Corpo da resposta de erro

{
    "fault": {
        "faultstring": "Failed to execute the ExtractVariables: [policy_name]",
        "detail": {
            "errorcode": "steps.extractvariables.ExecutionFailed"
        }
    }
}

Causas possíveis

Veja a seguir as possíveis causas para esse erro:

Causa Descrição
Payload de entrada ausente O payload de entrada (JSON, XML) está vazio.
Entrada inválida ou malformada A entrada (JSON, XML etc.) passada para a política é inválida ou está incorreta.

Causa: payload de entrada ausente

Se a política de extração de variáveis tiver que extrair as variáveis de um payload JSON ou XML, mas o conteúdo (payload) da variável especificada no elemento <Source> estiver vazio, esse erro ocorrerá.

Por exemplo, se o elemento <Source> na política "Extract Variables" estiver definido como request ou response e eles tiverem que conter payload em JSON ou XML, mas esse payload estiver vazio, o erro ocorrerá.

Diagnóstico

  1. Identifique a política de variáveis de extração em que o erro ocorreu. É possível encontrar essas informações no elemento failurestring da resposta de erro. Por exemplo, na seguinte string de falha, o nome da política é ExtractJSONVariables:

    "faultstring": "Failed to execute the ExtractVariables: ExtractXMLVariables"

  2. Examine o elemento <Source> no XML com falha de variáveis de extração e determine o tipo de entrada a partir da qual as variáveis estão sendo extraídas. Por exemplo, a política de extração de variáveis a seguir tem o elemento <Source> definido como response e extrai as variáveis do payload XML:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
        <ExtractVariables name="ExtractXMLVariables" async="false" continueOnError="false" enabled="true">
        <XMLPayload>
            <Namespaces/>
            <Variable name="City" type="string">
                <XPath>/city</XPath>
            </Variable>
        </XMLPayload>
        <Source clearPayload="false">response</Source>
    </ExtractVariables>
    
    
  3. Verifique se a entrada que está sendo analisada pela política de variáveis de extração está vazia. Se a entrada estiver vazia, essa é a causa do erro.

    No exemplo de política de extração de variáveis mostrado acima, a carga útil de resposta (ou seja, o corpo da resposta) enviada pelo servidor de back-end estava vazia.

    Como o payload da resposta XML está vazio, você recebe o código do erro:

    steps.extractvariables.ExecutionFailed

    Esse erro também poderá ocorrer se o elemento <Source> estiver definido como request, mas nenhum payload for passado na solicitação de proxy da API. Exemplo:

    curl -v "http://$EXTERNAL_IP/v1/testevexecutionfailed" -H "Content-Type: application/xml"
    

    Em que $EXTERNAL_IP é o IP do balanceador de carga externo. Esse endereço IP é exposto à Internet. Para mais informações, consulte Personalize o roteamento de acesso.

    A política de extração de variáveis só executa a extração XML quando o cabeçalho Content-Type da mensagem é application/xml, text/xml ou application/*+xml. Você precisará passar o cabeçalho Content-Type como application/xml, text/xml ou application/*+xml se quiser que a política de variáveis de extração analise um payload de solicitação XML.

Resolução

Verifique se a entrada passada para a política de extração de variáveis é válida e não está vazia.

Para corrigir o problema com a política de exemplo de variáveis de extração mostrada acima, transmita um payload XML válido. Exemplo:

  1. Crie um arquivo chamado city.xml com o seguinte conteúdo:

    <city>Bengaluru</city>
    <area>Sanjaynagar</area>
    
  2. Faça a chamada de API usando um comando curl da seguinte maneira:

    curl -v "http://$EXTERNAL_IP/v1/testevexecutionfailed" -H "Content-Type: application/xml" -X POST -d @city.xml
    
    

    Em que $EXTERNAL_IP é o IP do balanceador de carga externo. Esse endereço IP é exposto à Internet. Para mais informações, consulte Personalize o roteamento de acesso.

Causa: entrada inválida ou malformada

Se a política Extract Variables analisar uma entrada inválida ou incorreta, você receberá esse erro.

Por exemplo, se o JSON inválido a seguir for fornecido como entrada para a política de variáveis de extração, você receberá esse erro.

[
    "args": ["name" : "amar" ]
]

Diagnóstico

  1. Identifique a política de variáveis de extração em que o erro ocorreu. Você encontra essas informações no elemento faultstring da resposta de erro. Por exemplo, no faultstring a seguir, o nome da política é ExtractJSONVariables:

    "faultstring": "Failed to execute the ExtractVariables: ExtractJSONVariables"

  2. Examine o elemento <Source> no XML com falha de variáveis de extração e determine o tipo de entrada a partir da qual as variáveis estão sendo extraídas. Por exemplo, a política de extração de variáveis a seguir tem o elemento <Source> definido como request e extrai as variáveis do payload JSON:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
        <ExtractVariables name="ExtractJSONVariables" async="false" continueOnError="false" enabled="true">
        <JSONPayload>
            <Variable name="Name" type="string">
                <JSONPath>$.args.name</JSONPath>
            </Variable>
        </JSONPayload>
        <Source clearPayload="false">request</Source>
    </ExtractVariables>
    
    
  3. Verifique se a entrada que está sendo analisada pela política de variáveis de extração é válida. Se a entrada for inválida ou estiver malformada, essa será a causa do erro.

    No exemplo de política de extração de variáveis mostrado acima, o seguinte JSON inválido foi passado à política de extração de variáveis

    [
        "args": ["name" : "amar" ]
    ]
    

    Veja o exemplo de uma chamada de API que mostra como a solicitação foi passada:

    curl -v "http://<$EXTERNAL_IP/v1/testevexecutionfailed" -H "Content-Type: application/json" -X POST -d '[ "args" : ["name" : "amar" ]]'
    

    Em que $EXTERNAL_IP é o IP do balanceador de carga externo. Esse endereço IP é exposto à Internet. Para mais informações, consulte Personalize o roteamento de acesso.

    O payload JSON transmitido à API é inválido porque contém uma matriz com colchetes ([ ]). Portanto, você recebe o código de erro:

    steps.extractvariables.ExecutionFailed
    

    Esse erro também poderá ocorrer se o elemento <Source> tiver sido definido como response, mas o payload de resposta JSON for inválido ou estiver incorreto.

Resolução

Verifique se a entrada passada para a política de extração de variáveis é válida e não está malformada.

Para corrigir o problema com a política de exemplo de variáveis de extração discutida acima, passe uma solicitação de payload JSON válida da seguinte maneira:

{
   "args":{
      "name":"amar"
   }
}

UnableToCast

Código do erro

steps.extractvariables.UnableToCast

Corpo da resposta de erro

{
    "fault": {
        "faultstring": "Unable to cast value [value] as [type].",
        "detail": {
            "errorcode": "steps.extractvariables.UnableToCast"
        }
    }
}

Causa

Esse erro ocorrerá se a política de variáveis de extração não conseguir transmitir o valor extraído em uma variável. Normalmente, isso ocorre quando você tenta definir o valor de um tipo de dados para uma variável de outro tipo de dados.

Por exemplo, se a política "Extrair variável" tentar definir um valor que tenha sido extraído de uma variável "String" para uma variável "Inteiro", você verá esse erro.

Diagnóstico

  1. Identifique o tipo de dados da variável em que a política de variáveis de extração está tentando transmitir e falhará. Você encontra essas informações no elemento faultstring da resposta de erro. Por exemplo, no faultstring a seguir, o tipo de objeto é BOOLEAN:

    "faultstring":"Unable to cast value 36.231 as BOOLEAN."

  2. Identifique a política de extração de variáveis em que você está tentando definir o valor como uma variável do tipo determinada na etapa 1.

    Por exemplo, a política de variáveis de extração a seguir extrai o valor de um JSONPath $.latitude para uma variável do tipo boolean, que corresponde ao que está na string de falha:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
        <ExtractVariables name="EV-XML-Name" async="false" continueOnError="false" enabled="true">
        <JSONPayload>
          <Variable name="latitude" type="boolean">
              <JSONPath>$.latitude</JSONPath>
          </Variable>
        </JSONPayload>
        <Source clearPayload="false">response</Source>
    </ExtractVariables>
    
    
  3. Examine o tipo de dados do valor que está sendo extraído. Os dados podem estar na forma de cabeçalhos, caminhos de URI, payloads JSON/XML, parâmetros de formulário e parâmetros de consulta.

  4. Verifique se o tipo de dados determinado na etapa 3 e o tipo de dados da variável a que os dados estão sendo atribuídos (determinado na etapa 2) são iguais.

  5. Se o tipo de dados das variáveis de origem e destino não for o mesmo, isso é a causa do erro.

    No exemplo de política de extração de variáveis mostrado acima, considere o payload da solicitação JSON:

    {
     "latitude":36.2312
    }
    

    O tipo de dados do valor extraído do <JSONPath>, '$.latitude', é um número inteiro, que está sendo atribuído a uma variável do tipo de dados booleano.

    Como o tipo de dados do valor extraído e o tipo de dados da variável a que o valor está sendo atribuído não são iguais, você recebe o código do erro: steps.extractvariables.UnableToCast.

Resolução

Verifique se o tipo de dados do valor extraído e a variável a que o conteúdo está sendo atribuído são do mesmo tipo.

Para corrigir a política de extração de variáveis de exemplo, é preciso modificar o tipo da variável para inteiro:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ExtractVariables name="EV-XML-Name" async="false" continueOnError="false" enabled="true">
    <JSONPayload>
        <Variable name="latitude" type="integer">
            <JSONPath>$.latitude</JSONPath>
        </Variable>
    </JSONPayload>
    <Source clearPayload="false">response</Source>
</ExtractVariables>

JsonPathParsingFailure

Código do erro

steps.extractvariables.JsonPathParsingFailure

Corpo da resposta de erro

{
    "fault": {
        "faultstring": "ExtractVariables [policy_name]: Json path parsing failed for for flow variables [variable_name]",
        "detail": {
            "errorcode": "steps.extractvariables.JsonPathParsingFailure"
        }
    }
}

Causa

Esse erro ocorre quando a política de extração de variáveis não consegue analisar um caminho JSON e extrair dados da variável de fluxo especificada no elemento <Source>. Normalmente, isso acontece se a variável de fluxo especificada no elemento <Source> não existir no fluxo atual.

Por exemplo, esse erro ocorrerá se a política de variáveis de extração for executada no fluxo de resposta e espera analisar um caminho JSON, mas o elemento <Source> especifica a variável de fluxo request.content, que não existem no fluxo de respostas.

Diagnóstico

  1. Identifique a política de variáveis de extração em que o erro ocorreu e o nome da variável de fluxo em que os dados não foram extraídos. É possível encontrar esses dois itens no elemento de string de falha da resposta de erro. Por exemplo, na seguinte string de falha, o nome da política é ExtractVariables-1 e a variável é request.content:

    "faultstring": "ExtractVariables ExtractJSONVariabes: Json path parsing failed for for flow variables request.content"

  2. No XML de política de extração de variáveis com falha, verifique se o nome da variável definida no elemento <Source> corresponde ao nome da variável identificado na string com falha (etapa 1 acima). Por exemplo, a seguinte política de variáveis de extração especifica uma variável chamada request.content, que corresponde ao que está na string de falha:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
        <ExtractVariables name="ExtractJSONVariables" async="false" continueOnError="false" enabled="true">
        <JSONPayload>
            <Variable name="Name" type="string">
                <JSONPath>$.args.name</JSONPath>
            </Variable>
        </JSONPayload>
        <Source clearPayload="false">request.content</Source>
    </ExtractVariables>
    
    
  3. Valide se a variável de fluxo usada no elemento <Source> está definida e disponível no fluxo em que a política de extração de variáveis está sendo executada.

  4. Se a variável for:

    • fora do escopo (não disponível no fluxo específico em que a política está sendo executada) ou
    • não é possível resolver (não está definida)

    essa será a causa do erro.

    Como exemplo, digamos que a política ExtractVariables exibida acima deve ser executada no fluxo de resposta. A variável de fluxo request.content é usada no elemento <Source> da política de variáveis de extração. A variável de fluxo request.content está disponível apenas no fluxo de solicitação.

    Como a variável response não existe no fluxo de solicitação, você recebe o código de erro: steps.extractvariables.JsonPathParsingFailure.

Resolução

Verifique se a variável de fluxo usada no elemento <Source> da política de variáveis de extração está disponível no fluxo em que a política de variáveis de extração é executada.

Por exemplo, suponha que uma variável chamada response.content exista no fluxo de resposta e, na verdade, contenha o JSON que você quer extrair. Para corrigir a política de variáveis de extração mostradas acima, você pode modificar o elemento <Source> da seguinte maneira:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ExtractVariables name="ExtractJSONVariables" async="false" continueOnError="false" enabled="true">
    <JSONPayload>
        <Variable name="Name" type="string">
            <JSONPath>$.args.name</JSONPath>
        </Variable>
    </JSONPayload>
    <Source clearPayload="false">response.content</Source>
</ExtractVariables>