Esta é a documentação do Apigee Edge.
Acesse
Documentação da Apigee X. informações
ResourceDoesNotExist
Mensagem de erro
A implantação do proxy de API pela interface ou pela API Edge Management 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
Causa
Se o recurso especificado no elemento <ResourceURL>
na política Java callout não existir no nível do proxy de API, ambiente ou organização, a implantação do proxy de API vai falhar.
Diagnóstico
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.
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>
comomyresource.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>
Determine se o recurso faz parte do proxy de API que está falhando ou se foi enviado no nível do ambiente ou da organização. 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.
Os recursos podem estar disponíveis no nível do ambiente ou da organização. 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 -v -u <strong>email </strong>"https://api.enterprise.apigee.com/v1/organizations/myorg/environments/myenv/resourcefiles/java/myresource.jar"
Para determinar se o recurso existe no nível da organização, emita a seguinte chamada de API usando curl, omitindo os detalhes do ambiente:
curl -v -u email "https://api.enterprise.apigee.com/v1/organizations/myorg/resourcefiles/java/myresource.jar"
Se você receber um código de status 404 como resposta para essas APIs, o recurso está ausente no nível da organização e do ambiente.
Se o recurso não estiver disponível no nível do proxy de API, da organização e 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 proxy de API, no ambiente ou no nível da organização. Para mais informações, consulte Arquivos de recursos.
Para corrigir o exemplo de política Java callout mostrado acima, faça upload do arquivo JAR no nível apropriado (proxy de API, organização ou nível de ambiente).
NoResourceForURL
Mensagem de erro
A implantação do proxy de API pela interface ou pela API Edge Management 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
Causa
Esse erro pode ocorrer se o arquivo de recursos estiver corrompido ou parcialmente enviado, mesmo que pareça existir no nível do proxy de API, ambiente ou organização.
Diagnóstico
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
Certifique-se de que o recurso seja enviado no nível do proxy de API, do ambiente ou da organização. No exemplo abaixo, é possível ver que o recurso
myresource.jar
é enviado para o nível do proxy da API.Os recursos podem estar disponíveis no nível do ambiente ou da organização. 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 -v -u <strong>email </strong>"https://api.enterprise.apigee.com/v1/organizations/myorg/environments/myenv/resourcefiles/java/myresource.jar"
Para determinar se o recurso existe no nível da organização, emita a seguinte chamada de API usando curl, omitindo os detalhes do ambiente:
curl -v -u email "https://api.enterprise.apigee.com/v1/organizations/myorg/resourcefiles/java/myresource.jar"
Se você receber um código de status 404 como resposta para essas APIs, o recurso está ausente no nível da organização e do ambiente.
Resolução
- Se você determinar que o recurso existe no nível do proxy de API, da organização ou do ambiente, exclua o recurso e faça o upload dele novamente, conforme descrito na etapa 2. Caso contrário, pule para a etapa 3.
Para excluir o recurso no nível do proxy de API, acesse a guia "Resources" no painel "Navigator" do editor de proxy de API e clique no "X" ao lado do recurso, conforme mostrado abaixo.
Para excluir recursos no nível do ambiente ou da organização, use o verbo DELETE nas chamadas de API 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 -v -u <strong>email </strong>"https://api.enterprise.apigee.com/v1/organizations/myorg/environments/myenv/resourcefiles/java/myresource.jar"
Faça upload do arquivo JAR) no nível apropriado (proxy de API, organização ou nível do ambiente.
Se o reenvio do recurso não ajudar, será necessário reiniciar os processadores de mensagens afetados. Se você estiver usando o Apigee Edge no Cloud, entre em contato com o suporte da Apigee. Se você for um usuário da nuvem privada, consulte Como iniciar, interromper, reiniciar e verificar o status do Apigee Edge.
JavaCalloutInstantiationFailed
Mensagem de erro
A implantação do proxy de API pela interface ou pela API Edge Management 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
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
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
- Determine o arquivo JAR que deve conter a classe (identificada na etapa 1 acima) e não pôde ser instanciado.
- Verifique se o arquivo JAR específico foi enviado no proxy de API, na organização ou no nível do ambiente. Se o arquivo JAR não tiver sido enviado para nenhum dos níveis, vá para "Resolução".
- Se o arquivo JAR for carregado, vá para Causa: arquivo JAR corrompido.
Resolução
- Se o arquivo JAR estiver corrompido ou tiver sido enviado parcialmente, recrie-o e faça o upload dele no nível apropriado (proxy de API, organização ou nível de ambiente).
- Reimplantar o proxy da API.
Causa: arquivo JAR corrompido
Diagnóstico
- Determine o arquivo JAR que deve conter a classe (identificada na etapa 1 acima), que não pôde ser instanciada.
- 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".
- Se o arquivo JAR não estiver corrompido, vá para Causa: arquivo de classe ausente.
Resolução
- Recrie os arquivos JAR corrompidos e faça o upload deles no nível apropriado (proxy de API, organização ou nível de ambiente.
- Reimplantar o proxy da API.
Causa: arquivo de classe ausente
Diagnóstico
- 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.
- Se o arquivo de classe não existir em nenhum dos arquivos JAR, você determinou a causa do erro. Vá para "Resolução".
- Se o arquivo de classe existir em um dos arquivos JAR especificados na política Javacall, então deve haver um problema com o código Java ou com a classe dependente que está causando esse erro. A) Se você é usuário da nuvem pública, entre em contato com o suporte da Apigee. B) Se você for usuário da nuvem privada, acesse Causa: problema no código Java.
Resolução
- Recrie o JAR com os arquivos de classe ausentes e faça o upload do arquivo JAR no nível apropriado (proxy de API, organização ou nível de ambiente).
- Reimplantar o proxy da API.
Causa: problema no código Java
Etapas de diagnóstico apenas para usuários da nuvem privada
Diagnóstico
- Verifique os registros do processador de mensagens (
/opt/apigee/var/log/edge-message-processor/system.log
e/opt/apigee/var/log/edge-message-processor/configurations.log
). Talvez você veja uma exceção semelhante ao exemplo abaixo:
2019-07-05 05:40:13,240 org:myorg env:staging target:/organizations/myorg/apiproxies/MyAPI/revisions/5 action:add context-id: mode: Apigee-Main-53 ERROR CONFIG-CHANGE - AbstractConfigurator.add() : Add null to Step failed, reason: {} com.apigee.kernel.exceptions.spi.UncheckedException: Failed to instantiate the JavaCallout Class <class name> at com.apigee.steps.javacallout.JavaCalloutStepDefinition.newInstance(JavaCalloutStepDefinition.java:116) at com.apigee.messaging.runtime.StepDefinition.getStepDefinitionExecution(StepDefinition.java:218) …<snipped> Caused by: java.lang.reflect.InvocationTargetException: null at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at com.apigee.steps.javacallout.JavaCalloutStepDefinition.access$100(JavaCalloutStepDefinition.java:41) at com.apigee.steps.javacallout.JavaCalloutStepDefinition$CallOutWrapper.initialize(JavaCalloutStepDefinition.java:131) at com.apigee.steps.javacallout.JavaCalloutStepDefinition$CallOutWrapper.<init>(JavaCalloutStepDefinition.java:126) ... 42 common frames omitted Caused by: <Reason> ...<snipped>
Leia a exceção com atenção para entender o motivo da falha. Normalmente, isso pode apontar para algum problema no código Java.
Resolução
- Dependendo da causa da falha, talvez seja necessário corrigir o problema no código Java.
- Recrie o JAR com os arquivos de classe ausentes e faça o upload do arquivo JAR no nível apropriado (proxy de API, organização ou nível de ambiente).
- Reimplantar o proxy da API.
Fazer upload do arquivo JAR
Verifique se o elemento de recurso com todas as classes necessárias existem no proxy de API, no ambiente ou no nível da organização. Para mais informações, consulte Arquivos de recursos.
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://
.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. Será necessário usar a API Edge, 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 -v -u email -H "Content-Type: application/octet-stream" \ -X POST --data-binary @{classes.jar} \ "http://{mgmt_server}:{port}/v1/organizations/myorg/environments/myenv/resourcefiles?name=myresouce.jar&type=java"
Emita a chamada de API no mesmo diretório do arquivo.
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 -v -u email -H "Content-Type: application/octet-stream" \ -X POST --data-binary @{classes.jar} \ "http://{mgmt_server}:{port}/v1/organizations/myorg/resourcefiles?name=myresouce.jar&type=java"