Risoluzione degli errori di deployment dei criteri JavaCallout

Stai visualizzando la documentazione di Apigee e Apigee hybrid.
Visualizza la documentazione di Apigee Edge.

ResourceDoesNotExist

Messaggio di errore

Il deployment del proxy API tramite l'API o l'interfaccia utente di Apigee non va a buon fine con 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.

Esempio di messaggio di errore

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

Screenshot di errore di esempio

Errore durante il deployment della revisione 1 per il test.

Causa

Se la risorsa specificata nell'elemento <ResourceURL> del criterio JavaCallout non esiste a livello di proxy API o di ambiente, il deployment del proxy API non va a buon fine.

Diagnosi

  1. Identifica l'ambiente e il nome della risorsa. Puoi trovare queste informazioni nel messaggio di errore. Ad esempio, nell'errore seguente l'ambiente è test e il nome della risorsa utilizzato nell'elemento <ResourceURL> è myresource.jar.

    Error Deploying Revision 1 to test
    Resource with name myresource.jar and type java does not exist.
    
  2. Determina il criterio JavaCallout che utilizza la risorsa identificata nel passaggio 1 qui sopra.

    Ad esempio, il seguente criterio specifica il valore di <ResourceURL> come myresource.jar, che corrisponde al valore nel 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>
    
  3. Determina se la risorsa fa parte del proxy API che non funziona o se è stata caricata a livello di ambiente. In caso contrario, è questa la causa dell'errore.

    • Vai alla scheda Risorse nel riquadro Navigatore dell'editor del proxy API per visualizzare tutte le risorse caricate a livello di proxy API. In questo esempio, il proxy API non ha risorse caricate.

      Scheda Risorse dell&#39;editor proxy API nel riquadro Navigatore.

    • Le risorse possono essere disponibili a livello di ambiente. Per ulteriori informazioni, consulta File di risorse.

      • Per determinare se la risorsa esiste a livello di ambiente, esegui la seguente chiamata API utilizzando curl:

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

        Dove $TOKEN è impostato sul tuo token di accesso OAuth 2.0, come descritto in Ottenere un token di accesso OAuth 2.0. Per informazioni sulle opzioni curl utilizzate in questo esempio, consulta Utilizzare curl. Per una descrizione delle variabili di ambiente utilizzate, consulta Impostare le variabili di ambiente per le richieste all'API Apigee.

      Se ricevi un codice di stato 404 come risposta per queste API, significa che la risorsa non è presente a livello di ambiente.

    Se la risorsa non è disponibile a livello di proxy API e ambiente, 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 proxy API o di ambiente. Per ulteriori informazioni, consulta Gestire le risorse.

Per correggere il criterio JavaCallout di esempio mostrato sopra, carica il file JAR al livello appropriato (a livello di proxy API o di ambiente).

NoResourceForURL

Messaggio di errore

Il deployment del proxy API tramite l'API o l'interfaccia utente di Apigee non va a buon fine con 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>

Esempio di messaggio di errore

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

Errore di deployment per il test dell&#39;ambiente.

Causa

Questo errore può verificarsi se il file della risorsa è danneggiato o caricato parzialmente, anche se sembra esistere a livello di proxy API o ambiente.

Diagnosi

  1. Identifica l'ambiente e il nome della risorsa. Puoi trovare queste informazioni nel messaggio di errore. Ad esempio, nel seguente errore, 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
    
  2. Assicurati che la risorsa venga caricata a livello di proxy API o di ambiente. Nell'esempio seguente, puoi vedere che la risorsa myresource.jar viene caricata a livello di proxy API.

    Risorse proxy API.

    Le risorse possono essere disponibili a livello di ambiente. Per ulteriori informazioni, consulta File di risorse.

    Per determinare se la risorsa esiste a livello di ambiente, esegui la seguente chiamata API utilizzando curl:

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

    Dove $TOKEN è impostato sul tuo token di accesso OAuth 2.0, come descritto in Ottenere un token di accesso OAuth 2.0. Per informazioni sulle opzioni curl utilizzate in questo esempio, consulta Utilizzare curl.

    Se ricevi un codice di stato 404 come risposta per queste API, significa che la risorsa non è presente a livello di ambiente.

Risoluzione

  1. Se stabilisci che la risorsa esiste a livello di proxy dell'API o di ambiente, elimina la risorsa e ricaricala, come descritto nel passaggio 2. In caso contrario, vai al passaggio 3.
  2. Per eliminare la risorsa a livello di proxy API, vai alla scheda Risorse nel riquadro di navigazione dell'editor del proxy API e fai clic sul pulsante "X" accanto alla risorsa, come mostrato di seguito.

    Per eliminare la risorsa a livello di proxy API, fai clic su Elimina.

    Per eliminare la risorsa nell'ambiente, utilizza il verbo DELETE nelle chiamate API utilizzate in precedenza nei passaggi di diagnosi. Ad esempio, per eliminare la risorsa a livello di ambiente, inserisci il seguente comando:

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

    Dove $TOKEN è impostato sul tuo token di accesso OAuth 2.0, come descritto in Ottenere un token di accesso OAuth 2.0. Per informazioni sulle opzioni curl utilizzate in questo esempio, consulta Utilizzare curl.

  3. Carica il file JAR al livello appropriato (a livello di proxy API o di ambiente).

  4. Se il ricaricamento della risorsa non risolve il problema, contatta l'assistenza Apigee.

JavaCalloutInstantiationFailed

Messaggio di errore

Il deployment del proxy API tramite l'API o l'interfaccia utente di Apigee non va a buon fine con 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>

Esempio di messaggio di errore

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

Errore di deployment per il test dell&#39;ambiente.

Causa

Ecco le cause tipiche di questo errore

Causa Descrizione
File JAR mancante Il file JAR contenente la classe Java identificata nell'errore non viene 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 dei file JAR dipendenti.
Problema con il codice Java Esiste un errore nel codice, ad esempio un costruttore mancante, un problema di dipendenza dal codice o un altro problema.

Passaggio di diagnostica comune

  1. Identifica il nome dell'ambiente e del corso di cui non è andata a buon fine l'importazione. 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

  1. Determina il file JAR che dovrebbe contenere la classe (identificata nel passaggio 1 sopra) e che non è stato possibile istanziare.
  2. Verifica che il file JAR specifico sia caricato a livello di proxy API o di ambiente. Se il file JAR non viene caricato in nessuno dei livelli, vai a Risoluzione.
  3. Se il file JAR è stato caricato, vai a Causa: file JAR danneggiato.

Risoluzione

  1. Se il file JAR è danneggiato o caricato parzialmente, ricostruisci il file JAR e caricalo al livello appropriato (a livello di proxy API o di ambiente).
  2. Esegui nuovamente il deployment del proxy API.

Causa: file JAR danneggiato

Diagnosi

  1. Determina il file JAR che dovrebbe contenere la classe (identificata nel passaggio 1 sopra) che non è stato possibile istanziare.
  2. Verifica se il file JAR specifico è danneggiato. Ad esempio, se non riesci a estrarre il file dal file JAR perché è danneggiato o caricato parzialmente. Se è danneggiato, vai a Risoluzione.
  3. Se il file JAR non è danneggiato, vai a Causa: file di classe mancante.

Risoluzione

  1. Ricostruisci i file JAR danneggiati e carica il file JAR a livello appropriato (proxy API o livello di ambiente).
  2. Esegui nuovamente il deployment del proxy API.

Causa: file del corso mancante

Diagnosi

  1. Controlla se il file della classe Java specifico (identificato nel passaggio 1 sopra) fa parte del file JAR specificato in >ResourceURL< o di uno dei file JAR dipendenti.
  2. Se il file di classe non esiste in nessuno dei file JAR, hai determinato la causa dell'errore. Vai a Risoluzione.
  3. Se il file di classe esiste in uno dei file JAR specificati nel criterio JavaCallout, è necessario che si verifichi un problema con il codice Java o con la classe dipendente che causa questo errore. Per ricevere aiuto, contatta l'assistenza Apigee.

Risoluzione

  1. Ricostruisci il file JAR con i file di classe mancanti e carica il file JAR al livello appropriato (a livello di proxy API o di ambiente).
  2. Esegui nuovamente il deployment del proxy API.

Carica il file JAR

Assicurati che l'elemento della risorsa con tutte le classi necessarie esista a livello di proxy API o di ambiente. Per ulteriori informazioni, consulta File di risorse.

  1. Per caricare una risorsa a livello di proxy API, fai clic su + (simbolo Più) nella scheda Risorse, poi seleziona Importa file e carica il file dal tuo computer locale. Il nome del file deve corrispondere all'elemento >ResourceURL<, ma senza il prefisso java://.

    Nella scheda Risorse, seleziona Importa file.

  2. Se vuoi che una risorsa sia disponibile per più di un proxy API nello stesso ambiente, caricala nell'ambiente. Dovrai utilizzare l'API Apigee, 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 -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"

    Dove $TOKEN è impostato sul tuo token di accesso OAuth 2.0, come descritto in Ottenere un token di accesso OAuth 2.0. Per informazioni sulle opzioni curl utilizzate in questo esempio, consulta Utilizzare curl.

    Esegui la chiamata API dalla stessa directory del file.

  3. 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 -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"

    Dove $TOKEN è impostato sul tuo token di accesso OAuth 2.0, come descritto in Ottenere un token di accesso OAuth 2.0. Per informazioni sulle opzioni curl utilizzate in questo esempio, consulta Utilizzare curl.