Anda sedang melihat dokumentasi Apigee Edge.
Lihat dokumentasi Apigee X.
Apa
Memungkinkan Anda menggunakan Java untuk menerapkan perilaku kustom yang tidak langsung dipakai oleh kebijakan Apigee. Dalam kode Java, Anda dapat mengakses properti pesan (header, parameter kueri, konten) dan variabel flow dalam alur proxy. Jika Anda baru mulai menggunakan kebijakan ini, lihat Cara membuat info Java.
Untuk versi Java yang didukung, lihat Software dan versi yang didukung.
Jika
Untuk mengetahui panduannya, lihat "Kapan saya harus menggunakan info Java?" di Cara membuat info Java.
Tentang
Kebijakan Pemanggilan Java memungkinkan Anda mendapatkan dan menetapkan variabel flow, menjalankan logika kustom serta melakukan penanganan error, mengekstrak data dari permintaan atau respons, dan sebagainya. Kebijakan ini memungkinkan Anda menerapkan perilaku kustom yang tidak tercakup dalam kebijakan Edge standar lainnya.
Anda dapat mengemas aplikasi Java dengan paket file JAR apa pun yang dibutuhkan. Perhatikan bahwa ada beberapa batasan terkait hal yang dapat Anda lakukan dengan Java pemanggil. Ini tercantum di bawah ini di Pembatasan.Sample
Contoh sederhana
Cara membuat info JavaMengambil properti di kode Java Anda
Dengan elemen <Property>
kebijakan, Anda dapat menentukan pasangan nama/nilai yang dapat diambil saat runtime dalam kode Java Anda. Untuk contoh penggunaan yang menggunakan
properti, lihat Cara menggunakan properti
di info Java.
Gunakan atribut name
elemen <Property> untuk menentukan nama yang akan digunakan untuk mengakses properti dari kode Java. Nilai elemen <Property>
(nilai antara tag pembuka dan penutup) adalah nilai yang akan diterima oleh kode Java. Nilai ini harus berupa string; Anda tidak dapat mereferensikan variabel flow untuk mendapatkan
nilai tersebut.
- Konfigurasikan properti. Di sini, nilai propertinya 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, terapkan konstruktor berikut pada implementasi class Execution
seperti berikut:
public class MyJavaCallout implements Execution{ public MyJavaCallout(Map<string, string> props){ // Extract property values from map. } ... }
Menetapkan variabel flow dalam kode Java
Untuk deskripsi yang jelas tentang cara menetapkan variabel dalam konteks pesan (variabel flow) di kode Java Anda, lihat postingan Komunitas Apigee ini.
Referensi elemen
Referensi elemen menjelaskan elemen dan atribut kebijakan JavaInfo.
<JavaCallout name="MyJavaCalloutPolicy"> <ClassName>com.example.mypolicy.MyJavaCallout</ClassName> <ResourceURL>java://MyJavaCallout.jar</ResourceURL> </JavaCallout>
Atribut <JavaInfo>
<JavaCallout name="MyJavaCalloutPolicy" enabled="true" continueOnError="false" async="false" >
Tabel berikut menjelaskan atribut yang sama 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 Tetapkan ke |
false | Opsional |
enabled |
Tetapkan ke Tetapkan ke |
benar | Opsional |
async |
Atribut ini tidak digunakan lagi. |
false | Tidak digunakan lagi |
Elemen <DisplayName>
Selain atribut name
, beri label pada kebijakan
di editor proxy UI pengelolaan dengan nama bahasa natural yang berbeda.
<DisplayName>Policy Display Name</DisplayName>
Default |
T/A Jika Anda menghilangkan elemen ini, nilai atribut |
---|---|
Ketersediaan | Opsional |
Type | String |
Elemen <ClassName>
Menentukan nama class Java yang dijalankan saat kebijakan Java pemanggil berjalan. Class
harus disertakan dalam file JAR yang ditentukan oleh <ResourceURL>
. Lihat juga Cara membuat info Java.
<JavaCallout name="MyJavaCalloutPolicy"> <ResourceURL>java://MyJavaCallout.jar</ResourceURL> <ClassName>com.example.mypolicy.MyJavaCallout</ClassName> </JavaCallout>
Default: | T/A |
Kehadiran: | Wajib diisi |
Jenis: | String |
Elemen <Property>
Menentukan properti yang dapat Anda akses dari kode Java saat runtime. Anda harus menentukan nilai string literal untuk setiap properti; Anda tidak dapat mereferensikan variabel alur dalam elemen ini. Untuk contoh kerja yang menggunakan properti, lihat Cara menggunakan properti dalam info 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 diisi. |
Elemen<ResourceURL>
Elemen ini menentukan file Java JAR yang akan dijalankan saat kebijakan info Java berjalan.
Anda dapat menyimpan file ini dalam cakupan proxy API (di bawah
/apiproxy/resources/java
dalam paket proxy API atau di bagian Skrip
di panel Navigator editor proxy API), atau di 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 diisi |
Jenis: | String |
Referensi error
Bagian ini menjelaskan kode kesalahan dan pesan error yang dikembalikan, serta variabel kesalahan yang disetel oleh Edge saat kebijakan ini memicu error. Informasi ini penting untuk diketahui jika Anda mengembangkan aturan fault untuk menangani fault. Untuk mempelajari lebih lanjut, lihat Yang perlu Anda ketahui tentang error kebijakan dan Menangani kesalahan.
Error runtime
Error ini dapat terjadi saat kebijakan dijalankan.
Kode kesalahan | Status HTTP | Penyebab | Perbaiki |
---|---|---|---|
steps.javacallout.ExecutionError |
500 | Terjadi saat kode Java menampilkan pengecualian atau menampilkan null selama eksekusi kebijakan JavaInfo. | build |
Error deployment
Error ini dapat terjadi ketika proxy yang berisi kebijakan di-deploy.
Nama error | String kesalahan | Status HTTP | Terjadi saat |
---|---|---|---|
ResourceDoesNotExist |
Resource with name
[name] and type [type] does not exist |
T/A | File yang ditentukan dalam elemen <ResourceURL> tidak ada. |
JavaCalloutInstantiationFailed |
Failed to instantiate the JavaCallout Class [classname] |
T/A | File class yang ditentukan dalam elemen <ClassName> tidak ada dalam
jar. |
IncompatibleJavaVersion |
Failed to load java class [classname] definition due to - [reason] |
T/A | Lihat string kesalahan. Lihat juga Software yang didukung dan versi yang didukung. |
JavaClassNotFoundInJavaResource |
Failed to find the ClassName in java resource [jar_name] -
[class_name] |
T/A | Lihat string kesalahan. |
JavaClassDefinitionNotFound |
Failed to load java class [class_name] definition due to - [reason] |
T/A | Lihat string kesalahan. |
NoAppropriateConstructor |
No appropriate constructor found in JavaCallout class [class_name] |
T/A | Lihat string kesalahan. |
NoResourceForURL |
Could not locate a resource with URL [string] |
T/A | Lihat string kesalahan. |
Variabel kesalahan
Variabel ini ditetapkan saat kebijakan ini memicu error. Untuk informasi selengkapnya, lihat Yang perlu Anda ketahui tentang error kebijakan.
Variabel | Lokasi | Contoh |
---|---|---|
fault.name="fault_name" |
fault_name adalah nama fault, seperti yang tercantum pada tabel Error runtime di atas. Nama fault adalah bagian terakhir dari kode fault. | fault.name Matches "ExecutionError" |
javacallout.policy_name.failed |
policy_name adalah nama kebijakan yang ditentukan oleh pengguna yang melemparkan kesalahan. | javacallout.JC-GetUserData.failed = true |
Contoh respons error
{ "fault":{ "faultstring":"Failed to execute JavaCallout. [policy_name]", "detail":{ "errorcode":"javacallout.ExecutionError" } } }
Contoh aturan kesalahan
<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 dan men-deploynya dengan proxy, lihat Cara membuat info Java.
Batasan
Berikut adalah batasan yang perlu Anda pertimbangkan saat menulis Info Java:
- Sebagian besar panggilan sistem tidak diizinkan. Misalnya, Anda tidak dapat membuat operasi baca atau tulis sistem file internal.
- Akses ke jaringan melalui soket. Apigee membatasi akses ke alamat sitelocal, anylocal, loopback, dan linklocal.
- Keterangan tidak dapat memperoleh informasi tentang proses saat ini, daftar proses, atau pemakaian CPU/memori pada mesin. Meskipun beberapa panggilan tersebut mungkin berfungsi, panggilan tersebut tidak didukung dan dapat dinonaktifkan secara aktif kapan saja. Agar kompatibel dengan versi baru, Anda harus menghindari panggilan semacam itu dalam kode.
- Ketergantungan pada library Java yang disertakan dengan Apigee Edge tidak didukung. Library tersebut hanya untuk fungsi produk Edge, dan tidak ada jaminan bahwa library akan tersedia dari rilis ke rilis.
- Jangan gunakan
io.apigee
ataucom.apigee
sebagai nama paket di Java Info. Nama tersebut dicadangkan dan digunakan oleh modul Apigee lainnya.
Kemasan
Tempatkan JAR di proxy API pada /resources/java
. Jika Pemanggilan Java Anda bergantung pada library pihak ketiga tambahan yang dikemas sebagai file JAR independen, maka tempatkan juga file JAR tersebut di direktori /resources/java
untuk memastikan bahwa file tersebut dimuat dengan benar pada saat runtime.
Jika Anda menggunakan UI pengelolaan untuk membuat atau mengubah proxy, tambahkan resource baru dan
tentukan file JAR dependen tambahan. Jika ada beberapa JAR, cukup tambahkan JAR sebagai resource tambahan. Anda tidak perlu mengubah konfigurasi kebijakan untuk merujuk ke file JAR tambahan. Memasukkannya ke dalam /resources/java
sudah cukup.
Untuk informasi tentang mengupload Java JAR, lihat File resource.
Untuk contoh mendetail yang menunjukkan cara memaketkan dan men-deploy Info Java menggunakan Maven atau javac, lihat Cara membuat info Java.
Javadoc
Javadoc untuk menulis kode Info Java disertakan di sini di GitHub. Anda harus melakukan clone atau mendownload HTML ke sistem Anda, lalu membuka file index.html di browser.
Catatan penggunaan
- Kebijakan Pemanggilan Java tidak berisi kode yang sebenarnya. Sebagai gantinya, kebijakan Panggilan Java merujuk ke 'resource' Java dan menentukan Langkah dalam alur API tempat kode Java dieksekusi. Anda dapat
mengupload Java JAR melalui editor proxy UI Pengelolaan, atau Anda dapat menyertakannya dalam
direktori
/resources/java
dalam proxy API yang Anda kembangkan secara lokal. - Untuk operasi ringan, seperti panggilan API ke layanan jarak jauh, sebaiknya gunakan kebijakan ServiceInfo. Lihat kebijakan Info Layanan.
- Untuk interaksi yang relatif sederhana dengan konten pesan, seperti mengubah atau mengekstrak header, parameter, atau konten pesan HTTP, Apigee merekomendasikan penggunaan kebijakan JavaScript.
Topik terkait
- Untuk contoh terkait, lihat repositori java-cookbook.