Stai visualizzando la documentazione di Apigee Edge.
Vai alla sezione
Documentazione di Apigee X. Informazioni
ResourceDoesNotExist
Messaggio di errore
Il deployment del proxy API tramite la UI o l'API di gestione perimetrale non va a buon fine e questo messaggio di errore:
Error Deploying Revision <var>revision_number</var> to <var>environment</var>
Resource with name <var>ResourceURL</var> and type java does not exist.
Messaggio di errore di esempio
Error Deploying Revision 1 to test
Resource with name myresource.jar and type java does not exist.
Screenshot di errore di esempio
Causa
Se la risorsa specificata nell'elemento <ResourceURL>
del criterio JavaCallout non esiste a livello di organizzazione, proxy API o ambiente, il deployment del proxy API non va a buon fine.
Diagnosi
Identifica l'ambiente e il nome della risorsa. Puoi trovare queste informazioni nel messaggio di errore. Ad esempio, nel seguente errore l'ambiente è
test
e il nome risorsa utilizzato nell'elemento <ResourceURL>
èmyresource.jar
.Error Deploying Revision 1 to test Resource with name myresource.jar and type java does not exist.
Definisci il criterio JavaCallout che utilizza la risorsa identificata nel passaggio 1 precedente.
Ad esempio, il seguente criterio consente di specificare il valore di <
ResourceURL>
comemyresource.jar
, che corrisponde al valore del messaggio di errore:<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <JavaCallout name="hello-java"> <ClassName>com.apigeesample.HelloJava</ClassName> <ResourceURL>java://myresource.jar</ResourceURL> </JavaCallout>
Determina se la risorsa fa parte del proxy API che non funziona o se è stata caricata a livello di ambiente o organizzazione. In caso contrario, questa è la causa dell'errore.
Vai alla scheda Risorse nel riquadro di navigazione dell'editor proxy API per visualizzare tutte le risorse caricate a livello di proxy API. In questo esempio, il proxy API non ha risorse caricate.
Le risorse possono essere disponibili a livello di ambiente o di organizzazione. Per saperne di più, consulta File di risorse.
Per determinare se la risorsa esiste a livello di ambiente, esegui la seguente chiamata API utilizzando curl:
curl -v -u <strong>email </strong>"https://api.enterprise.apigee.com/v1/organizations/myorg/environments/myenv/resourcefiles/java/myresource.jar"
Per determinare se la risorsa esiste a livello di organizzazione, esegui la seguente chiamata API utilizzando curl, omettendo i dettagli dell'ambiente:
curl -v -u email "https://api.enterprise.apigee.com/v1/organizations/myorg/resourcefiles/java/myresource.jar"
Se ricevi un codice di stato 404 come risposta per queste API, significa che la risorsa non è presente sia a livello di organizzazione che di ambiente.
Se la risorsa non è disponibile a livello di ambiente, organizzazione e proxy API, viene restituito l'errore di deployment:
Resource with name myresource.jar and type java does not exist. ```
Risoluzione
Assicurati che la risorsa specificata nell'elemento <ResourceURL>
esista a livello di organizzazione, proxy API o ambiente. Per saperne di più, consulta File di risorse.
Per correggere il criterio JavaCallout di esempio mostrato sopra, carica il file JAR nel livello appropriato (a livello di proxy API, organizzazione o ambiente).
NoResourceForURL
Messaggio di errore
Il deployment del proxy API tramite la UI o l'API di gestione perimetrale non va a buon fine e questo messaggio di errore:
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>
Messaggio di errore di esempio
Error in deployment for environment test
The revision is deployed, but traffic cannot flow. Could not locate a resource with URL java://myresource.jar
Screenshot di errore di esempio
Causa
Questo errore può verificarsi se il file di risorse è danneggiato o caricato parzialmente, anche se sembra essere a livello di organizzazione, di ambiente o di proxy API.
Diagnosi
Identifica l'ambiente e il nome della risorsa. Puoi trovare queste informazioni nel messaggio di errore. Ad esempio, nell'errore seguente, il nome dell'ambiente è
test
e il nome della risorsa utilizzato nell'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
Assicurati che la risorsa sia caricata a livello di organizzazione, proxy API o ambiente. Nell'esempio seguente, puoi vedere che la risorsa
myresource.jar
è caricata a livello di proxy API.Le risorse possono essere disponibili a livello di ambiente o di organizzazione. Per saperne di più, consulta File di risorse.
Per determinare se la risorsa esiste a livello di ambiente, esegui la seguente chiamata API utilizzando curl:
curl -v -u <strong>email </strong>"https://api.enterprise.apigee.com/v1/organizations/myorg/environments/myenv/resourcefiles/java/myresource.jar"
Per determinare se la risorsa esiste a livello di organizzazione, esegui la seguente chiamata API utilizzando curl, omettendo i dettagli dell'ambiente:
curl -v -u email "https://api.enterprise.apigee.com/v1/organizations/myorg/resourcefiles/java/myresource.jar"
Se ricevi un codice di stato 404 come risposta per queste API, significa che la risorsa non è presente sia a livello di organizzazione che di ambiente.
Risoluzione
- Se determini che la risorsa esiste a livello di ambiente, organizzazione o proxy API, elimina la risorsa e caricala di nuovo, come descritto nel passaggio 2. In caso contrario vai al passaggio 3.
Per eliminare la risorsa a livello di proxy API, vai alla scheda Risorse nel riquadro di navigazione dell'editor proxy API e fai clic sul pulsante "X" accanto alla risorsa, come mostrato di seguito.
Per eliminare una risorsa a livello di ambiente o organizzazione, utilizza il verbo DELETE nelle chiamate API utilizzate in precedenza nei passaggi della diagnostica. Ad esempio, per eliminare la risorsa a livello di ambiente, inserisci il comando seguente:
curl -X DELETE -v -u <strong>email </strong>"https://api.enterprise.apigee.com/v1/organizations/myorg/environments/myenv/resourcefiles/java/myresource.jar"
Carica il file JAR) nel livello appropriato (proxy API, organizzazione o ambiente).
Se il problema persiste dopo il ricaricamento della risorsa, i processori di messaggi interessati dovranno essere riavviati. Se utilizzi Apigee Edge in Cloud, contatta l'assistenza Apigee. Se sei un utente del cloud privato, vedi Avvio, arresto, riavvio e controllo dello stato di Apigee Edge.
JavaCalloutInstantiationFailed
Messaggio di errore
Il deployment del proxy API tramite la UI o l'API di gestione perimetrale non va a buon fine e questo messaggio di errore:
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>
Oppure
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>
Messaggio di errore di esempio
Error in deployment for environment test
The revision is deployed, but traffic cannot flow. Failed to instantiate the JavaCallout Class my.class
Screenshot di errore di esempio
Causa
Di seguito sono riportate le cause tipiche di questo errore
Causa | Descrizione |
File JAR mancante | Il file JAR contenente la classe Java identificata nell'errore non è stato caricato. |
File JAR danneggiato | Il file JAR contenente la classe Java identificata nell'errore è danneggiato/caricato parzialmente. |
File del corso mancante | Il file della classe Java identificato nell'errore non fa parte del file JAR specificato in >ResourceURL< o file JAR dipendenti. |
Problema con il codice Java | Nel codice è presente un errore, ad esempio un costruttore mancante, un problema di dipendenza del codice o un altro problema. |
Passaggio di diagnosi comune
Identifica il nome dell'ambiente e la classe che non è stato possibile importare. Ad esempio, nel seguente messaggio di errore il nome dell'ambiente è
test
e il nome della 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: file JAR mancante
Diagnosi
- Determina il file JAR che dovrebbe contenere la classe (identificata nel passaggio 1 precedente) e di cui non è possibile creare un'istanza.
- Verifica se il file JAR specifico è stato caricato a livello di proxy API, organizzazione o ambiente. Se il file JAR non viene caricato in nessuno dei livelli, vai a Risoluzione.
- Se il file JAR è stato caricato, vai a Causa: file JAR danneggiato.
Risoluzione
- Se il file JAR è danneggiato o caricato parzialmente, ricrealo e caricalo nel livello appropriato (proxy API, organizzazione o livello di ambiente).
- Esegui di nuovo il deployment del proxy API.
Causa: file JAR danneggiato
Diagnosi
- Determina il file JAR che dovrebbe contenere la classe (identificata nel passaggio 1 precedente) di cui non è possibile creare un'istanza.
- Verifica se il file JAR specifico è danneggiato. Ad esempio, se non riesci ad aprire il file perché è danneggiato o caricato parzialmente. Se è danneggiata, vai a Risoluzione.
- Se il file JAR non è danneggiato, vai a Causa: file di classe mancante.
Risoluzione
- Ricrea i file JAR danneggiati e carica il file JAR al livello appropriato (proxy API, organizzazione o livello di ambiente).
- Esegui di nuovo il deployment del proxy API.
Causa: file del corso mancante
Diagnosi
- Controlla se lo specifico file di classe Java (identificato nel passaggio 1 precedente) fa parte del file JAR specificato in >ResourceURL< o qualsiasi file JAR dipendente.
- Se il file della classe non esiste in nessuno dei file JAR, hai determinato la causa dell'errore. Vai a Risoluzione.
- Se il file della classe è presente in uno dei file JAR specificati nel criterio JavaCallout, deve essere presente un problema con il codice Java o con la classe dipendente che causa questo errore. a. Se sei un utente di Cloud pubblico, contatta l'assistenza Apigee. b. Se sei un utente del cloud privato, passa a Causa: problema con il codice Java.
Risoluzione
- Ricrea il JAR con i file di classe mancanti e carica il file JAR nel livello appropriato (proxy API, organizzazione o livello di ambiente).
- Esegui di nuovo il deployment del proxy API.
Causa: problema con il codice Java
Procedura diagnostica solo per utenti del cloud privato
Diagnosi
- Controlla i log del processore di messaggi (
/opt/apigee/var/log/edge-message-processor/system.log
e/opt/apigee/var/log/edge-message-processor/configurations.log
). Potresti visualizzare un'eccezione simile all'esempio seguente:
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>
Leggi attentamente l'eccezione per comprendere il motivo dell'errore. In genere, ciò può indicare la presenza di problemi nel codice Java.
Risoluzione
- A seconda della causa dell'errore, potrebbe essere necessario risolvere il problema nel codice Java.
- Ricrea il JAR con i file di classe mancanti e carica il file JAR nel livello appropriato (proxy API, organizzazione o livello di ambiente).
- Esegui di nuovo il deployment del proxy API.
Carica il file JAR
Assicurati che a livello di organizzazione, ambiente o proxy API esista l'elemento risorsa con tutte le classi necessarie. Per saperne di più, consulta File di risorse.
Per caricare una risorsa a livello di proxy API, fai clic su + (segno più) nella scheda Risorse, quindi seleziona Importa file e carica il file dalla tua macchina locale. Il nome del file deve corrispondere a >ResourceURL< ma senza il prefisso
java://
.Se vuoi che una risorsa sia disponibile per più di un proxy API nello stesso ambiente, caricala nell'ambiente. Dovrai utilizzare l'API Edge, come descritto in File di risorse.
Ad esempio, inserisci la seguente chiamata API dalla macchina locale per caricare il file specificato a livello di 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"
Effettua la chiamata API dalla stessa directory in cui si trova il file.
Per rendere il file disponibile per tutti i proxy API in tutti gli ambienti dell'organizzazione, puoi omettere i dettagli dell'ambiente nel percorso base. Ad esempio:
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"