Anda sedang melihat dokumentasi Apigee Edge.
Buka
Dokumentasi Apigee X. info
Apa
Memungkinkan Anda menggunakan Java untuk menerapkan perilaku kustom yang tidak disertakan sejak awal Kebijakan Apigee. Dalam kode Java Anda, Anda dapat mengakses properti pesan ({i>header<i}, parameter kueri, ) dan variabel alur dalam alur proxy. Jika Anda baru memulai dengan kebijakan ini, lihat Cara membuat Java info.
Untuk versi Java yang didukung, lihat Didukung software dan versi yang didukung.
Kapan
Untuk panduan, lihat "Kapan saya harus menggunakan info Java?" di Cara membuat paket Java info.
Tentang
Kebijakan Pemanggilan Java memungkinkan Anda mendapatkan dan menyetel variabel alur, menjalankan logika kustom, dan melakukan penanganan {i>error<i}, mengekstrak data dari permintaan atau respons, dan banyak lagi. Kebijakan ini memungkinkan Anda menerapkan perilaku khusus yang tidak tercakup oleh kebijakan Edge standar lainnya.
Anda dapat mengemas aplikasi Java dengan file JAR paket apa pun yang dibutuhkan. Catatan ada beberapa batasan pada hal-hal yang dapat Anda lakukan dengan Java callout. Hal tersebut tercantum di bawah di Pembatasan.Contoh
Contoh sederhana
Cara membuat Java infoMengambil properti dalam kode Java
Elemen <Property>
kebijakan memungkinkan Anda menentukan nama/nilai
yang bisa Anda ambil saat runtime dalam kode Java. Sebagai contoh nyata yang menggunakan
properti, lihat Cara menggunakan properti
dalam info Java.
Gunakan <Property> ke atribut name
elemen untuk menentukan nama dengan
untuk mengakses properti dari kode Java. Elemen <Property>
(nilai antara tag pembuka dan penutup) adalah nilai yang akan diterima oleh
kode Java. Nilainya harus berupa string; Anda tidak dapat mereferensikan variabel flow untuk mendapatkan
dengan sejumlah nilai.
- Konfigurasikan properti. Di sini, nilai properti
adalah nama variabel
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>
- Dalam kode Java Anda, implementasikan konstruktor berikut pada kelas Execution
penerapan sebagai berikut:
public class MyJavaCallout implements Execution{ public MyJavaCallout(Map<string, string> props){ // Extract property values from map. } ... }
Menetapkan variabel flow di kode Java
Untuk deskripsi yang jelas tentang cara menetapkan variabel dalam konteks pesan (variabel alur) dalam kode Java Anda, lihat postingan Komunitas Apigee ini.
Referensi elemen
Referensi elemen menjelaskan elemen dan atribut kebijakan Javacallout.
<JavaCallout name="MyJavaCalloutPolicy"> <ClassName>com.example.mypolicy.MyJavaCallout</ClassName> <ResourceURL>java://MyJavaCallout.jar</ResourceURL> </JavaCallout>
<JavaCallout> atribut
<JavaCallout name="MyJavaCalloutPolicy" enabled="true" continueOnError="false" async="false" >
Tabel berikut menjelaskan atribut yang umum untuk semua elemen induk kebijakan:
Atribut | Deskripsi | Default | Ketersediaan |
---|---|---|---|
name |
Nama internal kebijakan. Nilai atribut Secara opsional, gunakan elemen |
T/A | Wajib |
continueOnError |
Tetapkan ke Setel ke |
salah | Opsional |
enabled |
Setel ke Setel ke |
true | Opsional |
async |
Atribut ini tidak digunakan lagi. |
salah | Tidak digunakan lagi |
<DisplayName> elemen
Gunakan selain atribut name
untuk memberi label kebijakan di
editor proxy UI dengan nama natural language yang berbeda.
<DisplayName>Policy Display Name</DisplayName>
Default |
T/A Jika Anda menghapus elemen ini, nilai atribut |
---|---|
Ketersediaan | Opsional |
Jenis | String |
<ClassName> elemen
Menentukan nama class Java yang dijalankan saat kebijakan Panggilan Java berjalan. Tujuan
harus disertakan dalam file JAR yang ditentukan oleh <ResourceURL>
. Lihat
juga Cara membuat
info.
<JavaCallout name="MyJavaCalloutPolicy"> <ResourceURL>java://MyJavaCallout.jar</ResourceURL> <ClassName>com.example.mypolicy.MyJavaCallout</ClassName> </JavaCallout>
Default: | T/A |
Kehadiran: | Wajib |
Jenis: | String |
<Property> elemen
Menentukan properti yang dapat Anda akses dari kode Java saat runtime. Anda harus menentukan literal nilai string untuk setiap properti; Anda tidak dapat mereferensikan variabel alur dalam elemen ini. Untuk contoh kerja yang menggunakan properti, lihat Cara menggunakan properti Keterangan Java.
<Properties> <Property name="propName">propertyValue</Property> </Properties>
Default: | Tidak ada |
Kehadiran: | Opsional |
Jenis: | String |
Atribut
Atribut | Deskripsi | Default | Ketersediaan |
---|---|---|---|
nama |
Menentukan nama properti. |
T/A | Wajib. |
<ResourceURL> elemen
Elemen ini menentukan file JAR Java yang akan dieksekusi saat kebijakan pemanggilan Java yang dijalankan.
Anda bisa menyimpan file ini di cakupan proxy API (di bagian
/apiproxy/resources/java
di paket proxy API atau di bagian Skrip
panel Navigator editor proxy API), atau pada cakupan organisasi atau lingkungan untuk digunakan kembali
di beberapa proxy API, seperti yang dijelaskan dalam File resource.
<JavaCallout name="MyJavaCalloutPolicy"> <ResourceURL>java://MyJavaCallout.jar</ResourceURL> <ClassName>com.example.mypolicy.MyJavaCallout</ClassName> </JavaCallout>
Default: | Tidak ada |
Kehadiran: | Wajib |
Jenis: | String |
Referensi error
This section describes the fault codes and error messages that are returned and fault variables that are set by Edge when this policy triggers an error. This information is important to know if you are developing fault rules to handle faults. To learn more, see What you need to know about policy errors and Handling faults.
Runtime errors
These errors can occur when the policy executes.
Fault code | HTTP status | Cause | Fix |
---|---|---|---|
steps.javacallout.ExecutionError |
500 | Occurs when Java code throws an exception or returns null during the execution of a JavaCallout policy. | build |
Deployment errors
These errors can occur when the proxy containing the policy is deployed.
Error name | Fault string | HTTP status | Occurs when |
---|---|---|---|
ResourceDoesNotExist |
Resource with name
[name] and type [type] does not exist |
N/A | The file specified in the <ResourceURL> element does not exist. |
JavaCalloutInstantiationFailed |
Failed to instantiate the JavaCallout Class [classname] |
N/A | The class file specified in the <ClassName> element is not in the
jar. |
IncompatibleJavaVersion |
Failed to load java class [classname] definition due to - [reason] |
N/A | See fault string. See also Supported software and supported versions. |
JavaClassNotFoundInJavaResource |
Failed to find the ClassName in java resource [jar_name] -
[class_name] |
N/A | See fault string. |
JavaClassDefinitionNotFound |
Failed to load java class [class_name] definition due to - [reason] |
N/A | See fault string. |
NoAppropriateConstructor |
No appropriate constructor found in JavaCallout class [class_name] |
N/A | See fault string. |
NoResourceForURL |
Could not locate a resource with URL [string] |
N/A | See fault string. |
Fault variables
These variables are set when this policy triggers an error. For more information, see What you need to know about policy errors.
Variables | Where | Example |
---|---|---|
fault.name="fault_name" |
fault_name is the name of the fault, as listed in the Runtime errors table above. The fault name is the last part of the fault code. | fault.name Matches "ExecutionError" |
javacallout.policy_name.failed |
policy_name is the user-specified name of the policy that threw the fault. | javacallout.JC-GetUserData.failed = true |
Example error response
{ "fault":{ "faultstring":"Failed to execute JavaCallout. [policy_name]", "detail":{ "errorcode":"javacallout.ExecutionError" } } }
Example fault rule
<FaultRule name="JavaCalloutFailed"> <Step> <Name>AM-JavaCalloutError</Name> </Step> <Condition>(fault.name Matches "ExecutionError") </Condition> </FaultRule>
Skema
Mengompilasi dan men-deploy
Untuk detail tentang cara mengompilasi kode Java kustom Anda dan men-deploy-nya dengan proxy, lihat Cara membuat Java info.
Batasan
Berikut adalah batasan yang perlu Anda pertimbangkan saat menulis Info Java:
- Sebagian besar panggilan sistem tidak diizinkan. Misalnya, Anda tidak dapat membuat pembacaan sistem file internal atau tulis.
- Akses ke jaringan melalui soket. Apigee membatasi akses ke sitelocal, anylocal, loopback, dan linklocal addresses.
- Info tidak dapat memperoleh informasi tentang proses saat ini, daftar proses, atau Pemakaian CPU/memori pada mesin. Meskipun beberapa panggilan tersebut mungkin berfungsi, panggilan tidak didukung dan dapat dinonaktifkan secara aktif kapan saja. Untuk kompatibilitas dengan versi baru, Anda dapat sebaiknya hindari melakukan panggilan seperti itu di kode Anda.
- Pengandalan pada library Java yang disertakan dengan Apigee Edge tidak didukung. Mereka library hanya untuk fungsi produk Edge, dan tidak ada jaminan bahwa library akan tersedia mulai dari rilis hingga rilis.
- Jangan gunakan
io.apigee
ataucom.apigee
sebagai nama paket di Java Info. Nama-nama tersebut dicadangkan dan digunakan oleh modul Apigee lainnya.
Kemasan
Tempatkan JAR di proxy API di bagian /resources/java
. Jika pemanggilan Java bergantung
pada library pihak ketiga tambahan yang dikemas sebagai file JAR independen, lalu menempatkan file JAR tersebut
di direktori /resources/java
juga untuk memastikannya dimuat dengan benar di
waktu beroperasi.
Jika Anda menggunakan UI pengelolaan untuk membuat atau memodifikasi proxy, tambahkan resource baru dan
menentukan file JAR dependen tambahan. Jika ada beberapa JAR, cukup tambahkan sebagai
resource tambahan. Anda tidak perlu mengubah konfigurasi kebijakan untuk merujuk ke
File JAR. Memasukkannya di /resources/java
saja sudah cukup.
Untuk mengetahui informasi tentang cara mengupload JAR Java, lihat File resource.
Untuk contoh mendetail yang menunjukkan cara memaketkan dan men-deploy Java callout menggunakan Maven atau javac, lihat Cara membuat info Java.
Javadoc
Javadoc untuk menulis kode Info Java disertakan di sini di GitHub. Anda harus menggandakan atau mengunduh HTML ke sistem, dan kemudian cukup buka index.html di browser.
Catatan penggunaan
- Kebijakan Pemanggilan Java tidak berisi kode sebenarnya. Sebagai gantinya, kebijakan Java Keterangan merujuk
'Resource' Java dan menentukan Langkah dalam alur API tempat kode Java dieksekusi. Anda dapat
upload Java JAR Anda melalui editor proxy UI Pengelolaan, atau Anda dapat menyertakannya dalam
Direktori
/resources/java
di proxy API yang Anda kembangkan secara lokal. - Untuk operasi ringan, seperti panggilan API ke layanan jarak jauh, sebaiknya gunakan Kebijakan ServiceInfo. Lihat kebijakan Pemanggilan Layanan.
- Untuk interaksi yang relatif sederhana dengan konten pesan, seperti memodifikasi atau mengekstrak Header HTTP, parameter, atau konten pesan, Apigee merekomendasikan penggunaan kebijakan JavaScript.
Topik terkait
- Untuk contoh terkait, lihat java-cookbook repositori Anda.