คุณกำลังดูเอกสารประกอบของ Apigee Edge
ไปที่
เอกสารประกอบของ Apigee X info
![]()
อะไร
ช่วยให้คุณใช้ Java เพื่อใช้ลักษณะการทำงานที่กำหนดเองซึ่งนโยบายของ Apigee ไม่ได้รวมไว้ให้ ในโค้ด Java คุณสามารถเข้าถึงพร็อพเพอร์ตี้ของข้อความ (ส่วนหัว, พารามิเตอร์การค้นหา, เนื้อหา) และตัวแปรโฟลว์ในโฟลว์พร็อกซีได้ หากเพิ่งเริ่มใช้นโยบายนี้ โปรดดูวิธีสร้าง Java Callout
ดูเวอร์ชันของ Java ที่รองรับได้ที่ ซอฟต์แวร์ และเวอร์ชันที่รองรับ
กำหนดเวลา
ดูหลักเกณฑ์ได้ที่ "ควรใช้ Java Callout เมื่อใด" ใน วิธีสร้าง Java Callout
เกี่ยวกับ
นโยบาย Java Callout ช่วยให้คุณรับและตั้งค่าตัวแปรโฟลว์ ดำเนินการตรรกะที่กำหนดเอง และจัดการ ข้อผิดพลาด รวมถึงแยกข้อมูลจากคำขอหรือการตอบกลับ และอื่นๆ นโยบายนี้ช่วยให้คุณ ใช้ลักษณะการทำงานที่กำหนดเองซึ่งนโยบาย Edge มาตรฐานอื่นๆ ไม่ครอบคลุม
คุณสามารถแพ็กเกจแอปพลิเคชัน Java ของคุณด้วยไฟล์ JAR ของแพ็กเกจที่ต้องการ โปรดทราบ ว่ามีข้อจำกัดบางประการเกี่ยวกับสิ่งที่คุณทำได้ด้วย Java Callout ซึ่งแสดงไว้ด้านล่าง ใน ข้อจำกัดตัวอย่าง
ตัวอย่างง่ายๆ
วิธีสร้าง Java Calloutดึงข้อมูลพร็อพเพอร์ตี้ในโค้ด Java
องค์ประกอบ <Property> ของนโยบายช่วยให้คุณระบุคู่ชื่อ/ค่า
ที่ดึงข้อมูลได้ในรันไทม์ในโค้ด Java ดูตัวอย่างการทำงานที่ใช้
พร็อพเพอร์ตี้ได้ที่หัวข้อวิธีใช้พร็อพเพอร์ตี้
ใน Java Callout
ใช้แอตทริบิวต์ 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> ดูเพิ่มเติมที่
หัวข้อ วิธีสร้าง Java
Callout
<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
| แอตทริบิวต์ | คำอธิบาย | ค่าเริ่มต้น | การมีบุคคลอยู่ |
|---|---|---|---|
| name |
ระบุชื่อพร็อพเพอร์ตี้ |
ไม่มี | ต้องระบุ |
<ResourceURL> องค์ประกอบ
องค์ประกอบนี้ระบุไฟล์ JAR ของ Java ที่จะทำงานเมื่อนโยบาย Java Callout ทำงาน
คุณสามารถจัดเก็บไฟล์นี้ไว้ในขอบเขตพร็อกซี 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 ที่กำหนดเองและทำให้ใช้งานได้กับพร็อกซีได้ที่หัวข้อวิธีสร้าง Java Callout
ข้อจำกัด
ด้านล่างนี้คือข้อจำกัดที่คุณต้องพิจารณาเมื่อเขียน Java Callout
- ไม่อนุญาตให้เรียกใช้ระบบส่วนใหญ่ เช่น คุณไม่สามารถอ่านหรือเขียนระบบไฟล์ภายในได้
- การเข้าถึงเครือข่ายผ่านซ็อกเก็ต Apigee จำกัดการเข้าถึงที่อยู่ sitelocal, anylocal, loopback และ linklocal
- Callout ไม่สามารถรับข้อมูลเกี่ยวกับกระบวนการปัจจุบัน รายการกระบวนการ หรือ การใช้งาน CPU/หน่วยความจำในเครื่อง แม้ว่าการเรียกใช้บางอย่างอาจทำงานได้ แต่ระบบไม่รองรับและอาจปิดใช้การเรียกใช้เหล่านั้นอย่างจริงจังได้ทุกเมื่อ คุณควรหลีกเลี่ยงการเรียกใช้ดังกล่าวในโค้ดเพื่อความเข้ากันได้ในอนาคต
- ระบบไม่รองรับการใช้ไลบรารี Java ที่รวมอยู่ใน Apigee Edge ไลบรารีเหล่านั้นมีไว้สำหรับฟังก์ชันการทำงานของผลิตภัณฑ์ Edge เท่านั้น และไม่มีการรับประกันว่าไลบรารีจะพร้อมใช้งานในแต่ละรุ่น
- อย่าใช้
io.apigeeหรือcom.apigeeเป็นชื่อแพ็กเกจใน Java Callout ชื่อเหล่านั้นสงวนไว้และใช้โดยโมดูล 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 ดูนโยบาย Service Callout
- สำหรับการโต้ตอบกับเนื้อหาของข้อความที่ค่อนข้างง่าย เช่น การแก้ไขหรือแยก ส่วนหัว HTTP, พารามิเตอร์ หรือเนื้อหาของข้อความ Apigee ขอแนะนำให้ใช้นโยบาย JavaScript
หัวข้อที่เกี่ยวข้อง
- ดูตัวอย่างที่เกี่ยวข้องได้ที่ที่เก็บ java-cookbook