คุณกำลังดูเอกสารประกอบของ 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 เพื่อให้ง่ายต่อการใช้งาน
- ดาวน์โหลดหรือโคลน api-platform-samples ลงในระบบ
- ในเทอร์มินัลหรือโปรแกรมแก้ไขโค้ดที่คุณเลือก ให้ไปที่
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 เราจะรวมตัวอย่างไว้ด้วย
- ตรวจสอบว่าคุณได้ติดตั้ง Maven แล้วโดยทำดังนี้
mvn -version
- เรียกใช้สคริปต์
java-error/buildsetup.shสคริปต์นี้จะติดตั้งการขึ้นต่อกันของ JAR ที่จำเป็น ในที่เก็บ Maven ในเครื่อง - เปลี่ยนไดเรกทอรีเป็น
java-error/callout - เรียกใช้ Maven โดยทำดังนี้
mvn clean package
- หากต้องการ ให้ตรวจสอบว่าไฟล์ JAR
edge-custom-policy-java-error.jarถูก คัดลอกไปยังjava-error/apiproxy/resources/javaแล้ว ซึ่งเป็นตำแหน่งที่จำเป็นสำหรับ ไฟล์ JAR ที่คุณต้องการนำไปใช้กับพร็อกซี
คอมไพล์ด้วย javac
หากต้องการใช้ javac เพื่อคอมไพล์โค้ด คุณสามารถทำสิ่งที่คล้ายกับ
ตัวอย่างต่อไปนี้ (จากไดเรกทอรี java-error) เราได้จัดเตรียมไฟล์ JAR ที่จำเป็นไว้ให้คุณใน
ไดเรกทอรี java-error/lib
- เปลี่ยนไดเรกทอรีเป็น
api-platform-samples/doc-samples/java-error - ตรวจสอบว่าคุณมี javac ในเส้นทาง
javac -version
- เรียกใช้คำสั่ง javac ต่อไปนี้
javac -d . -classpath ./lib/expressions-1.0.0.jar:./lib/message-flow-1.0.0.jar:. callout/src/main/java/JavaProperties.java
- คัดลอกไฟล์ JAR ไปยังไดเรกทอรี apiproxy/resources/java ซึ่งเป็นตำแหน่งที่จำเป็น
สำหรับไฟล์ JAR ที่คุณต้องการนำไปใช้กับพร็อกซี
cp com/apigeesample/JavaProperties.class apiproxy/resources/java
นำไปใช้และเรียกพร็อกซี
เราได้จัดเตรียมสคริปต์การนำไปใช้ไว้ในไดเรกทอรี ./java-error แต่ก่อนที่จะดำเนินการ
คุณต้องทำการตั้งค่าอย่างรวดเร็ว
- เปลี่ยนไดเรกทอรีเป็น
api-platform-samples/doc-samples/java-error - หากยังไม่ได้ดำเนินการ ให้เปิดไฟล์
../../setup/setenv.shแล้วแก้ไข ตามที่ระบุด้วยข้อมูลบัญชี Apigee ได้แก่ ชื่อผู้ใช้ (อีเมลที่เชื่อมโยงกับบัญชี) ชื่อองค์กร และโดเมนที่คุณใช้เพื่อทำการเรียกการจัดการ API เช่น สำหรับ Edge Cloud โดเมนคือhttps://api.enterprise.apigee.comแต่โดเมนของคุณอาจแตกต่างออกไปหากคุณ ใช้ Edge Private Cloud - บันทึกไฟล์
setenv.sh - เรียกใช้สคริปต์การนำไปใช้โดยทำดังนี้
./deploy.sh
- หากการนำไปใช้สำเร็จ ให้เรียกใช้สคริปต์การเรียกโดยทำดังนี้
./invoke.sh
สคริปต์การเรียกจะเรียกใช้คำสั่ง cURL ที่มีลักษณะดังนี้
curl http://$org-$env.$api_domain/java-error
เนื่องจากการเรียกไม่มีพารามิเตอร์การค้นหา "name" โค้ด Java จึงแสดงข้อผิดพลาดรันไทม์ พร็อกซีจะแสดงข้อความและส่วนหัวต่อไปนี้
- ข้อความแสดงข้อผิดพลาด:
Please specify a name parameter! - ส่วนหัว:
ExceptionClass: java.lang.RuntimeException