Wyświetlasz dokumentację Apigee Edge.
Przejdź do
dokumentacji Apigee X. info
![]()
Co
Umożliwia używanie języka Java do implementowania niestandardowych działań, które nie są dostępne w standardowych zasadach Apigee. W kodzie Java możesz uzyskiwać dostęp do właściwości wiadomości (nagłówków, parametrów zapytania, treści) i zmiennych przepływu w przepływie proxy. Jeśli dopiero zaczynasz korzystać z tych zasad, przeczytaj artykuł Tworzenie wywołania Java callout.
Obsługiwane wersje języka Java znajdziesz w artykule Obsługiwane oprogramowanie i obsługiwane wersje.
Kiedy
Wskazówki znajdziesz w sekcji "Kiedy należy używać wywołania Java?" w artykule Tworzenie wywołania Java.
Informacje
Zasady wywołania Java umożliwiają pobieranie i ustawianie zmiennych przepływu, wykonywanie niestandardowej logiki i obsługę błędów, wyodrębnianie danych z żądań lub odpowiedzi i wiele innych. Te zasady pozwalają na implementowanie niestandardowych działań, które nie są objęte żadnymi innymi standardowymi zasadami Edge.
Aplikację Java możesz spakować z dowolnymi plikami JAR. Pamiętaj że istnieją pewne ograniczenia dotyczące tego, co możesz zrobić za pomocą wywołania Java. Są one wymienione poniżej w sekcji Ograniczenia.Przykłady
Prosty przykład
Jak utworzyć wywołanie JavaPobieranie właściwości w kodzie Java
Element <Property> zasad umożliwia określenie pary nazwa/wartość
, którą można pobrać w czasie działania w kodzie Java. Działający przykład użycia
właściwości znajdziesz w artykule Jak używać właściwości
w wywołaniu Java.
Użyj atrybutu name elementu <Property>, aby określić nazwę, za pomocą
której będziesz uzyskiwać dostęp do właściwości z kodu Java. Wartość elementu <Property> (wartość między tagami otwierającym i zamykającym) to wartość, którą otrzyma kod Java. Wartość musi być ciągiem znaków. Nie możesz odwoływać się do zmiennej przepływu, aby uzyskać wartość.
- Skonfiguruj właściwość. W tym przypadku wartością właściwości jest nazwa zmiennej
response.status.code.<JavaCallout async="false" continueOnError="false" enabled="true" name="JavaCallout"> <DisplayName>JavaCallout</DisplayName> <ClassName>com.example.mypolicy.MyJavaCallout</ClassName> <ResourceURL>java://MyJavaCallout.jar</ResourceURL> <Properties> <Property name="source">response.status.code</Property> </Properties> </Javascript>
- W kodzie Java zaimplementuj ten konstruktor w implementacji klasy Execution
w następujący sposób:
public class MyJavaCallout implements Execution{ public MyJavaCallout(Map<string, string> props){ // Extract property values from map. } ... }
Ustawianie zmiennych przepływu w kodzie Java
Szczegółowy opis ustawiania zmiennych w kontekście wiadomości (zmiennych przepływu) w kodzie Java znajdziesz w tym poście w społeczności Apigee.
Dokumentacja elementów
Dokumentacja elementów opisuje elementy i atrybuty zasad JavaCallout.
<JavaCallout name="MyJavaCalloutPolicy"> <ClassName>com.example.mypolicy.MyJavaCallout</ClassName> <ResourceURL>java://MyJavaCallout.jar</ResourceURL> </JavaCallout>
Atrybuty <JavaCallout>
<JavaCallout name="MyJavaCalloutPolicy" enabled="true" continueOnError="false" async="false" >
W tej tabeli opisano atrybuty wspólne dla wszystkich elementów nadrzędnych zasad:
| Atrybut | Opis | Domyślny | Obecność |
|---|---|---|---|
name |
Wewnętrzna nazwa zasady. Wartość atrybutu Opcjonalnie możesz użyć elementu |
Nie dotyczy | Wymagane |
continueOnError |
Ustaw jako Ustaw jako |
fałsz | Opcjonalnie |
enabled |
Aby egzekwować zasadę, ustaw wartość Aby wyłączyć zasadę, ustaw wartość |
prawda | Opcjonalnie |
async |
Ten atrybut został wycofany. |
fałsz | Wycofano |
<DisplayName> element
Używaj oprócz atrybutu name do oznaczania zasady w
edytor proxy interfejsu zarządzania z inną nazwą w języku naturalnym.
<DisplayName>Policy Display Name</DisplayName>
| Domyślny |
Nie dotyczy Jeśli pominiesz ten element, atrybut |
|---|---|
| Obecność | Opcjonalnie |
| Typ | Ciąg znaków |
Element <ClassName>
Określa nazwę klasy Java, która jest wykonywana po uruchomieniu zasad wywołania Java. Klasa musi być zawarta w pliku JAR określonym przez element <ResourceURL>. Zobacz
też Tworzenie wywołania Java
callout.
<JavaCallout name="MyJavaCalloutPolicy"> <ResourceURL>java://MyJavaCallout.jar</ResourceURL> <ClassName>com.example.mypolicy.MyJavaCallout</ClassName> </JavaCallout>
| Domyślnie: | Nie dotyczy |
| Obecność: | Wymagane |
| Typ: | Ciąg znaków |
Element <Property>
Określa właściwość, do której można uzyskać dostęp z kodu Java w czasie działania. W przypadku każdej właściwości musisz określić wartość literału ciągu znaków. W tym elemencie nie możesz odwoływać się do zmiennych przepływu. Działający przykład użycia właściwości znajdziesz w artykule Jak używać właściwości w wywołaniu Java.
<Properties> <Property name="propName">propertyValue</Property> </Properties>
| Domyślnie: | Brak |
| Obecność: | Opcjonalny |
| Typ: | Ciąg znaków |
Atrybuty
| Atrybut | Opis | Domyślny | Obecność |
|---|---|---|---|
| nazwa |
Określa nazwę właściwości. |
Nie dotyczy | Wymagane. |
Element<ResourceURL>
Ten element określa plik JAR Java, który będzie wykonywany po uruchomieniu zasad wywołania Java.
Ten plik możesz przechowywać w zakresie proxy interfejsu API (w pakiecie proxy interfejsu API w katalogu
/apiproxy/resources/java lub w sekcji Skrypty w panelu nawigacji edytora proxy interfejsu API)
albo w zakresie organizacji lub środowiska, aby można go było używać w wielu proxy interfejsu API, jak opisano w sekcji Pliki zasobów.
<JavaCallout name="MyJavaCalloutPolicy"> <ResourceURL>java://MyJavaCallout.jar</ResourceURL> <ClassName>com.example.mypolicy.MyJavaCallout</ClassName> </JavaCallout>
| Domyślnie: | Brak |
| Obecność: | Wymagane |
| Typ: | Ciąg znaków |
Odniesienie do błędów
W tej sekcji opisano kody błędów i komunikaty o błędach, które są zwracane, oraz zmienne błędów ustawiane przez Edge, gdy ta zasada wyzwala błąd. Warto o tym wiedzieć, jeśli rozwijasz reguły błędów, aby obsługi błędów. Więcej informacji znajdziesz w artykule Co musisz wiedzieć o błędach związanych z zasadami i postępowaniu z błędami
Błędy w czasie wykonywania
Te błędy mogą wystąpić podczas wykonywania zasady.
| Kod błędu | Stan HTTP | Przyczyna | Napraw |
|---|---|---|---|
steps.javacallout.ExecutionError |
500 | Występuje, gdy kod w Javie zgłasza wyjątek lub zwraca wartość null podczas wykonywania zasady JavaCallout. | build |
Błędy wdrażania
Te błędy mogą wystąpić podczas wdrażania serwera proxy zawierającego zasadę.
| Nazwa błędu | Ciąg błędu | Stan HTTP | Występuje, gdy |
|---|---|---|---|
ResourceDoesNotExist |
Resource with name
[name] and type [type] does not exist |
Nie dotyczy | Plik określony w elemencie <ResourceURL> nie istnieje. |
JavaCalloutInstantiationFailed |
Failed to instantiate the JavaCallout Class [classname] |
Nie dotyczy | Pliku klasy określonego w elemencie <ClassName> nie ma w sekcji
jar. |
IncompatibleJavaVersion |
Failed to load java class [classname] definition due to - [reason] |
Nie dotyczy | Zobacz ciąg błędu. Zobacz też Obsługiwane oprogramowania i obsługiwanych wersji. |
JavaClassNotFoundInJavaResource |
Failed to find the ClassName in java resource [jar_name] -
[class_name] |
Nie dotyczy | Zobacz ciąg błędu. |
JavaClassDefinitionNotFound |
Failed to load java class [class_name] definition due to - [reason] |
Nie dotyczy | Zobacz ciąg błędu. |
NoAppropriateConstructor |
No appropriate constructor found in JavaCallout class [class_name] |
Nie dotyczy | Zobacz ciąg błędu. |
NoResourceForURL |
Could not locate a resource with URL [string] |
Nie dotyczy | Zobacz ciąg błędu. |
Zmienne błędów
Te zmienne są ustawiane, gdy ta zasada wywołuje błąd. Więcej informacji znajdziesz w artykule Podstawowe informacje o błędach związanych z naruszeniem zasad.
| Zmienne | Gdzie | Przykład |
|---|---|---|
fault.name="fault_name" |
fault_name to nazwa błędu podana w tabeli Błędy czasu działania powyżej. Nazwa błędu to ostatnia część kodu błędu. | fault.name Matches "ExecutionError" |
javacallout.policy_name.failed |
policy_name to określona przez użytkownika nazwa zasady, która spowodowała błąd. | javacallout.JC-GetUserData.failed = true |
Przykładowa odpowiedź na błąd
{ "fault":{ "faultstring":"Failed to execute JavaCallout. [policy_name]", "detail":{ "errorcode":"javacallout.ExecutionError" } } }
Przykładowa reguła błędu
<FaultRule name="JavaCalloutFailed"> <Step> <Name>AM-JavaCalloutError</Name> </Step> <Condition>(fault.name Matches "ExecutionError") </Condition> </FaultRule>
Schematy
Kompilowanie i wdrażanie
Szczegółowe informacje o tym, jak skompilować niestandardowy kod Java i wdrożyć go za pomocą proxy, znajdziesz w artykule Tworzenie wywołania Java callout.
Ograniczenia
Poniżej znajdziesz ograniczenia, które musisz wziąć pod uwagę podczas pisania wywołań Java:
- Większość wywołań systemowych jest niedozwolona. Nie możesz na przykład odczytywać ani zapisywać wewnętrznego systemu plików.
- Dostęp do sieci przez gniazda. Apigee ogranicza dostęp do adresów sitelocal, anylocal, loopback i linklocal.
- Wywołanie nie może uzyskać informacji o bieżącym procesie, liście procesów ani wykorzystaniu procesora/pamięci na maszynie. Chociaż niektóre z tych wywołań mogą działać, nie są one obsługiwane i mogą zostać w każdej chwili aktywnie wyłączone. Aby zapewnić zgodność z przyszłymi wersjami, unikaj wykonywania takich wywołań w kodzie.
- Korzystanie z bibliotek Java, które są dołączone do Apigee Edge, nie jest obsługiwane. Te biblioteki służą tylko do obsługi funkcji Edge i nie ma gwarancji, że biblioteka będzie dostępna w kolejnych wersjach.
- W wywołaniach Java
nie używaj nazw pakietów
io.apigeeanicom.apigee. Te nazwy są zarezerwowane i używane przez inne moduły Apigee.
Sposób prezentacji
Umieść plik JAR w proxy interfejsu API w katalogu /resources/java. Jeśli wywołanie Java korzysta
z dodatkowych bibliotek innych firm spakowanych jako niezależne pliki JAR, umieść te pliki JAR
również w katalogu /resources/java, aby mieć pewność, że zostaną prawidłowo wczytane w czasie
działania.
Jeśli do tworzenia lub modyfikowania proxy używasz interfejsu zarządzania, dodaj nowy zasób i
określ dodatkowy zależny plik JAR. Jeśli jest kilka plików JAR, po prostu dodaj je jako
dodatkowe zasoby. Nie musisz modyfikować konfiguracji zasad, aby odwoływać się do dodatkowych
plików JAR. Wystarczy umieścić je w katalogu /resources/java.
Informacje o przesyłaniu plików JAR Java znajdziesz w sekcji Pliki zasobów.
Szczegółowy przykład pokazujący, jak spakować i wdrożyć wywołanie Java za pomocą Maven lub javac, znajdziesz w artykule Tworzenie wywołania Java.
Javadoc
Dokumentacja Javadoc dotycząca pisania kodu wywołania Java jest dostępna tutaj na GitHubie. Musisz sklonować lub pobrać kod HTML na swój komputer, a następnie otworzyć plik index.html w przeglądarce.
Uwagi dotyczące użytkowania
- Zasady wywołania Java nie zawierają rzeczywistego kodu. Zamiast tego odwołują się do
„zasobu” Java i określają krok w przepływie interfejsu API, w którym jest wykonywany kod Java. Plik JAR Java możesz
przesłać za pomocą edytora proxy w interfejsie zarządzania lub dołączyć go do
/resources/javakatalogu w proxy interfejsu API, które tworzysz lokalnie. - W przypadku prostych operacji, takich jak wywołania API do usług zdalnych, zalecamy używanie zasad wywołania usługi wywołania usługi. Zobacz Zasady wywołania usługi.
- W przypadku stosunkowo prostych interakcji z treścią wiadomości, takich jak modyfikowanie lub wyodrębnianie nagłówków HTTP, parametrów lub treści wiadomości, Apigee zaleca używanie zasad JavaScript.
Powiązane artykuły
- Powiązane przykłady znajdziesz w repozytorium java-cookbook.