Przeglądasz dokumentację Apigee Edge.
Przejdź do
Dokumentacja Apigee X. informacje.
ResourceDoesNotExist
Komunikat o błędzie
Wdrożenie serwera proxy interfejsu API za pomocą interfejsu Edge UI lub Edge Management API nie powiedzie się i wyświetli się ten komunikat o błędzie:
Error Deploying Revision <var>revision_number</var> to <var>environment</var>
Resource with name <var>ResourceURL</var> and type java does not exist.
Przykładowy komunikat o błędzie
Error Deploying Revision 1 to test
Resource with name myresource.jar and type java does not exist.
Przykładowy zrzut ekranu z błędem
Przyczyna
Jeśli zasób określony w elemencie <ResourceURL>
w zasadzie JavaCallout nie istnieje na poziomie serwera proxy interfejsu API, środowiska lub organizacji, wdrożenie serwera proxy interfejsu API się nie uda.
Diagnostyka
Określ nazwę środowiska i zasobu. Te informacje znajdziesz w komunikacie o błędzie. Na przykład w tym błędzie środowisko to
test
, a nazwa zasobu użyta w elemencie <ResourceURL>
tomyresource.jar
.Error Deploying Revision 1 to test Resource with name myresource.jar and type java does not exist.
Określ zasadę języka JavaCallout, która korzysta z zasobu określonego w kroku 1 powyżej.
Na przykład ta zasada określa wartość <
ResourceURL>
jakomyresource.jar
, która odpowiada wartości z komunikatu o błędzie:<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <JavaCallout name="hello-java"> <ClassName>com.apigeesample.HelloJava</ClassName> <ResourceURL>java://myresource.jar</ResourceURL> </JavaCallout>
Określ, czy zasób jest częścią serwera proxy interfejsu API, który ulega awarii lub został przesłany na poziomie środowiska bądź organizacji. Jeśli tak się nie stanie, to właśnie on jest przyczyną błędu.
W panelu Nawigator w edytorze serwera proxy interfejsu API przejdź na kartę Zasoby, aby wyświetlić wszystkie zasoby przesłane na poziomie serwera proxy interfejsu API. W tym przykładzie na serwerze proxy interfejsu API nie przesłano żadnych zasobów.
Zasoby mogą być dostępne na poziomie środowiska lub organizacji. Więcej informacji znajdziesz w artykule Pliki zasobów.
Aby sprawdzić, czy zasób istnieje na poziomie środowiska, użyj curl następującego wywołania interfejsu API:
curl -v -u <strong>email </strong>"https://api.enterprise.apigee.com/v1/organizations/myorg/environments/myenv/resourcefiles/java/myresource.jar"
Aby określić, czy zasób istnieje na poziomie organizacji, użyj narzędzia curl do następującego wywołania interfejsu API, pomijając szczegóły środowiska:
curl -v -u email "https://api.enterprise.apigee.com/v1/organizations/myorg/resourcefiles/java/myresource.jar"
Jeśli w odpowiedzi dla tych interfejsów API otrzymasz kod stanu 404, oznacza to, że zasobu brakuje zarówno na poziomie organizacji, jak i środowiska.
Jeśli zasób nie jest dostępny na poziomie serwera proxy interfejsu API, organizacji i środowiska, zwracany jest błąd wdrożenia:
Resource with name myresource.jar and type java does not exist. ```
Rozdzielczość
Upewnij się, że zasób określony w elemencie <ResourceURL>
istnieje na poziomie serwera proxy interfejsu API, środowiska lub organizacji. Więcej informacji znajdziesz w artykule Pliki zasobów.
Aby poprawić pokazaną powyżej przykładową zasadę JavaCallout, prześlij plik JAR na odpowiednim poziomie (serwer proxy interfejsu API, organizacji lub środowiska).
NoResourceForURL
Komunikat o błędzie
Wdrożenie serwera proxy interfejsu API za pomocą interfejsu Edge UI lub Edge Management API nie powiedzie się i wyświetli się ten komunikat o błędzie:
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>
Przykładowy komunikat o błędzie
Error in deployment for environment test
The revision is deployed, but traffic cannot flow. Could not locate a resource with URL java://myresource.jar
Przykładowy zrzut ekranu z błędem
Przyczyna
Ten błąd może wystąpić, jeśli plik zasobów jest uszkodzony lub częściowo przesłany, nawet jeśli wydaje się istnieć na poziomie serwera proxy interfejsu API, środowiska lub organizacji.
Diagnostyka
Określ środowisko i nazwę zasobu. Te informacje znajdziesz w komunikacie o błędzie. Na przykład w tym błędzie nazwa środowiska to
test
, a nazwa zasobu użyta w elemencie <ResourceURL>
tomyresource.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
Sprawdź, czy zasób został przesłany na poziomie serwera proxy interfejsu API, środowiska lub organizacji. W przykładzie poniżej możesz zobaczyć, że zasób
myresource.jar
został przesłany na poziomie serwera proxy interfejsu API.Zasoby mogą być dostępne na poziomie środowiska lub organizacji. Więcej informacji znajdziesz w artykule Pliki zasobów.
Aby sprawdzić, czy zasób istnieje na poziomie środowiska, użyj curl następującego wywołania interfejsu API:
curl -v -u <strong>email </strong>"https://api.enterprise.apigee.com/v1/organizations/myorg/environments/myenv/resourcefiles/java/myresource.jar"
Aby określić, czy zasób istnieje na poziomie organizacji, użyj narzędzia curl do następującego wywołania interfejsu API, pomijając szczegóły środowiska:
curl -v -u email "https://api.enterprise.apigee.com/v1/organizations/myorg/resourcefiles/java/myresource.jar"
Jeśli w odpowiedzi dla tych interfejsów API otrzymasz kod stanu 404, oznacza to, że zasobu brakuje zarówno na poziomie organizacji, jak i środowiska.
Rozdzielczość
- Jeśli ustalisz, że zasób istnieje na poziomie serwera proxy interfejsu API, organizacji lub środowiska, usuń go i prześlij ponownie zgodnie z opisem w kroku 2. W innym przypadku przejdź do kroku 3.
Aby usunąć zasób na poziomie serwera proxy interfejsu API, przejdź na kartę Zasoby w panelu nawigacji w edytorze serwera proxy interfejsu API i kliknij przycisk „X” obok zasobu, jak pokazano poniżej.
Aby usunąć zasób na poziomie środowiska lub organizacji, użyj czasownika DELETE w wywołaniach interfejsu API, które były używane wcześniej na etapie diagnostyki. Aby na przykład usunąć zasób na poziomie środowiska, wpisz to polecenie:
curl -X DELETE -v -u <strong>email </strong>"https://api.enterprise.apigee.com/v1/organizations/myorg/environments/myenv/resourcefiles/java/myresource.jar"
Prześlij plik JAR) na odpowiednim poziomie (serwer proxy interfejsu API, organizacji lub środowiska.
Jeśli ponowne przesłanie zasobu nie pomoże, należy ponownie uruchomić procesory wiadomości, których dotyczy problem. Jeśli korzystasz z Apigee Edge w Google Cloud, skontaktuj się z zespołem pomocy Apigee. Jeśli jesteś użytkownikiem chmury prywatnej, zapoznaj się z informacjami na temat uruchamiania, zatrzymywania, ponownego uruchamiania i sprawdzania stanu Apigee Edge.
JavaCalloutInstantiationFailed
Komunikat o błędzie
Wdrożenie serwera proxy interfejsu API za pomocą interfejsu Edge UI lub Edge Management API nie powiedzie się i wyświetli się ten komunikat o błędzie:
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>
Lub
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>
Przykładowy komunikat o błędzie
Error in deployment for environment test
The revision is deployed, but traffic cannot flow. Failed to instantiate the JavaCallout Class my.class
Przykładowy zrzut ekranu z błędem
Przyczyna
Oto typowe przyczyny tego błędu
Przyczyna | Opis |
Brak pliku JAR | Plik JAR zawierający klasę Java zidentyfikowaną w błędzie nie został przesłany. |
Uszkodzony plik JAR | Plik JAR zawierający klasę Java zidentyfikowaną w błędzie jest uszkodzony lub częściowo przesłany. |
Brak pliku zajęć | Plik klasy Java zidentyfikowany w błędzie nie należy do pliku JAR określonego w >ResourceURL< lub zależnych plików JAR. |
Problem z kodem Java | W kodzie występuje błąd, na przykład brakujący konstruktor, problem z zależnością kodu lub inny problem. |
Etap ogólnej diagnostyki
Określ nazwę środowiska i klasę, których nie udało się zaimportować. Na przykład w tym przykładzie nazwa środowiska komunikatu o błędzie to
test
, a nazwa klasy tomy.class
:Error in deployment for environment test The revision is deployed, but traffic cannot flow. Failed to instantiate the JavaCallout Class my.class
Przyczyna: brak pliku JAR
Diagnostyka
- Określ plik JAR, który powinien zawierać klasę (określoną w kroku 1 powyżej), którego nie można utworzyć.
- Sprawdź, czy określony plik JAR został przesłany na poziomie serwera proxy interfejsu API, organizacji lub środowiska. Jeśli plik JAR nie został przesłany na żaden z poziomów, przejdź do sekcji Rozdzielczość.
- Jeśli przesyłasz plik JAR, przejdź do sekcji Przyczyna: uszkodzony plik JAR.
Rozdzielczość
- Jeśli plik JAR jest uszkodzony lub częściowo przesłany, ponownie utwórz plik JAR i prześlij ten plik na odpowiednim poziomie (serwera proxy interfejsu API, organizacji lub środowiska).
- Wdróż ponownie serwer proxy interfejsu API.
Przyczyna: uszkodzony plik JAR
Diagnostyka
- Określ plik JAR, który powinien zawierać klasę (określoną w kroku 1 powyżej), której nie można utworzyć.
- Sprawdź, czy konkretny plik JAR nie jest uszkodzony. Jeśli na przykład nie można rozpakować pliku jar, ponieważ jest uszkodzony lub został częściowo przesłany. Jeśli jest uszkodzony, przejdź do opcji Rozdzielczość.
- Jeśli plik JAR nie jest uszkodzony, przejdź do sekcji Przyczyna: brak pliku zajęć.
Rozdzielczość
- Odbuduj uszkodzone pliki JAR i prześlij plik JAR na odpowiednim poziomie (serwera proxy interfejsu API, organizacji lub środowiska.
- Wdróż ponownie serwer proxy interfejsu API.
Przyczyna: brak pliku zajęć
Diagnostyka
- Sprawdź, czy określony plik klasy Java (określony w kroku 1 powyżej) jest częścią pliku JAR określonego w sekcji >ResourceURL< ani żadnego z zależnych plików JAR.
- Jeśli w żadnym z plików JAR nie ma pliku klasy, oznacza to, że znasz przyczynę błędu. Otwórz Rozdzielczość.
- Jeśli plik klasy znajduje się w jednym z plików JAR określonych w zasadach JavaCallout, musi występować problem z kodem w Javie lub klasą zależną, która prowadzi do tego błędu. 1: Jeśli jesteś użytkownikiem Public Cloud, skontaktuj się z zespołem pomocy Apigee. b. Jeśli korzystasz z Private Cloud, przejdź do artykułu Przyczyna: problem z kodem Java.
Rozdzielczość
- Utwórz ponownie plik JAR z brakującymi plikami klas i prześlij plik JAR na odpowiednim poziomie (serwera proxy interfejsu API, organizacji lub środowiska).
- Wdróż ponownie serwer proxy interfejsu API.
Przyczyna: problem z kodem Java
Instrukcje diagnostyczne tylko dla użytkowników Private Cloud
Diagnostyka
- Sprawdź logi procesora wiadomości (
/opt/apigee/var/log/edge-message-processor/system.log
i/opt/apigee/var/log/edge-message-processor/configurations.log
). Możesz zauważyć wyjątek podobny do tego poniżej:
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>
Uważnie przeczytaj wyjątek, aby zrozumieć przyczynę niepowodzenia. Zwykle może to wskazywać na problem w kodzie Java.
Rozdzielczość
- W zależności od przyczyny błędu konieczne może być rozwiązanie problemu w kodzie Java.
- Utwórz ponownie plik JAR z brakującymi plikami klas i prześlij plik JAR na odpowiednim poziomie (serwera proxy interfejsu API, organizacji lub środowiska).
- Wdróż ponownie serwer proxy interfejsu API.
Prześlij plik JAR
Sprawdź, czy element zasobu ze wszystkimi niezbędnymi klasami istnieje na poziomie serwera proxy interfejsu API, środowiska lub organizacji. Więcej informacji znajdziesz w artykule Pliki zasobów.
Aby przesłać zasób na poziomie serwera proxy interfejsu API, kliknij + (znak plusa) na karcie Zasoby, a następnie kliknij Importuj plik i prześlij plik ze swojego komputera lokalnego. Nazwa pliku powinna być zgodna z wartością >ResourceURL< element, ale bez prefiksu
java://
.Jeśli chcesz, aby zasób był dostępny dla więcej niż 1 serwera proxy interfejsu API w tym samym środowisku, prześlij go do tego środowiska. Musisz używać interfejsu Edge API w sposób opisany w artykule Pliki zasobów.
Na przykład wpisz to wywołanie interfejsu API z komputera lokalnego, aby przesłać określony plik na poziomie środowiska:
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"
Wyślij wywołanie interfejsu API z tego samego katalogu co plik.
Aby udostępnić plik dla wszystkich serwerów proxy interfejsu API we wszystkich środowiskach w organizacji, możesz pominąć szczegóły środowiska w ścieżce podstawowej. Na przykład:
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"