Anda sedang melihat dokumentasi Apigee Edge.
Buka
dokumentasi Apigee X. info
Apa
Memungkinkan Anda menggunakan Java untuk mengimplementasikan perilaku kustom yang tidak otomatis disertakan oleh kebijakan Apigee. Dalam kode Java, Anda dapat mengakses properti pesan (header, parameter kueri, konten) dan variabel alur dalam alur proxy. Jika Anda baru mulai menggunakan kebijakan ini, lihat Cara membuat info Java.
Untuk versi Java yang didukung, lihat Software yang didukung dan versi yang didukung.
Jika
Untuk panduan, lihat "Kapan saya harus menggunakan info Java?" di Cara membuat info Java.
Tentang
Kebijakan Pemanggilan Java memungkinkan Anda mendapatkan dan menetapkan variabel alur, menjalankan logika kustom dan melakukan penanganan error, mengekstrak data dari permintaan atau respons, dan lainnya. Kebijakan ini memungkinkan Anda menerapkan perilaku khusus yang tidak tercakup dalam kebijakan Edge standar lainnya.
Anda bisa memaketkan aplikasi Java dengan paket file JAR apa pun yang Anda butuhkan. Perhatikan bahwa ada beberapa batasan pada hal yang dapat Anda lakukan dengan Info Java. Hal tersebut tercantum di bawah dalam Pembatasan.Contoh
Contoh sederhana
Cara membuat info JavaMengambil properti dalam kode Java
Elemen <Property>
kebijakan memungkinkan Anda menentukan pasangan nama/nilai yang dapat diambil saat runtime dalam kode Java Anda. Untuk contoh kerja yang menggunakan properti, lihat Cara menggunakan properti dalam 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 harus berupa string; Anda tidak dapat mereferensikan variabel flow untuk mendapatkan
nilai tersebut.
- 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, implementasikan konstruktor berikut pada implementasi class Eksekusi sebagai 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) dalam kode Java, 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>
Atribut <JavaCallout>
<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 Atau, gunakan elemen |
T/A | Wajib |
continueOnError |
Setel ke Setel ke |
false | Opsional |
enabled |
Setel ke Setel ke |
true | Opsional |
async |
Atribut ini sudah tidak digunakan lagi. |
false | Tidak digunakan lagi |
Elemen <DisplayName>
Gunakan selain atribut name
untuk memberi label kebijakan di
editor proxy UI pengelolaan 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 |
Elemen <ClassName>
Menentukan nama class Java yang dijalankan saat kebijakan Info Java dijalankan. Class
tersebut 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 |
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 |
---|---|---|---|
name |
Menentukan nama properti. |
T/A | Wajib. |
Elemen <ResourceURL>
Elemen ini menentukan file JAR Java yang akan dieksekusi saat kebijakan info Java berjalan.
Anda dapat menyimpan file ini di cakupan proxy API (pada
/apiproxy/resources/java
di paket proxy API atau di bagian Skrip pada
panel Navigator editor proxy API), atau di cakupan organisasi atau lingkungan untuk digunakan kembali
di beberapa proxy API, seperti 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
Bagian ini menjelaskan kode kesalahan dan pesan error yang ditampilkan dan variabel kesalahan yang disetel oleh Edge saat kebijakan ini memicu error. Informasi ini penting untuk diketahui apakah Anda mengembangkan aturan kesalahan untuk menangani kesalahan. Untuk mempelajari lebih lanjut, lihat Yang perlu Anda ketahui tentang error kebijakan dan Menangani kesalahan.
Error runtime
Error ini dapat terjadi saat kebijakan dieksekusi.
Kode kesalahan | Status HTTP | Penyebab | Perbaiki |
---|---|---|---|
steps.javacallout.ExecutionError |
500 | Terjadi saat kode Java menampilkan pengecualian atau menampilkan null selama eksekusi kebijakan JavaCallout. | build |
Error saat deployment
Error ini dapat terjadi saat 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 | Dari mana | Contoh |
---|---|---|
fault.name="fault_name" |
fault_name adalah nama kesalahan, seperti yang tercantum dalam tabel Error runtime di atas. Nama kesalahan adalah bagian terakhir dari kode kesalahan. | fault.name Matches "ExecutionError" |
javacallout.policy_name.failed |
policy_name adalah nama kebijakan yang ditentukan pengguna yang menampilkan 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-deploy-nya 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 sistem file internal melakukan pembacaan atau penulisan.
- Akses ke jaringan melalui soket. Apigee membatasi akses ke alamat sitelocal, anylocal, loopback, dan linklocal.
- Info tidak bisa mendapatkan 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. Untuk kompatibilitas maju, sebaiknya hindari membuat panggilan semacam itu dalam kode Anda.
- 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 Info Java. Nama-nama tersebut dicadangkan dan digunakan oleh modul Apigee lainnya.
Kemasan
Tempatkan JAR dalam proxy API di bawah /resources/java
. Jika Java Callout Anda mengandalkan
library pihak ketiga tambahan yang dikemas sebagai file JAR independen, tempatkan juga file JAR tersebut
di direktori /resources/java
untuk memastikan file tersebut dimuat dengan benar pada
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 sebagai
resource tambahan. Anda tidak perlu mengubah konfigurasi kebijakan untuk merujuk ke file JAR tambahan. Memasukkannya ke dalam /resources/java
sudah cukup.
Untuk mengetahui informasi tentang cara mengupload JAR Java, lihat File resource.
Untuk contoh mendetail yang menunjukkan cara memaketkan dan men-deploy Info Java menggunakan Maven atau javac, lihat Cara membuat pemanggilan Java.
Javadoc
Javadoc untuk menulis kode Info Java disertakan di sini di GitHub. Anda harus meng-clone atau mendownload HTML ke sistem, lalu membuka file index.html di browser.
Catatan penggunaan
- Kebijakan Info Java tidak berisi kode aktual. Sebagai gantinya, kebijakan Pemanggilan Java mereferensikan 'resource' Java dan menentukan Langkah dalam alur API tempat kode Java dieksekusi. Anda dapat
mengupload JAR Java melalui editor proxy UI Pengelolaan, atau 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 ServiceCallout. Lihat kebijakan Panggilan Layanan.
- Untuk interaksi yang relatif sederhana dengan konten pesan, seperti memodifikasi atau mengekstrak header, parameter, atau konten pesan HTTP, Apigee merekomendasikan penggunaan kebijakan JavaScript.
Topik terkait
- Untuk contoh terkait, lihat repositori java-cookbook.