Solução de problemas de erro na implantação da política JavaCallout

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

ResourceDoesNotExist

Mensagem de erro

A implantação do proxy de API por meio da IU da Apigee ou da API falha com esta mensagem de erro:

Error Deploying Revision <var>revision_number</var> to <var>environment</var>
Resource with name <var>ResourceURL</var> and type java does not exist.

Exemplo de mensagem de erro

Error Deploying Revision 1 to test
Resource with name myresource.jar and type java does not exist.

Captura de tela com erro de exemplo

Erro ao implantar a revisão 1 para teste.

Causa

Se o recurso especificado no elemento <ResourceURL> na política JavaCallout não existir no nível da VM ou do ambiente, a implantação do proxy da API falhará.

Diagnóstico

  1. Identifique o ambiente e o nome do recurso. Você encontra essas informações na mensagem de erro. Por exemplo, no erro a seguir, o ambiente é test e o nome do recurso usado no elemento <ResourceURL> é myresource.jar.

    Error Deploying Revision 1 to test
    Resource with name myresource.jar and type java does not exist.
    
  2. Determine a política JavaCallout que está usando o recurso identificado na etapa 1 acima.

    Por exemplo, a política a seguir especifica o valor de <ResourceURL> como myresource.jar, que corresponde ao valor na mensagem de erro:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <JavaCallout name="hello-java">
        <ClassName>com.apigeesample.HelloJava</ClassName>
        <ResourceURL>java://myresource.jar</ResourceURL>
    </JavaCallout>
    
  3. Determine se o recurso faz parte do proxy da API que está falhando ou é carregado no nível do ambiente. Caso contrário, essa é a causa do erro.

    • Acesse a guia Recursos no painel Navegador do editor de proxy da API para ver todos os recursos enviados no nível de proxy da API. Neste exemplo, o proxy da API não tem recursos enviados.

      Guia de recursos do editor de proxy de API no painel do navegador.

    • Os recursos podem estar disponíveis no nível do ambiente. Para mais informações, consulte Arquivos de recursos.

      Se você receber um código de status 404 como resposta para essas APIs, então o recurso está ausente no nível do ambiente.

    Se o recurso não estiver disponível no proxy da API e no nível do ambiente, o erro de implantação será retornado:

    Resource with name myresource.jar and type java does not exist.
     ```
    

Resolução

Verifique se o recurso especificado no elemento <ResourceURL> existe no nível da API ou do ambiente da API. Para mais informações, consulte Como gerenciar recursos.

Para corrigir o exemplo de política de JavaCallout mostrado acima, faça o upload do arquivo JAR no nível apropriado (proxy de API ou ambiente).

NoResourceForURL

Mensagem de erro

A implantação do proxy de API por meio da IU da Apigee ou da API falha com esta mensagem de erro:

Error in deployment for environment <var>environment</var>
The revision is deployed, but traffic cannot flow. Could not locate a resource with URL <var>ResourceURL</var>

Exemplo de mensagem de erro

Error in deployment for environment test
The revision is deployed, but traffic cannot flow. Could not locate a resource with URL java://myresource.jar

Captura de tela com erro de exemplo

Erro na implantação para teste do ambiente.

Causa

Esse erro pode ocorrer se o arquivo de recurso estiver corrompido ou parcialmente enviado, mesmo que pareça existir no nível de proxy ou de ambiente da API.

Diagnóstico

  1. Identifique o ambiente e o nome do recurso. Você encontra essas informações na mensagem de erro. Por exemplo, no erro a seguir, o nome do ambiente é test e o nome do recurso usado no elemento <ResourceURL> é myresource.jar.

    Error in deployment for environment test
    The revision is deployed, but traffic cannot flow. Could not locate a resource with URL java://myresource.jar
    
  2. Verifique se o recurso foi carregado no nível do proxy ou do ambiente da API. No exemplo abaixo, é possível ver que o recurso myresource.jar é enviado para o nível do proxy da API.

    Recursos de proxy de API.

    Os recursos podem estar disponíveis no nível do ambiente. Para mais informações, consulte Arquivos de recursos.

    Para determinar se o recurso existe no nível do ambiente, emita a seguinte chamada de API usando curl:

    curl \
    "https://apigee.googleapis.com/v1/organizations/$ORG/environments/$ENV/resourcefiles/java/myresource.jar" \
    -H "Authorization: Bearer $TOKEN"

    Em que $TOKEN está definido como seu token de acesso do OAuth 2.0, conforme descrito em Como receber um token de acesso do OAuth 2.0. Para informações sobre as opções de curl usadas neste exemplo, consulte Como usar curl.

    Se você receber um código de status 404 como resposta para essas APIs, então o recurso está ausente no nível do ambiente.

Resolução

  1. Se você determinar que o recurso existe no nível do proxy ou do ambiente da API, exclua o recurso e faça um novo upload, conforme descrito na etapa 2. Caso contrário, pule para o próximo item.
  2. Para excluir o recurso no nível do proxy da API, navegue até a guia "Recursos" no painel de navegação do editor de proxy da API e clique no botão "X" ao lado do recurso, como mostrado abaixo.

    Para excluir o recurso no nível do proxy da API, clique em &quot;Excluir&quot;.

    Para excluir um recurso no ambiente, use o verbo DELETE nas chamadas de API que foram usadas anteriormente nas etapas de diagnóstico. Por exemplo, para excluir o recurso no nível do ambiente, digite o seguinte comando:

    curl -X DELETE \
    "https://apigee.googleapis.com/v1/organizations/$ORG/environments/$ENV/resourcefiles/java/myresource.jar" \
    -H "Authorization: Bearer $TOKEN"

    Em que $TOKEN está definido como seu token de acesso do OAuth 2.0, conforme descrito em Como receber um token de acesso do OAuth 2.0. Para informações sobre as opções de curl usadas neste exemplo, consulte Como usar curl.

  3. Faça o upload do arquivo JAR) no nível apropriado (proxy de API ou nível de ambiente).

  4. Se isso não ajudar, entre em contato com o suporte da Apigee.

JavaCalloutInstantiationFailed

Mensagem de erro

A implantação do proxy de API por meio da IU da Apigee ou da API falha com esta mensagem de erro:

Error in deployment for environment <var>environment</var>
The revision is deployed, but traffic cannot flow. Failed to instantiate the JavaCallout Class <var>class_name</var>

Ou

Error in deployment for environment <var>environment</var>.
The revision is deployed and traffic can flow, but flow may be impaired. Failed to instantiate the JavaCallout Class <var>class_name</var>

Exemplo de mensagem de erro

Error in deployment for environment test
The revision is deployed, but traffic cannot flow. Failed to instantiate the JavaCallout Class my.class

Captura de tela com erro de exemplo

Erro na implantação para teste do ambiente.

Causa

Estas são as causas comuns desse erro

Causa Descrição
Arquivo JAR ausente O arquivo JAR que contém a classe Java identificada no erro não é carregado.
Arquivo JAR corrompido O arquivo JAR que contém a classe Java identificada no erro está corrompido/parcialmente enviado.
Arquivo de turma ausente O arquivo de classe Java identificado no erro não faz parte do arquivo JAR especificado em >ResourceURL<.
Problema no código Java Há um erro no código, como um construtor ausente, um problema de dependência de código ou outro problema.

Etapa comum de diagnóstico

  1. Identifique o nome do ambiente e a classe que não foi importada. Por exemplo, o nome de ambiente da mensagem de erro a seguir é test e o nome da classe é my.class:

    Error in deployment for environment test
    The revision is deployed, but traffic cannot flow. Failed to instantiate the JavaCallout Class my.class
    
    

Causa: arquivo JAR ausente

Diagnóstico

  1. Determine o arquivo JAR que deve conter a classe (identificada na etapa 1 acima) e não pôde ser instanciado.
  2. Verifique se o arquivo JAR específico é carregado no nível da API ou do ambiente da API. Se o arquivo JAR não tiver sido enviado para nenhum dos níveis, vá para "Resolução".
  3. Se o arquivo JAR for carregado, vá para Causa: arquivo JAR corrompido.

Resolução

  1. Se o arquivo JAR estiver corrompido ou parcialmente enviado, recrie o JAR e faça o upload dele no nível apropriado (proxy de API ou ambiente).
  2. Reimplantar o proxy da API.

Causa: arquivo JAR corrompido

Diagnóstico

  1. Determine o arquivo JAR que deve conter a classe (identificada na etapa 1 acima), que não pôde ser instanciada.
  2. Verifique se o arquivo JAR específico está corrompido. Por exemplo, se não for possível descompor o arquivo porque ele está corrompido ou parcialmente foi enviado. Se ele estiver corrompido, acesse "Resolução".
  3. Se o arquivo JAR não estiver corrompido, vá para Causa: arquivo de classe ausente.

Resolução

  1. Recrie os arquivos JAR corrompidos e faça o upload do arquivo JAR no nível apropriado (proxy de API ou nível de ambiente).
  2. Reimplantar o proxy da API.

Causa: arquivo de classe ausente

Diagnóstico

  1. Verifique se o arquivo de classe Java específico (identificado na etapa 1 acima) faz parte do arquivo JAR especificado em >ResourceURL< ou de qualquer arquivo JAR dependente.
  2. Se o arquivo de classe não existir em nenhum dos arquivos JAR, você determinou a causa do erro. Vá para "Resolução".
  3. Se o arquivo de classe existir em um dos arquivos JAR especificados na política JavaCallout, haverá um problema com o código Java ou a classe dependente que está levando a esse erro. Para receber ajuda, entre em contato com o suporte da Apigee.

Resolução

  1. Recrie o JAR com os arquivos de classe ausentes e faça o upload do arquivo JAR no nível apropriado (proxy de API ou nível de ambiente).
  2. Reimplantar o proxy da API.

Fazer upload do arquivo JAR

Verifique se o elemento do recurso com todas as classes necessárias existe no proxy da API ou no nível do ambiente. Para mais informações, consulte Arquivos de recursos.

  1. Para fazer upload de um recurso no nível do proxy da API, clique em + (sinal de adição) na guia "Recursos", selecione Importar arquivo e faça o upload do arquivo na sua máquina local. O nome de arquivo precisa corresponder ao elemento >ResourceURL<, mas sem o prefixo java://.

    Na guia &quot;Recursos&quot;, selecione &quot;Importar arquivo&quot;.

  2. Se quiser que um recurso esteja disponível para mais de um proxy de API no mesmo ambiente, faça upload do recurso no ambiente. Você precisará usar a API Apigee, conforme descrito em Arquivos de recursos.

    Por exemplo, insira a seguinte chamada de API da máquina local para fazer upload do arquivo especificado no nível do ambiente:

    curl -H "Content-Type: application/octet-stream" \
    -X POST  -H "Authorization: Bearer $TOKEN" --data-binary @{classes.jar} \
    "https://apigee.googleapis.com/v1/organizations/$ORG/environments/$ENV/resourcefiles?name=myresouce.jar&type=java"

    Em que $TOKEN está definido como seu token de acesso do OAuth 2.0, conforme descrito em Como receber um token de acesso do OAuth 2.0. Para informações sobre as opções de curl usadas neste exemplo, consulte Como usar curl.

    Emita a chamada de API no mesmo diretório do arquivo.

  3. Para disponibilizar o arquivo para todos os proxies de API em todos os ambientes da organização, você pode omitir os detalhes do ambiente no caminho base. Exemplo:

    curl -H "Content-Type: application/octet-stream" \
    -X POST  -H "Authorization: Bearer $TOKEN" --data-binary @{classes.jar} \
    "https://apigee.googleapis.com/v1/organizations/$ORG/resourcefiles?name=myresouce.jar&type=java"

    Em que $TOKEN está definido como seu token de acesso do OAuth 2.0, conforme descrito em Como receber um token de acesso do OAuth 2.0. Para informações sobre as opções de curl usadas neste exemplo, consulte Como usar curl.