<ph type="x-smartling-placeholder"></ph>
Sie sehen die Dokumentation zu Apigee Edge.
Gehen Sie zur
Apigee X-Dokumentation. Weitere Informationen
ResourceDoesNotExist
Fehlermeldung
Die Bereitstellung des API-Proxys über die Edge-Benutzeroberfläche oder die Edge-Verwaltungs-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
Ursache
Wenn die im Element <ResourceURL>
der JavaCallout-Richtlinie angegebene Ressource nicht auf API-Proxy-, Umgebungs- oder Organisationsebene vorhanden ist, schlägt die Bereitstellung des API-Proxys fehl.
Diagnose
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 istmyresource.jar
.Error Deploying Revision 1 to test Resource with name myresource.jar and type java does not exist.
Ermitteln Sie die JavaCallout-Richtlinie, die die oben in Schritt 1 angegebene Ressource verwendet.
Die folgende Richtlinie gibt beispielsweise den Wert von <
ResourceURL>
alsmyresource.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>
Ermitteln Sie, ob die Ressource entweder Teil des API-Proxys ist, der fehlerhaft ist oder auf Umgebungs- oder Organisationsebene 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.
Ressourcen können auf Umgebungs- oder Organisationsebene verfügbar sein. Weitere Informationen finden Sie unter Ressourcendateien.
Führen Sie den folgenden API-Aufruf mit dem Befehl „curl“ aus, um festzustellen, ob die Ressource auf Umgebungsebene vorhanden ist:
curl -v -u <strong>email </strong>"https://api.enterprise.apigee.com/v1/organizations/myorg/environments/myenv/resourcefiles/java/myresource.jar"
Wenn Sie herausfinden möchten, ob die Ressource auf Organisationsebene vorhanden ist, führen Sie den folgenden API-Aufruf mit „curl“ aus und lassen Sie dabei die Umgebungsdetails weg:
curl -v -u email "https://api.enterprise.apigee.com/v1/organizations/myorg/resourcefiles/java/myresource.jar"
Wenn Sie als Antwort für diese APIs einen 404-Statuscode erhalten, fehlt die Ressource sowohl auf Organisations- als auch auf Umgebungsebene.
Wenn die Ressource auf API-Proxy-, Organisations- und Umgebungsebene nicht verfügbar ist, wird der Bereitstellungsfehler zurückgegeben:
Resource with name myresource.jar and type java does not exist. ```
Auflösung
Achten Sie darauf, dass die im Element <ResourceURL>
angegebene Ressource auf API-Proxy-, Umgebungs- oder Organisationsebene vorhanden ist. Weitere Informationen finden Sie unter Ressourcendateien.
Um die oben gezeigte JavaCallout-Beispielrichtlinie zu korrigieren, laden Sie die JAR-Datei auf der entsprechenden Ebene hoch (API-Proxy-, Organisations- oder Umgebungsebene).
NoResourceForURL
Fehlermeldung
Die Bereitstellung des API-Proxys über die Edge-Benutzeroberfläche oder die Edge-Verwaltungs-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
Ursache
Dieser Fehler kann auftreten, wenn die Ressourcendatei beschädigt oder teilweise hochgeladen ist, obwohl sie auf API-Proxy-, Umgebungs- oder Organisationsebene zu existieren scheint.
Diagnose
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 istmyresource.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
Achten Sie darauf, dass die Ressource auf den API-Proxy, die Umgebung oder die Organisationsebene hochgeladen wurde. Im folgenden Beispiel können Sie sehen, dass die Ressource
myresource.jar
auf die API-Proxyebene hochgeladen wurde.Ressourcen können auf Umgebungs- oder Organisationsebene verfügbar sein. Weitere Informationen finden Sie unter Ressourcendateien.
Führen Sie den folgenden API-Aufruf mit dem Befehl „curl“ aus, um festzustellen, ob die Ressource auf Umgebungsebene vorhanden ist:
curl -v -u <strong>email </strong>"https://api.enterprise.apigee.com/v1/organizations/myorg/environments/myenv/resourcefiles/java/myresource.jar"
Wenn Sie herausfinden möchten, ob die Ressource auf Organisationsebene vorhanden ist, führen Sie den folgenden API-Aufruf mit „curl“ aus und lassen Sie dabei die Umgebungsdetails weg:
curl -v -u email "https://api.enterprise.apigee.com/v1/organizations/myorg/resourcefiles/java/myresource.jar"
Wenn Sie als Antwort für diese APIs einen 404-Statuscode erhalten, fehlt die Ressource sowohl auf Organisations- als auch auf Umgebungsebene.
Auflösung
- Wenn Sie feststellen, dass die Ressource auf API-Proxy-, Organisations- oder Umgebungsebene vorhanden ist, löschen Sie die Ressource und laden Sie sie wie in Schritt 2 beschrieben noch einmal hoch. Anderenfalls fahren Sie mit Schritt 3 fort.
Um die Ressource auf API-Proxy-Ebene zu löschen, gehen Sie zum Tab Resources (Ressourcen) im Navigator-Bereich des API-Proxy-Editors und klicken Sie auf die Schaltfläche „X“ neben der Ressource, wie unten dargestellt.
Wenn Sie eine Ressource auf Umgebungs- oder Organisationsebene löschen möchten, verwenden Sie das DELETE-Verb für die API-Aufrufe, die zuvor in Diagnoseschritten verwendet wurden. Wenn Sie die Ressource beispielsweise auf Umgebungsebene löschen möchten, geben Sie den folgenden Befehl ein:
curl -X DELETE -v -u <strong>email </strong>"https://api.enterprise.apigee.com/v1/organizations/myorg/environments/myenv/resourcefiles/java/myresource.jar"
Laden Sie die JAR-Datei auf der entsprechenden Ebene hoch (API-Proxy-, Organisations- oder Umgebungsebene).
Wenn das erneute Hochladen der Ressource nicht hilft, müssen die betroffenen Message Processor neu gestartet werden. Wenn Sie Apigee Edge in Cloud verwenden, wenden Sie sich an den Apigee-Support. Wenn Sie ein Private Cloud-Nutzer sind, lesen Sie Apigee Edge starten, beenden, neu starten und Status prüfen.
JavaCalloutInstantiationFailed
Fehlermeldung
Die Bereitstellung des API-Proxys über die Edge-Benutzeroberfläche oder die Edge-Verwaltungs-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
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
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 istmy.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
- Bestimmen Sie die JAR-Datei, die die Klasse enthalten soll (oben in Schritt 1 identifiziert), die nicht instanziiert werden konnte.
- Überprüfen Sie, ob die spezifische JAR-Datei auf API-Proxy-, Organisations- oder Umgebungsebene hochgeladen wurde. Wenn die JAR-Datei nicht auf eine der Ebenen hochgeladen wurde, gehen Sie zu "Lösung".
- Wenn die JAR-Datei hochgeladen wurde, gehen Sie zu Ursache: beschädigte JAR-Datei.
Auflösung
- Wenn die JAR-Datei beschädigt oder nur teilweise hochgeladen wurde, erstellen Sie die JAR-Datei neu und laden Sie die JAR-Datei auf der entsprechenden Ebene hoch (API-Proxy-, Organisations- oder Umgebungsebene).
- Stellen Sie den API-Proxy neu bereit.
Ursache: Beschädigte JAR-Datei
Diagnose
- Bestimmen Sie die JAR-Datei, die die Klasse enthalten soll (oben in Schritt 1 identifiziert), die nicht instanziiert werden konnte.
- 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".
- Wenn die JAR-Datei nicht beschädigt ist, gehen Sie zu Ursache: Fehlende Klassendatei.
Auflösung
- Erstellen Sie die beschädigte JAR-Datei(en) neu und laden Sie die JAR-Datei hoch, und zwar auf der entsprechenden Ebene (API-Proxy-, Organisations- oder Umgebungsebene).
- Stellen Sie den API-Proxy neu bereit.
Ursache: Fehlende Klassendatei
Diagnose
- 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.
- Wenn die Klassendatei in keiner der JAR-Dateien vorhanden ist, haben Sie die Ursache des Fehlers ermittelt. Gehe zu "Lösung".
- Wenn die Klassendatei in einer der in der JavaCallout-Richtlinie angegebenen JAR-Dateien vorhanden ist, muss ein Problem mit dem Java-Code oder der abhängigen Klasse vorliegen, das zu diesem Fehler führt. a) Wenn Sie eine öffentliche Cloud nutzen, wenden Sie sich an den Apigee-Support. b) Wenn Sie ein Private Cloud-Nutzer sind, fahren Sie mit Ursache: Java-Codeproblem fort.
Auflösung
- Erstellen Sie die JAR-Datei mit den fehlenden Klassendateien neu und laden Sie die JAR-Datei auf der entsprechenden Ebene hoch (API-Proxy-, Organisations- oder Umgebungsebene).
- Stellen Sie den API-Proxy neu bereit.
Ursache: Java-Codeproblem
Diagnoseschritte nur für Private Cloud-Nutzer
Diagnose
- Prüfen Sie die Message Processor-Logs (
/opt/apigee/var/log/edge-message-processor/system.log
und/opt/apigee/var/log/edge-message-processor/configurations.log
). Möglicherweise wird eine Ausnahme wie im folgenden Beispiel angezeigt:
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>
Lesen Sie sich die Ausnahme genau durch, um die Fehlerursache zu verstehen. In der Regel weist dies auf ein Problem in Ihrem Java-Code hin.
Auflösung
- Je nach Ursache des Fehlers müssen Sie das Problem möglicherweise in Ihrem Java-Code beheben.
- Erstellen Sie die JAR-Datei mit den fehlenden Klassendateien neu und laden Sie die JAR-Datei auf der entsprechenden Ebene hoch (API-Proxy-, Organisations- oder Umgebungsebene).
- Stellen Sie den API-Proxy neu bereit.
JAR-Datei hochladen
Achten Sie darauf, dass das Ressourcenelement mit allen erforderlichen Klassen auf API-Proxy-, Umgebungs- oder Organisationsebene vorhanden ist. Weitere Informationen finden Sie unter Ressourcendateien.
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://
.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 Edge API verwenden, wie unter Ressourcendateien beschrieben.
Geben Sie beispielsweise den folgenden API-Aufruf vom lokalen Computer ein, um die angegebene Datei auf der Umgebungsebene hochzuladen:
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"
Führen Sie den API-Aufruf aus demselben Verzeichnis wie die Datei aus.
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 -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"