Resolução de problemas de erros de tempo de execução de variáveis de extração

Está a ver a documentação do Apigee e do Apigee Hybrid.
Ver documentação do Apigee Edge.

SourceMessageNotAvailable

Código de 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

Este erro ocorre se a variável message especificada no elemento<Source> da política Extract Variables for:

  • Fora do âmbito (não disponível no fluxo específico em que a política está a ser executada) ou
  • não é possível resolver (não está definido)

Por exemplo, este erro ocorre se a política Extract Variables for executada no fluxo de pedidos, mas o elemento <Source> estiver definido para a variável response ou error, que não existe no fluxo de pedidos.

Diagnóstico

  1. Identifique a política Extract Variables onde ocorreu o erro e o nome da variável que não está disponível. Pode encontrar ambos os itens no elemento faultstring da resposta de erro. Por exemplo, na faultstring seguinte, o nome da política é ExtractVariables-1 e a variável é response:

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

  2. No XML da política de variáveis de extração com falha, verifique se o nome da variável definido no elemento corresponde ao nome da variável identificado na string de falha (passo n.º 1 acima). Por exemplo, a seguinte política Extract Variables especifica uma variável denominada 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. Determinar se a variável usada no elemento <Source> está definida e disponível no fluxo no qual a política Extract Variables está a ser executada.

  4. Se a variável for:

    • Fora do âmbito (não disponível no fluxo específico em que a política está a ser executada) ou
    • não é possível resolver (não está definido)

    Nesse caso, essa é a causa do erro.

    Por exemplo, suponhamos que a política Extract Variables apresentada acima é executada no fluxo de pedido. Recorde que a variável response é usada no elemento <Source> da política Extrair variáveis. A variável response só está disponível no fluxo de respostas.

    Uma vez que a variável response não existe no fluxo de pedidos, recebe o código de erro: steps.extractvariables.SourceMessageNotAvailable.

Resolução

Certifique-se de que a variável definida no elemento <Source> da política Extract Variables com falha está definida e existe no fluxo onde a política é executada.

Para corrigir a política Extract Variables de exemplo apresentada acima, pode modificar o elemento <Source> para usar a variável request tal como existe no fluxo de pedidos:

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

SetVariableFailed

Código de 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

Este erro ocorre se a política Extract Variables não conseguir definir o valor para uma variável. Geralmente, isto acontece se tentar atribuir valores a várias variáveis cujos nomes começam pelas mesmas palavras num formato aninhado separado por pontos.

Por exemplo, suponhamos que cria/atribui um valor a uma variável var.color. Neste caso, color é atribuído como um nó de objeto. Se tentar atribuir um valor a outra variável var.color.next, a atribuição falha porque color já está alocada e não é permitido alocar outra variável à mesma.

Diagnóstico

  1. Identifique a política Extract Variables onde ocorreu o erro e o nome da variável para a qual não foi possível definir o valor. Pode encontrar ambos os 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. No XML da política Extract Variables com falha, verifique se o nome da variável corresponde ao nome da variável identificado na string de falha (passo n.º 1 acima). Por exemplo, a seguinte política tenta atribuir um valor de um parâmetro de consulta de pedido a uma variável denominada 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 com falha. Se tiver atribuído um valor a outra variável cujo nome comece pelo mesmo nome que o nome da variável identificado na string de falha (passo n.º 1 acima), essa é a causa do erro.

    No exemplo da política Extract Variables apresentado acima, repare que:

    • O valor do parâmetro de consulta denominado color é primeiro atribuído a uma variável var.color (Nota: var é o prefixo de todas as variáveis, conforme definido no elemento <VariablePrefix>)
    • Na atribuição seguinte, o valor do parâmetro de consulta nextcolor é atribuído a outra variável var.color.next.
    • Uma vez que o var.color já está atribuído, a política Extract Variables não pode atribuir outra variável aninhada var.color.next. Assim, recebe o código de erro: steps.extractvariables.SetVariableFailed

Resolução

Certifique-se de que não tem vários nomes de variáveis cujos nomes comecem pelas mesmas palavras aninhadas no formato separado por pontos.

Para corrigir a política Extract Variables apresentada acima, pode modificar o nome da variável var.color.next para usar o nome da variável 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

Para mais detalhes, consulte esta publicação da comunidade.

InvalidJSONPath

Código de 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

Este erro ocorre se for usado um caminho JSON inválido no elemento <JSONPath> da política Extract Variables. Por exemplo, se um payload JSON não tiver o objeto Name, mas especificar Name como o caminho na política Extract Variables, ocorre este erro.

Diagnóstico

  1. Identifique a política Extract Variables onde ocorreu o erro e o caminho JSON inválido. Pode encontrar ambos os itens no elemento faultstring da resposta de erro. Por exemplo, na seguinte string de falha, o nome da política é ExtractJSONVariables e o caminho JSON inválido é $.Name:

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

  2. No XML da política Extract Variables com falha, verifique se o caminho JSON definido no elemento <JSONPath> corresponde ao caminho identificado na string de falha (passo n.º 1 acima). Por exemplo, a seguinte política Extract Variables 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. Examine o elemento <Source> e determine de que payload JSON está a tentar extrair a variável. Por exemplo, se o elemento <Source> estiver definido como request, a política está a extrair o payload JSON do objeto de pedido. Se estiver definido como response, é o objeto de resposta.

    No exemplo da política Extract Variables apresentado acima, o elemento <Source> está definido como response, pelo que as variáveis estão a ser extraídas da carga útil JSON da resposta.

    <Source>response</Source>

  4. Examine o payload JSON adequado (determinado no passo n.º 3) e valide se tem o objeto especificado no elemento <JSONPath>. Se o payload JSON não tiver esse objeto, essa é a causa do erro.

    Por exemplo, considere que está a tentar extrair variáveis do seguinte payload de resposta JSON:

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

    Uma vez que o payload da resposta JSON não tem o objeto Name, a política Extract Variables falha com o erro que recebe o código de erro: steps.extractvariables.InvalidJSONPath.

Resolução

Certifique-se de que apenas os objetos que fazem parte do payload JSON do qual as variáveis estão a ser extraídas são especificados no elemento <JSONPath> da política Extract Variables.

Para corrigir a política Extract Variables de exemplo apresentada acima, pode modificar o elemento <JSONPath> para especificar um dos objetos disponíveis no payload de resposta JSON de exemplo (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 de 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

As possíveis causas deste erro são:

Causa Descrição
Payload de entrada em falta O payload de entrada (JSON, XML) está vazio.
Entrada inválida ou com formato incorreto A entrada (JSON, XML, etc.) transmitida à política é inválida ou tem um formato incorreto.

Causa: payload de entrada em falta

Este erro ocorre se a política Extract Variables (Extrair variáveis) se destinar a extrair as variáveis de um payload JSON ou XML, mas o conteúdo (payload) da variável especificada no elemento <Source> estiver vazio.

Por exemplo, se o elemento <Source> na política Extract Variables estiver definido como request ou response e se destinarem a conter uma carga útil JSON ou XML, mas a carga útil estiver vazia, ocorre o erro.

Diagnóstico

  1. Identifique a política Extract Variables onde ocorreu o erro. Pode encontrar estas informações no elemento faultstring da resposta de erro. Por exemplo, na faultstring seguinte, o nome da política é ExtractJSONVariables:

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

  2. Examine o elemento <Source> no XML de variáveis de extração com falhas e determine o tipo de entrada a partir do qual as variáveis estão a ser extraídas. Por exemplo, a seguinte política Extract Variables tem o elemento <Source> definido como response e está a extrair 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. Verifica se a entrada que está a ser analisada pela política Extract Variables está vazia. Se a entrada estiver vazia, essa é a causa do erro.

    No exemplo da política Extract Variables apresentado acima, a carga útil da resposta (ou seja, o corpo da resposta) enviada pelo servidor de back-end estava vazia.

    Uma vez que a carga útil da resposta XML está vazia, recebe o código de erro:

    steps.extractvariables.ExecutionFailed

    Este erro também pode ocorrer se o elemento <Source> estiver definido como request, mas não for transmitido nenhum payload no pedido de proxy da API. Por exemplo:

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

    Em que $EXTERNAL_IP é o endereço IP do balanceador de carga externo. Este endereço IP está exposto à Internet. Para mais informações, consulte o artigo Personalize o encaminhamento de acesso.

    A política Extract Variables só realiza a extração de XML quando o cabeçalho Content-Type da mensagem é application/xml, text/xml ou application/*+xml. Tem de transmitir o cabeçalho Content-Type como application/xml, text/xml ou application/*+xml se quiser que a política Extract Variables analise uma carga útil de pedido XML.

Resolução

Certifique-se de que a entrada transmitida à política Extract Variables é válida e não está vazia.

Para corrigir o problema com a política Extract Variables de exemplo apresentada acima, transmita uma carga útil XML válida. Por exemplo:

  1. Crie um ficheiro denominado city.xml com o seguinte conteúdo:

    <city>Bengaluru</city>
    <area>Sanjaynagar</area>
    
  2. Faça a chamada da API através de um comando cURL da seguinte forma:

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

    Em que $EXTERNAL_IP é o endereço IP do balanceador de carga externo. Este endereço IP está exposto à Internet. Para mais informações, consulte o artigo Personalize o encaminhamento de acesso.

Causa: entrada inválida ou com formato incorreto

Se a política Extrair variáveis analisar uma entrada inválida ou com formato incorreto, recebe este erro.

Por exemplo, se o seguinte JSON inválido for fornecido como entrada para a política Extract Variables, recebe este erro.

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

Diagnóstico

  1. Identifique a política Extract Variables onde ocorreu o erro. Pode encontrar estas informações no elemento faultstring da resposta de erro. Por exemplo, no seguinte faultstring, o nome da política é ExtractJSONVariables:

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

  2. Examine o elemento <Source> no XML de variáveis de extração com falhas e determine o tipo de entrada a partir do qual as variáveis estão a ser extraídas. Por exemplo, a seguinte política Extract Variables tem o elemento <Source> definido como request e está a extrair 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á a ser analisada pela política Extract Variables é válida. Se a entrada for inválida ou tiver um formato incorreto, essa é a causa do erro.

    No exemplo da política Extract Variables apresentado acima, o seguinte JSON inválido foi transmitido à política Extract Variables

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

    Segue-se o exemplo de chamada da API que mostra como o pedido foi transmitido:

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

    Em que $EXTERNAL_IP é o endereço IP do balanceador de carga externo. Este endereço IP está exposto à Internet. Para mais informações, consulte o artigo Personalize o encaminhamento de acesso.

    O payload JSON transmitido à API é inválido, pois contém uma matriz com parênteses retos ([ ]). Por isso, recebe o código de erro:

    steps.extractvariables.ExecutionFailed
    

    Este erro também pode ocorrer se o elemento <Source> tiver sido definido como response, mas a carga útil da resposta JSON for inválida ou tiver um formato incorreto.

Resolução

Certifique-se de que a entrada transmitida à política Extract Variables é válida e não tem um formato incorreto.

Para corrigir o problema com a política Extract Variables de exemplo abordada acima, transmita um pedido de payload JSON válido da seguinte forma:

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

UnableToCast

Código de erro

steps.extractvariables.UnableToCast

Corpo da resposta de erro

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

Causa

Este erro ocorre se a política Extract Variables não conseguir converter o valor extraído numa variável. Normalmente, isto acontece se tentar definir o valor de um tipo de dados para uma variável de outro tipo de dados.

Por exemplo, se a política de extração de variáveis tentar definir um valor que foi extraído de uma variável de string para uma variável de número inteiro, é apresentado este erro.

Diagnóstico

  1. Identifique o tipo de dados da variável para a qual a política Extract Variables está a tentar fazer a conversão e falha. Pode encontrar estas informações no elemento faultstring da resposta de erro. Por exemplo, no seguinte faultstring, o tipo de objeto é BOOLEAN:

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

  2. Identifique a política Extract Variables onde está a tentar definir o valor para uma variável do tipo determinado no passo n.º 1.

    Por exemplo, a seguinte política Extract Variables extrai o valor de um $.latitude JSONPath 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á a ser extraído. Os dados podem estar no formato 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 no passo n.º 3 e o tipo de dados da variável à qual os dados estão a ser atribuídos (determinado no passo n.º 2) são iguais.

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

    No exemplo da política Extract Variables apresentado acima, considere que a carga útil do pedido JSON é a seguinte:

    {
     "latitude":36.2312
    }
    

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

    Uma vez que o tipo de dados do valor extraído e o tipo de dados da variável à qual o valor está a ser atribuído não são os mesmos, recebe o código de erro: steps.extractvariables.UnableToCast.

Resolução

Certifique-se de que o tipo de dados do valor extraído e da variável à qual o conteúdo está a ser atribuído são do mesmo tipo.

Para corrigir o exemplo da política de variáveis de extração, tem de modificar o tipo da variável para Número 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 de 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

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

Por exemplo, este erro ocorre se a política Extract Variables for executada no fluxo de resposta e esperar analisar um caminho JSON, mas o elemento <Source> especificar a variável de fluxo request.content, que não existe no fluxo de resposta.

Diagnóstico

  1. Identifique a política Extract Variables onde ocorreu o erro e o nome da variável de fluxo para a qual não foi possível extrair dados. Pode encontrar ambos os itens no elemento faultstring da resposta de erro. Por exemplo, na faultstring seguinte, 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 da política Extract Variables com falha, verifique se o nome da variável definido no elemento <Source> corresponde ao nome da variável identificado na string de falha (passo n.º 1 acima). Por exemplo, a seguinte política Extract Variables especifica uma variável denominada request.content, que corresponde ao que está em faultstring:

    <?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 no qual a política Extract Variables está a ser executada.

  4. Se a variável for:

    • Fora do âmbito (não disponível no fluxo específico em que a política está a ser executada) ou
    • não é possível resolver (não está definido)

    Nesse caso, essa é a causa do erro.

    Por exemplo, suponhamos que a política ExtractVariables apresentada acima deve ser executada no fluxo de resposta. Recorde que a variável de fluxo request.content é usada no elemento <Source> da política Extrair variáveis. A variável de fluxo request.content só está disponível no fluxo de pedidos.

    Uma vez que a variável response não existe no fluxo de pedidos, recebe o código de erro: steps.extractvariables.JsonPathParsingFailure.

Resolução

Certifique-se de que a variável de fluxo usada no elemento <Source> da política Extract Variables está disponível no fluxo no qual a política Extract Variables é executada.

Por exemplo, suponha que existe uma variável denominada response.content no fluxo de resposta e que, na verdade, contém o JSON que quer extrair. Para corrigir a política Extract Variables apresentada acima, pode modificar o elemento <Source> da seguinte forma:

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