คุณกำลังดูเอกสารประกอบของ Apigee Edge
ไปที่เอกสารประกอบของ
Apigee X info
![]()
อะไร
ช่วยให้คุณใช้ Java เพื่อใช้ลักษณะการทำงานที่กำหนดเองซึ่งนโยบาย Apigee ไม่ได้รวมไว้ตั้งแต่แรกได้ ในโค้ด Java คุณสามารถเข้าถึงพร็อพเพอร์ตี้ของข้อความ (ส่วนหัว พารามิเตอร์การค้นหา เนื้อหา) และตัวแปรโฟลว์ในโฟลว์พร็อกซี หากเพิ่งเริ่มใช้นโยบายนี้ โปรดดูวิธีสร้าง การเรียกใช้ Java
ดูเวอร์ชัน Java ที่รองรับได้ที่ซอฟต์แวร์ที่รองรับและเวอร์ชันที่รองรับ
กำหนดเวลา
ดูหลักเกณฑ์ได้ที่ "ฉันควรใช้ Java Callout เมื่อใด" ในวิธีสร้าง Java Callout
เกี่ยวกับ
นโยบาย Java Callout ช่วยให้คุณรับและตั้งค่าตัวแปรโฟลว์ เรียกใช้ตรรกะที่กำหนดเอง และดำเนินการ การจัดการข้อผิดพลาด ดึงข้อมูลจากคำขอหรือการตอบกลับ และอื่นๆ นโยบายนี้ช่วยให้คุณ ใช้ลักษณะการทำงานที่กำหนดเองซึ่งนโยบาย Edge มาตรฐานอื่นๆ ไม่ครอบคลุม
คุณสามารถแพ็กเกจแอปพลิเคชัน Java ด้วยไฟล์ JAR ของแพ็กเกจที่ต้องการได้ โปรดทราบ ว่ามีข้อจำกัดบางประการเกี่ยวกับสิ่งที่คุณทำได้ด้วย Java Callout โดยจะแสดงไว้ด้านล่าง ในส่วนข้อจำกัดตัวอย่าง
ตัวอย่างง่ายๆ
วิธีสร้าง Callout ของ Javaดึงข้อมูลพร็อพเพอร์ตี้ในโค้ด Java
องค์ประกอบ <Property> ของนโยบายช่วยให้คุณระบุคู่ชื่อ/ค่า
ที่เรียกใช้ได้ในโค้ด Java ดูตัวอย่างการทำงานที่ใช้พร็อพเพอร์ตี้ได้ที่วิธีใช้พร็อพเพอร์ตี้
ในการเรียกใช้ Java
ใช้แอตทริบิวต์ name ขององค์ประกอบ <Property> เพื่อระบุชื่อที่จะใช้เข้าถึงพร็อพเพอร์ตี้จากโค้ด Java ค่าขององค์ประกอบ <Property> (ค่าระหว่างแท็กเปิดและปิด) คือค่าที่โค้ด Java จะได้รับ ค่าต้องเป็นสตริง คุณจะอ้างอิงตัวแปรโฟลว์เพื่อรับค่าไม่ได้
- กำหนดค่าพร็อพเพอร์ตี้ ในที่นี้ ค่าพร็อพเพอร์ตี้คือชื่อตัวแปร
response.status.code<JavaCallout async="false" continueOnError="false" enabled="true" name="JavaCallout"> <DisplayName>JavaCallout</DisplayName> <ClassName>com.example.mypolicy.MyJavaCallout</ClassName> <ResourceURL>java://MyJavaCallout.jar</ResourceURL> <Properties> <Property name="source">response.status.code</Property> </Properties> </Javascript>
- ในโค้ด Java ให้ใช้ตัวสร้างต่อไปนี้ในการติดตั้งใช้งานคลาส Execution
ดังนี้
public class MyJavaCallout implements Execution{ public MyJavaCallout(Map<string, string> props){ // Extract property values from map. } ... }
ตั้งค่าตัวแปรโฟลว์ในโค้ด Java
ดูคำอธิบายที่ชัดเจนเกี่ยวกับวิธีกำหนดตัวแปรในบริบทของข้อความ (ตัวแปรโฟลว์) ใน โค้ด Java ได้ที่โพสต์ในชุมชน Apigee นี้
การอ้างอิงองค์ประกอบ
การอ้างอิงองค์ประกอบจะอธิบายองค์ประกอบและแอตทริบิวต์ของนโยบาย JavaCallout
<JavaCallout name="MyJavaCalloutPolicy"> <ClassName>com.example.mypolicy.MyJavaCallout</ClassName> <ResourceURL>java://MyJavaCallout.jar</ResourceURL> </JavaCallout>
แอตทริบิวต์ <JavaCallout>
<JavaCallout name="MyJavaCalloutPolicy" enabled="true" continueOnError="false" async="false" >
ตารางต่อไปนี้อธิบายแอตทริบิวต์ทั่วไปในองค์ประกอบระดับบนสุดของนโยบายทั้งหมด
| แอตทริบิวต์ | คำอธิบาย | ค่าเริ่มต้น | การมีบุคคลอยู่ |
|---|---|---|---|
name |
ชื่อภายในของนโยบาย ค่าของแอตทริบิวต์ (ไม่บังคับ) ใช้องค์ประกอบ |
ไม่มี | ต้องระบุ |
continueOnError |
ตั้งค่าเป็น ตั้งค่าเป็น |
เท็จ | ไม่บังคับ |
enabled |
ตั้งค่าเป็น ตั้งค่าเป็น |
จริง | ไม่บังคับ |
async |
แอตทริบิวต์นี้เลิกใช้งานแล้ว |
เท็จ | เลิกใช้ |
<DisplayName> องค์ประกอบ
ใช้เพิ่มเติมจากแอตทริบิวต์ name เพื่อติดป้ายกำกับนโยบายใน
เครื่องมือแก้ไขพร็อกซี UI การจัดการด้วยชื่อที่เป็นภาษาธรรมชาติต่างกัน
<DisplayName>Policy Display Name</DisplayName>
| ค่าเริ่มต้น |
ไม่มี หากไม่ใส่องค์ประกอบนี้ ค่าของแอตทริบิวต์ |
|---|---|
| การมีบุคคลอยู่ | ไม่บังคับ |
| ประเภท | สตริง |
องค์ประกอบ <ClassName>
ระบุชื่อของคลาส Java ที่จะดำเนินการเมื่อนโยบาย Java Callout ทำงาน ต้องรวมคลาส
ไว้ในไฟล์ JAR ที่ระบุโดย <ResourceURL> ดูวิธีสร้าง Callout ของ Javaด้วย
<JavaCallout name="MyJavaCalloutPolicy"> <ResourceURL>java://MyJavaCallout.jar</ResourceURL> <ClassName>com.example.mypolicy.MyJavaCallout</ClassName> </JavaCallout>
| ค่าเริ่มต้น: | ไม่มี |
| การแสดงตน: | ต้องระบุ |
| ประเภท: | สตริง |
องค์ประกอบ <Property>
ระบุพร็อพเพอร์ตี้ที่คุณเข้าถึงได้จากโค้ด Java ในรันไทม์ คุณต้องระบุค่าสตริงตามตัวอักษร สำหรับแต่ละพร็อพเพอร์ตี้ คุณจะอ้างอิงตัวแปรโฟลว์ในองค์ประกอบนี้ไม่ได้ ดูตัวอย่างที่ใช้งานได้ซึ่งใช้พร็อพเพอร์ตี้ได้ที่วิธีใช้พร็อพเพอร์ตี้ใน Java Callout
<Properties> <Property name="propName">propertyValue</Property> </Properties>
| ค่าเริ่มต้น: | ไม่มี |
| การแสดงตน: | ไม่บังคับ |
| ประเภท: | สตริง |
Attributes
| แอตทริบิวต์ | คำอธิบาย | ค่าเริ่มต้น | การมีบุคคลอยู่ |
|---|---|---|---|
| ชื่อ |
ระบุชื่อพร็อพเพอร์ตี้ |
ไม่มี | ต้องระบุ |
องค์ประกอบ<ResourceURL>
องค์ประกอบนี้ระบุไฟล์ JAR ของ Java ที่จะดำเนินการเมื่อนโยบายการเรียกใช้ Java ทำงาน
คุณสามารถจัดเก็บไฟล์นี้ที่ขอบเขตพร็อกซี API (ในส่วน/apiproxy/resources/javaในชุดพร็อกซี API หรือในส่วนสคริปต์ของ
แผง Navigator ของเครื่องมือแก้ไขพร็อกซี API) หรือที่ขอบเขตองค์กรหรือสภาพแวดล้อมเพื่อนำกลับมาใช้ใหม่
ในพร็อกซี API หลายรายการตามที่อธิบายไว้ในไฟล์ทรัพยากร
<JavaCallout name="MyJavaCalloutPolicy"> <ResourceURL>java://MyJavaCallout.jar</ResourceURL> <ClassName>com.example.mypolicy.MyJavaCallout</ClassName> </JavaCallout>
| ค่าเริ่มต้น: | ไม่มี |
| การแสดงตน: | ต้องระบุ |
| ประเภท: | สตริง |
ข้อมูลอ้างอิงข้อผิดพลาด
ส่วนนี้จะอธิบายรหัสข้อผิดพลาดและข้อความแสดงข้อผิดพลาดที่แสดงกลับมา และตัวแปรข้อผิดพลาดที่ Edge ตั้งค่าไว้เมื่อนโยบายนี้ทริกเกอร์ข้อผิดพลาด ข้อมูลนี้มีความสำคัญต่อการทราบว่าคุณจะสร้างกฎความผิดพลาดเพื่อ จัดการกับข้อผิดพลาด หากต้องการเรียนรู้เพิ่มเติม โปรดดูที่สิ่งที่คุณจำเป็นต้องทราบ เกี่ยวกับข้อผิดพลาดของนโยบายและการจัดการ ข้อผิดพลาด
ข้อผิดพลาดเกี่ยวกับรันไทม์
ข้อผิดพลาดเหล่านี้อาจเกิดขึ้นเมื่อนโยบายทำงาน
| รหัสข้อผิดพลาด | สถานะ HTTP | สาเหตุ | แก้ไข |
|---|---|---|---|
steps.javacallout.ExecutionError |
500 | เกิดขึ้นเมื่อโค้ด Java ส่งข้อยกเว้นหรือแสดงผลเป็น Null ในระหว่างการบังคับใช้นโยบาย JavaScript | build |
ข้อผิดพลาดในการทำให้ใช้งานได้
ข้อผิดพลาดเหล่านี้อาจเกิดขึ้นเมื่อมีการทำให้พร็อกซีที่มีนโยบายใช้งานได้
| ชื่อข้อผิดพลาด | สตริงข้อผิดพลาด | สถานะ HTTP | เกิดขึ้นเมื่อ |
|---|---|---|---|
ResourceDoesNotExist |
Resource with name
[name] and type [type] does not exist |
ไม่มี | ไม่มีไฟล์ที่ระบุในองค์ประกอบ <ResourceURL> |
JavaCalloutInstantiationFailed |
Failed to instantiate the JavaCallout Class [classname] |
ไม่มี | ไฟล์คลาสที่ระบุในองค์ประกอบ <ClassName> ไม่ได้อยู่ใน
โหล |
IncompatibleJavaVersion |
Failed to load java class [classname] definition due to - [reason] |
ไม่มี | ดูสตริงข้อผิดพลาด ดูเพิ่มเติมที่รองรับ ซอฟต์แวร์และเวอร์ชันที่รองรับ |
JavaClassNotFoundInJavaResource |
Failed to find the ClassName in java resource [jar_name] -
[class_name] |
ไม่มี | ดูสตริงข้อผิดพลาด |
JavaClassDefinitionNotFound |
Failed to load java class [class_name] definition due to - [reason] |
ไม่มี | ดูสตริงข้อผิดพลาด |
NoAppropriateConstructor |
No appropriate constructor found in JavaCallout class [class_name] |
ไม่มี | ดูสตริงข้อผิดพลาด |
NoResourceForURL |
Could not locate a resource with URL [string] |
ไม่มี | ดูสตริงข้อผิดพลาด |
ตัวแปรความผิดพลาด
ระบบจะตั้งค่าตัวแปรเหล่านี้เมื่อนโยบายนี้ทำให้เกิดข้อผิดพลาด โปรดดูข้อมูลเพิ่มเติมที่หัวข้อสิ่งที่คุณจำเป็นต้องทราบ เกี่ยวกับข้อผิดพลาดของนโยบาย
| ตัวแปร | สถานที่ | ตัวอย่าง |
|---|---|---|
fault.name="fault_name" |
fault_name คือชื่อของข้อผิดพลาดตามที่ระบุไว้ในตารางข้อผิดพลาดรันไทม์ด้านบน ชื่อข้อผิดพลาดคือส่วนสุดท้ายของรหัสข้อผิดพลาด | fault.name Matches "ExecutionError" |
javacallout.policy_name.failed |
policy_name คือชื่อที่ผู้ใช้ระบุของนโยบายที่เป็นสาเหตุของข้อผิดพลาด | javacallout.JC-GetUserData.failed = true |
ตัวอย่างการตอบสนองข้อผิดพลาด
{ "fault":{ "faultstring":"Failed to execute JavaCallout. [policy_name]", "detail":{ "errorcode":"javacallout.ExecutionError" } } }
ตัวอย่างกฎข้อผิดพลาด
<FaultRule name="JavaCalloutFailed"> <Step> <Name>AM-JavaCalloutError</Name> </Step> <Condition>(fault.name Matches "ExecutionError") </Condition> </FaultRule>
สคีมา
การคอมไพล์และการทำให้ใช้งานได้
ดูรายละเอียดเกี่ยวกับวิธีคอมไพล์โค้ด Java ที่กำหนดเองและติดตั้งใช้งานกับพร็อกซีได้ที่วิธีสร้าง Callout ของ Java
ข้อจำกัด
ข้อจำกัดที่คุณต้องพิจารณาเมื่อเขียน Java Callout มีดังนี้
- ไม่อนุญาตให้ใช้การเรียกของระบบส่วนใหญ่ เช่น คุณไม่สามารถอ่านหรือเขียนระบบไฟล์ภายในได้
- เข้าถึงเครือข่ายผ่านซ็อกเก็ต Apigee จำกัดการเข้าถึงที่อยู่ sitelocal, anylocal, loopback และ linklocal
- ข้อความไฮไลต์ไม่สามารถรับข้อมูลเกี่ยวกับกระบวนการปัจจุบัน รายการกระบวนการ หรือ การใช้งาน CPU/หน่วยความจำในเครื่อง แม้ว่าการโทรบางอย่างอาจใช้งานได้ แต่เราไม่รองรับการโทรดังกล่าวและอาจปิดใช้ได้ทุกเมื่อ คุณควรหลีกเลี่ยงการเรียกใช้ดังกล่าวในโค้ดเพื่อความเข้ากันได้ในอนาคต
- ระบบไม่รองรับการใช้ไลบรารี Java ที่รวมอยู่ใน Apigee Edge ไลบรารีเหล่านั้น มีไว้สำหรับฟังก์ชันการทำงานของผลิตภัณฑ์ Edge เท่านั้น และไม่มีการรับประกันว่าไลบรารีจะ พร้อมใช้งานตั้งแต่รุ่นแรกจนถึงรุ่นล่าสุด
- อย่าใช้
io.apigeeหรือcom.apigeeเป็นชื่อแพ็กเกจใน Java Callouts ชื่อเหล่านั้นสงวนไว้และใช้โดยโมดูล Apigee อื่นๆ
บรรจุภัณฑ์
วาง JAR ในพร็อกซี API ภายใต้ /resources/java หาก Java Callout ของคุณต้องใช้ไลบรารีเพิ่มเติมของบุคคลที่สามซึ่งแพ็กเกจเป็นไฟล์ JAR แยกต่างหาก ให้วางไฟล์ JAR เหล่านั้นไว้ในไดเรกทอรี /resources/java ด้วยเพื่อให้แน่ใจว่าระบบจะโหลดไฟล์อย่างถูกต้องในรันไทม์
หากคุณใช้ UI การจัดการเพื่อสร้างหรือแก้ไขพร็อกซี ให้เพิ่มทรัพยากรใหม่และ
ระบุไฟล์ JAR ที่ขึ้นต่อกันเพิ่มเติม หากมี JAR หลายรายการ ให้เพิ่มเป็น
ทรัพยากรเพิ่มเติม คุณไม่จำเป็นต้องแก้ไขการกำหนดค่านโยบายเพื่ออ้างอิงไฟล์ JAR เพิ่มเติม
การใส่ไว้ใน /resources/java ก็เพียงพอแล้ว
ดูข้อมูลเกี่ยวกับการอัปโหลด JAR ของ Java ได้ที่ไฟล์ทรัพยากร
ดูตัวอย่างโดยละเอียดที่แสดงวิธีแพ็กเกจและทำให้ Java Callout ใช้งานได้โดยใช้ Maven หรือ javac ได้ที่วิธีสร้าง Java Callout
Javadoc
Javadoc สำหรับการเขียนโค้ด Java Callout จะรวมอยู่ที่นี่ใน GitHub คุณจะต้องโคลนหรือดาวน์โหลด HTML ไปยังระบบ จากนั้นเพียงเปิดไฟล์ index.html ในเบราว์เซอร์
หมายเหตุการใช้งาน
- นโยบาย Java Callout ไม่มีโค้ดจริง แต่ในทางกลับกัน นโยบาย Java Callout จะอ้างอิงถึง "ทรัพยากร" Java และกำหนดขั้นตอนในโฟลว์ API ที่โค้ด Java จะทำงาน คุณสามารถ
อัปโหลด JAR ของ Java ผ่านเครื่องมือแก้ไขพร็อกซีของ UI การจัดการ หรือจะรวมไว้ใน
ไดเรกทอรี
/resources/javaในพร็อกซี API ที่คุณพัฒนาในเครื่องก็ได้ - สำหรับการดำเนินการที่มีน้ำหนักเบา เช่น การเรียก API ไปยังบริการระยะไกล เราขอแนะนำให้ใช้ นโยบาย ServiceCallout ดูนโยบายข้อความไฮไลต์บริการ
- สำหรับการโต้ตอบกับเนื้อหาข้อความที่ค่อนข้างง่าย เช่น การแก้ไขหรือการแยกส่วนหัว HTTP, พารามิเตอร์ หรือเนื้อหาข้อความ Apigee ขอแนะนำให้ใช้นโยบาย JavaScript
หัวข้อที่เกี่ยวข้อง
- ดูตัวอย่างที่เกี่ยวข้องได้ในที่เก็บ java-cookbook