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

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

ข้อความเสริมของ Java คืออะไร

หากยังไม่เคยใช้ไฮไลต์ Java เราขอแนะนำให้เริ่มต้นด้วยวิธีสร้างไฮไลต์ Java

การจัดการข้อผิดพลาดในคำขอราคาเสนอ Java

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

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

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

คุณดาวน์โหลดโปรเจ็กต์นี้ได้จากที่เก็บ 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 สคริปต์นี้จะติดตั้งทรัพยากร Dependency ของ JAR ที่จำเป็นในที่เก็บ Maven ในเครื่อง
  3. cd ลงในไดเรกทอรี 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. cd เป็น 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. cd เป็น 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