วิธีจัดการข้อผิดพลาดของการเรียก Java

คุณกำลังดูเอกสารประกอบของ Apigee Edge
ไปที่ เอกสารประกอบของ Apigee X
info

Java Callout คืออะไร

หากเพิ่งเริ่มใช้ Java Callout เราขอแนะนำให้คุณเริ่มต้นด้วยหัวข้อ วิธีสร้าง Java Callout

การจัดการข้อผิดพลาดใน Java Callout

เมื่อเขียน Java Callout คุณอาจต้องการจัดการข้อผิดพลาดที่กำหนดเองในโค้ด Java เช่น คุณอาจต้องการแสดงข้อความและส่วนหัวของข้อผิดพลาดที่กำหนดเอง และ/หรือตั้งค่าตัวแปรโฟลว์ด้วย ข้อมูลข้อผิดพลาดในโฟลว์พร็อกซีบน Edge

มาดูตัวอย่าง Java Callout อย่างง่ายที่แสดงรูปแบบการจัดการข้อผิดพลาดพื้นฐานที่กำหนดเอง ตัวอย่างจะแสดงข้อความแสดงข้อผิดพลาดที่กำหนดเองเมื่อเกิดข้อยกเว้น นอกจากนี้ยังวาง Stacktrace ของข้อผิดพลาดลงในตัวแปรโฟลว์ ซึ่งอาจเป็นเทคนิคการแก้ไขข้อบกพร่องที่มีประโยชน์

ดาวน์โหลดโปรเจ็กต์

คุณสามารถดาวน์โหลดโปรเจ็กต์นี้จากที่เก็บ api-platform-samples ของ Apigee ใน GitHub เพื่อให้ง่ายต่อการใช้งาน

  1. ดาวน์โหลดหรือโคลน api-platform-samples ลงในระบบ
  2. ในเทอร์มินัลหรือโปรแกรมแก้ไขโค้ดที่คุณเลือก ให้ไปที่ api-platform-samples/doc-samples/java-error โปรเจ็กต์

โค้ด Java ตัวอย่าง

รูปแบบการจัดการข้อผิดพลาดนั้นตรงไปตรงมา คุณสามารถตั้งค่าตัวแปรโฟลว์ในบริบทโฟลว์ Edge ปัจจุบันด้วยเมธอด messageContext.setVariable() หากต้องการแสดงข้อมูลข้อผิดพลาดที่กำหนดเอง ให้สร้างอินสแตนซ์ ExecutionResult แล้วเรียกใช้เมธอดในอินสแตนซ์ดังกล่าวเพื่อ ตั้งค่าการตอบกลับและส่วนหัวของข้อผิดพลาด

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;
        }
    }
}


คอมไพล์โค้ดด้วย Maven

โปรเจ็กต์ได้รับการตั้งค่าเพื่อให้คุณคอมไพล์ด้วย Maven ได้ หากต้องการใช้ javac เราจะรวมตัวอย่างไว้ด้วย

  1. ตรวจสอบว่าคุณได้ติดตั้ง Maven แล้วโดยทำดังนี้
    mvn -version
  2. เรียกใช้สคริปต์ java-error/buildsetup.sh สคริปต์นี้จะติดตั้งการขึ้นต่อกันของ JAR ที่จำเป็น ในที่เก็บ Maven ในเครื่อง
  3. เปลี่ยนไดเรกทอรีเป็น java-error/callout
  4. เรียกใช้ Maven โดยทำดังนี้
    mvn clean package
  5. หากต้องการ ให้ตรวจสอบว่าไฟล์ JAR edge-custom-policy-java-error.jar ถูก คัดลอกไปยัง java-error/apiproxy/resources/java แล้ว ซึ่งเป็นตำแหน่งที่จำเป็นสำหรับ ไฟล์ JAR ที่คุณต้องการนำไปใช้กับพร็อกซี

คอมไพล์ด้วย javac

หากต้องการใช้ javac เพื่อคอมไพล์โค้ด คุณสามารถทำสิ่งที่คล้ายกับ ตัวอย่างต่อไปนี้ (จากไดเรกทอรี java-error) เราได้จัดเตรียมไฟล์ JAR ที่จำเป็นไว้ให้คุณใน ไดเรกทอรี java-error/lib

  1. เปลี่ยนไดเรกทอรีเป็น api-platform-samples/doc-samples/java-error
  2. ตรวจสอบว่าคุณมี javac ในเส้นทาง

    javac -version
  3. เรียกใช้คำสั่ง javac ต่อไปนี้

    javac -d . -classpath ./lib/expressions-1.0.0.jar:./lib/message-flow-1.0.0.jar:. callout/src/main/java/JavaProperties.java
  4. คัดลอกไฟล์ JAR ไปยังไดเรกทอรี apiproxy/resources/java ซึ่งเป็นตำแหน่งที่จำเป็น สำหรับไฟล์ JAR ที่คุณต้องการนำไปใช้กับพร็อกซี

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

นำไปใช้และเรียกพร็อกซี

เราได้จัดเตรียมสคริปต์การนำไปใช้ไว้ในไดเรกทอรี ./java-error แต่ก่อนที่จะดำเนินการ คุณต้องทำการตั้งค่าอย่างรวดเร็ว

  1. เปลี่ยนไดเรกทอรีเป็น api-platform-samples/doc-samples/java-error
  2. หากยังไม่ได้ดำเนินการ ให้เปิดไฟล์ ../../setup/setenv.sh แล้วแก้ไข ตามที่ระบุด้วยข้อมูลบัญชี Apigee ได้แก่ ชื่อผู้ใช้ (อีเมลที่เชื่อมโยงกับบัญชี) ชื่อองค์กร และโดเมนที่คุณใช้เพื่อทำการเรียกการจัดการ API เช่น สำหรับ Edge Cloud โดเมนคือ https://api.enterprise.apigee.com แต่โดเมนของคุณอาจแตกต่างออกไปหากคุณ ใช้ Edge Private Cloud
  3. บันทึกไฟล์ setenv.sh
  4. เรียกใช้สคริปต์การนำไปใช้โดยทำดังนี้
    ./deploy.sh
  5. หากการนำไปใช้สำเร็จ ให้เรียกใช้สคริปต์การเรียกโดยทำดังนี้
    ./invoke.sh

    สคริปต์การเรียกจะเรียกใช้คำสั่ง cURL ที่มีลักษณะดังนี้

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

    เนื่องจากการเรียกไม่มีพารามิเตอร์การค้นหา "name" โค้ด Java จึงแสดงข้อผิดพลาดรันไทม์ พร็อกซีจะแสดงข้อความและส่วนหัวต่อไปนี้

  • ข้อความแสดงข้อผิดพลาด: Please specify a name parameter!
  • ส่วนหัว: ExceptionClass: java.lang.RuntimeException