Halaman ini berlaku untuk Apigee dan Apigee Hybrid.
Lihat dokumentasi
Apigee Edge.
Apa yang dimaksud dengan Panggilan Java?
Jika Anda baru menggunakan JavaCallout, sebaiknya mulai dengan Cara membuat Java callout.
Menangani error dalam kebijakan JavaCallout
Saat menulis kebijakan JavaCallout, Anda mungkin ingin melakukan penanganan error kustom dalam kode Java. Misalnya, Anda mungkin ingin menampilkan pesan dan header error kustom dan/atau menetapkan variabel alur dengan informasi error dalam alur proxy di Apigee.
Mari kita bahas contoh kebijakan JavaCallout sederhana yang menggambarkan pola penanganan error kustom dasar. Contoh ini menampilkan pesan error kustom saat terjadi pengecualian. Hal ini juga menempatkan stacktrace error ke dalam variabel alur, yang dapat menjadi teknik debug yang berguna.
Mendownload project
Untuk mempermudah, Anda dapat mendownload project ini dari repositori api-platform-samples Apigee di GitHub.
- Download atau clone api-platform-samples ke sistem Anda.
- Di terminal atau editor kode pilihan Anda, buka project
api-platform-samples/doc-samples/java-error
.
Contoh kode Java
Pola penanganan error sangat mudah. Anda dapat menetapkan variabel alur dalam konteks alur Apigee saat ini dengan metode messageContext.setVariable()
. Untuk menampilkan informasi error kustom, buat instance ExecutionResult
dan panggil metode di dalamnya untuk menetapkan respons dan header error.
package com.apigeesample; import com.apigee.flow.execution.ExecutionContext; import com.apigee.flow.execution.ExecutionResult; import com.apigee.flow.execution.spi.Execution; import com.apigee.flow.message.MessageContext; import com.apigee.flow.execution.Action; import org.apache.commons.lang.exception.ExceptionUtils; public class JavaError implements Execution { public ExecutionResult execute(MessageContext messageContext, ExecutionContext executionContext) { try { String name = messageContext.getMessage().getHeader("username"); if (name != null && name.length()>0) { messageContext.getMessage().setContent("Hello, " + name + "!"); messageContext.getMessage().removeHeader("username"); } else { throw new RuntimeException("Please specify a name parameter!"); } return ExecutionResult.SUCCESS; } catch (RuntimeException ex) { ExecutionResult executionResult = new ExecutionResult(false, Action.ABORT); //--Returns custom error message and header executionResult.setErrorResponse(ex.getMessage()); executionResult.addErrorResponseHeader("ExceptionClass", ex.getClass().getName()); //--Set flow variables -- may be useful for debugging. messageContext.setVariable("JAVA_ERROR", ex.getMessage()); messageContext.setVariable("JAVA_STACKTRACE", ExceptionUtils.getStackTrace(ex)); return executionResult; } } }
Kompilasi kode Anda dengan Maven
Project disiapkan agar Anda dapat mengompilasi dengan Maven. Jika Anda ingin menggunakan
javac
, kami juga akan menyertakan contoh.
- Pastikan Anda telah menginstal Maven:
mvn -version
- Jalankan skrip
java-error/buildsetup.sh
. Skrip ini menginstal dependensi JAR yang diperlukan di repositori Maven lokal Anda. - cd ke direktori
java-error/callout
. - Jalankan Maven:
mvn clean package
- Jika Anda ingin, verifikasi bahwa file JAR
edge-custom-policy-java-error.jar
telah disalin kejava-error/apiproxy/resources/java
. Ini adalah lokasi yang diperlukan untuk file JAR yang ingin Anda deploy dengan proxy.
Men-deploy dan memanggil proxy
Skrip deployment disediakan di direktori ./java-error
. Namun, sebelum menjalankannya,
Anda harus melakukan penyiapan cepat.
- cd ke
api-platform-samples/doc-samples/java-error
- Cara paling sederhana untuk men-deploy proxy adalah dengan mengemasnya dalam file zip dan mengupload paket proxy ke lingkungan di organisasi Apigee Anda. Lihat Membuat proxy API. Pastikan untuk menggunakan opsi Upload Proxy Bundle. Lihat juga Tips dan trik untuk mengupload proxy API dalam paket proxy di komunitas Apigee.
- Setelah proxy di-deploy, coba panggil:
curl https://$HOSTNAME/java-error
Karena panggilan tidak menyertakan parameter kueri "name", kode Java akan memunculkan error runtime. Proxy menampilkan pesan dan header ini:
- Pesan error:
Please specify a name parameter!
- Header:
ExceptionClass: java.lang.RuntimeException