Cara menangani error Java Callout

Anda melihat dokumentasi Apigee Edge.
Buka dokumentasi Apigee X.
info

Apa yang dimaksud dengan callout Java?

Jika Anda baru menggunakan callout Java, sebaiknya mulai dengan Cara membuat callout Java.

Menangani error dalam Callout Java

Saat menulis Callout Java, 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 Edge.

Mari kita bahas contoh Callout Java sederhana yang mengilustrasikan pola penanganan error kustom dasar. Contoh ini menampilkan pesan error kustom saat terjadi pengecualian. Contoh ini juga menempatkan stacktrace error ke dalam flow variable, yang dapat menjadi teknik proses debug yang praktis.

Mendownload project

Untuk mempermudah, Anda dapat mendownload project ini dari repositori api-platform-samples Apigee di GitHub.

  1. Download atau clone api-platform-samples ke sistem Anda.
  2. 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 Edge 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;
        }
    }
}


Mengompilasi kode dengan Maven

Project ini disiapkan agar Anda dapat mengompilasi dengan Maven. Jika Anda ingin menggunakan javac, kami juga akan menyertakan contohnya.

  1. Pastikan Anda telah menginstal Maven:
    mvn -version
  2. Jalankan skrip java-error/buildsetup.sh. Skrip ini menginstal dependensi JAR yang diperlukan di repo Maven lokal Anda.
  3. cd ke direktori java-error/callout.
  4. Jalankan Maven:
    mvn clean package
  5. Jika mau, verifikasi bahwa file JAR edge-custom-policy-java-error.jar telah disalin ke java-error/apiproxy/resources/java. Ini adalah lokasi yang diperlukan untuk file JAR yang ingin Anda deploy dengan proxy.

Mengompilasi dengan javac

Jika ingin menggunakan javac untuk mengompilasi kode, Anda dapat melakukan sesuatu yang mirip dengan berikut (dari direktori java-error). File JAR yang diperlukan disediakan untuk Anda di direktori java-error/lib.

  1. cd ke api-platform-samples/doc-samples/java-error.
  2. Pastikan Anda memiliki javac di jalur Anda.

    javac -version
  3. Jalankan perintah javac berikut:

    javac -d . -classpath ./lib/expressions-1.0.0.jar:./lib/message-flow-1.0.0.jar:. callout/src/main/java/JavaProperties.java
  4. Salin file JAR ke direktori apiproxy/resources/java. Ini adalah lokasi yang diperlukan untuk file JAR yang ingin Anda deploy dengan proxy.

    cp com/apigeesample/JavaProperties.class apiproxy/resources/java

Men-deploy dan memanggil proxy

Skrip deployment disediakan di direktori ./java-error. Namun, sebelum menjalankannya, Anda harus melakukan penyiapan singkat.

  1. cd ke api-platform-samples/doc-samples/java-error
  2. Jika belum melakukannya, buka file ../../setup/setenv.sh dan edit seperti yang ditunjukkan dengan informasi akun Apigee Anda: nama pengguna (alamat email yang terkait dengan akun Anda), nama organisasi, dan domain yang Anda gunakan untuk melakukan panggilan pengelolaan API. Misalnya, untuk cloud Edge, domainnya adalah https://api.enterprise.apigee.com; namun, domain Anda mungkin berbeda jika Anda menggunakan Edge Private Cloud.
  3. Simpan file setenv.sh.
  4. Jalankan skrip deployment:
    ./deploy.sh
  5. Jika deployment berhasil, jalankan skrip pemanggilan:
    ./invoke.sh

    Skrip pemanggilan memanggil perintah cURL yang terlihat seperti ini:

    curl  http://$org-$env.$api_domain/java-error

    Karena panggilan tidak menyertakan parameter kueri "name", kode Java akan menampilkan error runtime error. Proxy menampilkan pesan dan header ini:

  • Pesan error: Please specify a name parameter!
  • Header: ExceptionClass: java.lang.RuntimeException