Fehlerbehebung bei der Bereitstellung der JavaCallout-Richtlinie

Sie lesen gerade die Dokumentation zu Apigee und Apigee Hybrid.
Apigee Edge-Dokumentation aufrufen.

ResourceDoesNotExist

Fehlermeldung

Die Bereitstellung des API-Proxys über die Apigee-Benutzeroberfläche oder die API schlägt mit der folgenden Fehlermeldung fehl:

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

Beispiel für Fehlermeldung

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

Beispiel für einen Fehler-Screenshot

Fehler beim Bereitstellen von Überarbeitung 1 zum Testen.

Ursache

Wenn die im <ResourceURL>-Element in der JavaCallout-Richtlinie angegebene Ressource nicht auf der API-Proxy- oder Umgebungsebene vorhanden ist, schlägt die Bereitstellung des API-Proxys fehl.

Diagnose

  1. Ermitteln Sie die Umgebung und den Ressourcennamen. Diese Informationen finden Sie in der Fehlermeldung. Im folgenden Fehler ist die Umgebung beispielsweise test und der im <ResourceURL>-Element verwendete Ressourcenname ist myresource.jar.

    Error Deploying Revision 1 to test
    Resource with name myresource.jar and type java does not exist.
    
  2. Ermitteln Sie die JavaCallout-Richtlinie, die die oben in Schritt 1 angegebene Ressource verwendet.

    Die folgende Richtlinie gibt beispielsweise den Wert von <ResourceURL> als myresource.jar an, was mit dem Wert in der Fehlermeldung übereinstimmt:

    <?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. Prüfen Sie, ob die Ressource entweder Teil des API-Proxys ist, der fehlschlägt, oder auf die Umgebungsebene hochgeladen wurde. Wenn nicht, ist sie die Ursache des Fehlers.

    • Gehen Sie im Navigationsbereich des API-Proxy-Editors zum Tab "Ressourcen", um alle Ressourcen anzuzeigen, die auf API-Proxyebene hochgeladen wurden. In diesem Beispiel wurden für den API-Proxy keine Ressourcen hochgeladen.

      API-Proxy-Editor – Tab &quot;Ressourcen&quot; im Navigationsbereich

    • Ressourcen können auf der Umgebungsebene verfügbar sein. Weitere Informationen finden Sie unter Ressourcendateien.

      • Führen Sie den folgenden API-Aufruf mit „curl“ aus, um festzustellen, ob die Ressource auf der Umgebungsebene vorhanden ist:

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

        Dabei ist $TOKEN auf Ihr OAuth 2.0-Zugriffstoken festgelegt. Weitere Informationen hierzu finden Sie unter OAuth 2.0-Zugriffstoken abrufen. Informationen zu den in diesem Beispiel verwendeten curl-Optionen finden Sie unter curl verwenden. Eine Beschreibung der verwendeten Umgebungsvariablen finden Sie unter Umgebungsvariablen für Apigee API-Anfragen festlegen.

      Wenn Sie einen 404-Statuscode als Antwort für diese APIs erhalten, fehlt die Ressource auf der Umgebungsebene.

    Wenn die Ressource auf API-Proxy- und Umgebungsebene nicht verfügbar ist, wird ein Bereitstellungsfehler zurückgegeben:

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

Lösung

Prüfen Sie, ob die im Element <ResourceURL> angegebene Ressource auf API-Proxy- oder Umgebungsebene vorhanden ist. Weitere Informationen finden Sie unter Ressourcen verwalten.

Um die oben aufgeführte JavaCallout-Richtlinie zu korrigieren, laden Sie die JAR-Datei auf die entsprechende Ebene (API-Proxy- oder Umgebungsebene) hoch.

NoResourceForURL

Fehlermeldung

Die Bereitstellung des API-Proxys über die Apigee-Benutzeroberfläche oder die API schlägt mit der folgenden Fehlermeldung fehl:

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>

Beispiel für Fehlermeldung

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

Beispiel für einen Fehler-Screenshot

Fehler bei der Bereitstellung für Umgebungstest.

Ursache

Dieser Fehler kann auftreten, wenn die Ressourcendatei beschädigt ist oder unvollständig hochgeladen wurde, auch wenn sie auf API-Proxy- oder Umgebungsebene vorhanden ist.

Diagnose

  1. Identifizieren Sie die Umgebung und den Ressourcennamen. Diese Informationen finden Sie in der Fehlermeldung. Im folgenden Fehler lautet der Umgebungsname beispielsweise test und der im <ResourceURL>-Element verwendete Ressourcenname ist 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. Die Ressource muss auf die API-Proxy- oder Umgebungsebene hochgeladen werden. Im folgenden Beispiel können Sie sehen, dass die Ressource myresource.jar auf die API-Proxyebene hochgeladen wurde.

    API-Proxy-Ressourcen

    Ressourcen können auf der Umgebungsebene verfügbar sein. Weitere Informationen finden Sie unter Ressourcendateien.

    Führen Sie den folgenden API-Aufruf mit „curl“ aus, um festzustellen, ob die Ressource auf der Umgebungsebene vorhanden ist:

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

    Dabei ist $TOKEN auf Ihr OAuth 2.0-Zugriffstoken festgelegt, wie unter OAuth 2.0-Zugriffstoken abrufen beschrieben. Informationen zu den in diesem Beispiel verwendeten curl-Optionen finden Sie unter curl verwenden.

    Wenn Sie einen 404-Statuscode als Antwort für diese APIs erhalten, fehlt die Ressource auf der Umgebungsebene.

Lösung

  1. Wenn Sie feststellen, dass die Ressource auf der API-Proxy- oder Umgebungsebene vorhanden ist, löschen Sie die Ressource und laden Sie sie noch einmal hoch, wie in Schritt 2 beschrieben. Fahren Sie andernfalls mit Schritt 3 fort.
  2. Um die Ressource auf der API-Proxyebene zu löschen, gehen Sie im Navigationsbereich des API-Proxy-Editors zum Tab „Ressourcen“ und klicken wie unten dargestellt auf die Schaltfläche „X“.

    Klicken Sie zum Löschen der Ressource auf der API-Proxyebene auf „Löschen“.

    Zum Löschen einer Ressource in der Umgebung verwenden Sie das DELETE-Verb bei den API-Aufrufen, die zuvor in den Diagnoseschritten verwendet wurden. Wenn Sie beispielsweise die Ressource auf der Umgebungsebene löschen möchten, geben Sie folgenden Befehl ein:

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

    Dabei ist $TOKEN auf Ihr OAuth 2.0-Zugriffstoken festgelegt, wie unter OAuth 2.0-Zugriffstoken abrufen beschrieben. Informationen zu den in diesem Beispiel verwendeten curl-Optionen finden Sie unter curl verwenden.

  3. Laden Sie die JAR-Datei auf die entsprechende Ebene hoch, also API-Proxy- oder Umgebungsebene.

  4. Wenn das wiederholte Hochladen der Ressource nicht funktioniert, wenden Sie sich an den Apigee-Support.

JavaCalloutInstantiationFailed

Fehlermeldung

Die Bereitstellung des API-Proxys über die Apigee-Benutzeroberfläche oder die API schlägt mit der folgenden Fehlermeldung fehl:

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>

Oder

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>

Beispiel für Fehlermeldung

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

Beispiel für einen Fehler-Screenshot

Fehler bei der Bereitstellung für Umgebungstest.

Ursache

Typische Ursachen für diesen Fehler

Ursache Beschreibung
Fehlende JAR-Datei Die JAR-Datei mit der im Fehler identifizierten Java-Klasse wird nicht hochgeladen.
Beschädigte JAR-Datei Die JAR-Datei mit der im Fehler identifizierten Java-Klasse ist beschädigt bzw. unvollständig hochgeladen.
Fehlende Klassendatei Die im Fehler angegebene Java-Klassendatei ist nicht Teil der JAR-Datei, die unter >ResourceURL< oder in abhängigen JAR-Dateien angegeben ist.
Java-Code-Problem Der Code enthält einen Fehler, etwa einen fehlenden Konstruktor, ein Problem mit der Codeabhängigkeit oder ein anderes Problem.

Allgemeiner Diagnoseschritt

  1. Identifizieren Sie den Namen der Umgebung und die Klasse, die nicht importiert werden konnten. In der folgenden Fehlermeldung lautet der Umgebungsname beispielsweise test und der Klassenname ist my.class:

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

Ursache: Fehlende JAR-Datei

Diagnose

  1. Bestimmen Sie die JAR-Datei, die die Klasse enthalten soll (oben in Schritt 1 identifiziert), die nicht instanziiert werden konnte.
  2. Prüfen Sie, ob die bestimmte JAR-Datei auf API-Proxy- oder Umgebungsebene hochgeladen wurde. Wenn die JAR-Datei nicht auf eine der Ebenen hochgeladen wurde, gehen Sie zu "Lösung".
  3. Wenn die JAR-Datei hochgeladen wurde, gehen Sie zu Ursache: beschädigte JAR-Datei.

Lösung

  1. Wenn die JAR-Datei beschädigt ist oder unvollständig hochgeladen wurde, erstellen Sie die JAR-Datei neu und laden Sie die JAR-Datei auf die entsprechende Ebene hoch (API-Proxy- oder Umgebungsebene).
  2. Stellen Sie den API-Proxy neu bereit.

Ursache: Beschädigte JAR-Datei

Diagnose

  1. Bestimmen Sie die JAR-Datei, die die Klasse enthalten soll (oben in Schritt 1 identifiziert), die nicht instanziiert werden konnte.
  2. Prüfen Sie, ob die jeweilige JAR-Datei beschädigt ist. Beispielsweise wenn Sie die Datei nicht entpacken können, weil sie beschädigt ist oder unvollständig hochgeladen wurde. Wenn sie beschädigt ist, gehen Sie zu "Lösung".
  3. Wenn die JAR-Datei nicht beschädigt ist, gehen Sie zu Ursache: Fehlende Klassendatei.

Lösung

  1. Erstellen Sie die beschädigte(n) JAR-Datei(en) neu und laden Sie die JAR-Datei auf die entsprechende Ebene (API-Proxy- oder Umgebungsebene) hoch.
  2. Stellen Sie den API-Proxy neu bereit.

Ursache: Fehlende Klassendatei

Diagnose

  1. Prüfen Sie, ob die (oben in Schritt 1 genannte Java-Klassendatei) Teil der JAR-Datei ist, die in >ResourceURL< oder einer der abhängigen JAR-Dateien angegeben ist.
  2. Wenn die Klassendatei in keiner der JAR-Dateien vorhanden ist, haben Sie die Ursache des Fehlers ermittelt. Gehe zu "Lösung".
  3. Wenn die Klassendatei in einer der JAR-Dateien vorliegt, die in der JavaCallout-Richtlinie angegeben sind, gibt es möglicherweise ein Problem mit dem Java-Code oder der abhängigen Klasse, das zu diesem Fehler führt. Wenn Sie Hilfe benötigen, wenden Sie sich an den Apigee-Support.

Lösung

  1. Erstellen Sie die JAR-Datei mit den fehlenden Klassendateien neu und laden Sie die JAR-Datei auf die entsprechende Ebene (API-Proxy- oder Umgebungsebene) hoch.
  2. Stellen Sie den API-Proxy neu bereit.

JAR-Datei hochladen

Prüfen Sie, ob das Ressourcenelement mit allen erforderlichen Klassen auf der API-Proxy- oder Umgebungsebene vorhanden ist. Weitere Informationen finden Sie unter Ressourcendateien.

  1. Zum Hochladen einer Ressource auf API-Proxyebene klicken Sie auf dem Tab "Ressourcen" auf + (Pluszeichen), wählen Sie dann Datei importieren aus und laden Sie die Datei von Ihrem lokalen Computer hoch. Der Dateiname muss dem Element >ResourceURL< entsprechen, aber ohne das Präfix java://.

    Wählen Sie auf dem Tab „Ressourcen“ die Option „Datei importieren“ aus.

  2. Wenn eine Ressource für mehrere API-Proxys in derselben Umgebung verfügbar sein soll, laden Sie die Ressource in die Umgebung hoch. Sie müssen die Apigee API verwenden, wie in Ressourcendateien beschrieben.

    Geben Sie beispielsweise den folgenden API-Aufruf vom lokalen Computer ein, um die angegebene Datei auf der Umgebungsebene hochzuladen:

    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"

    Dabei ist $TOKEN auf Ihr OAuth 2.0-Zugriffstoken festgelegt, wie unter OAuth 2.0-Zugriffstoken abrufen beschrieben. Informationen zu den in diesem Beispiel verwendeten curl-Optionen finden Sie unter curl verwenden.

    Führen Sie den API-Aufruf aus demselben Verzeichnis wie die Datei aus.

  3. Wenn Sie die Datei für alle API-Proxys in allen Umgebungen der Organisation verfügbar machen möchten, können Sie die Umgebungsdetails im Basispfad weglassen. Beispiel:

    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"

    Dabei ist $TOKEN auf Ihr OAuth 2.0-Zugriffstoken festgelegt, wie unter OAuth 2.0-Zugriffstoken abrufen beschrieben. Informationen zu den in diesem Beispiel verwendeten curl-Optionen finden Sie unter curl verwenden.