นโยบายคําขอราคาเสนอของ Java

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

อะไร

ช่วยให้คุณสามารถใช้ Java เพื่อติดตั้งใช้งานลักษณะการทำงานที่กำหนดเองที่นโยบาย Apigee ไม่ได้รวมอยู่ในให้ติดตั้งมาในตัว ในโค้ด Java คุณจะเข้าถึงพร็อพเพอร์ตี้ข้อความ (ส่วนหัว พารามิเตอร์การค้นหา เนื้อหา) และตัวแปรโฟลว์ในขั้นตอนพร็อกซีได้ หากคุณเพิ่งเริ่มต้นใช้งานนโยบายนี้ โปรดดูวิธีสร้างไฮไลต์ Java

ดูเวอร์ชันที่รองรับของ Java ได้ที่ซอฟต์แวร์ที่รองรับและเวอร์ชันที่รองรับ

กรณีใช้งาน

ดูหลักเกณฑ์ได้ที่ "ฉันควรใช้ไฮไลต์ Java เมื่อใด" ในวิธีสร้างไฮไลต์ Java

เกี่ยวกับ

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

คุณสามารถทำแพ็กเกจแอปพลิเคชัน Java โดยใช้ไฟล์ JAR ใดก็ได้ที่ต้องการ โปรดทราบว่ามีข้อจำกัดบางอย่างในสิ่งที่คุณทำได้ด้วยไฮไลต์ Java ดังแสดงไว้ด้านล่างในข้อจำกัด

ลองฟัง

ตัวอย่างง่ายๆ

วิธีสร้างไฮไลต์ 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 ให้ใช้ตัวสร้างต่อไปนี้ในการใช้งานคลาสการดำเนินการ ดังนี้
    public class MyJavaCallout implements Execution{
        public MyJavaCallout(Map<string, string> props){
            
                // Extract property values from map.
        }
        ...
    }
    

ตั้งค่าตัวแปรโฟลว์ในโค้ด Java

โปรดดูโพสต์ชุมชน Apigee นี้เพื่อดูรายละเอียดที่ชัดเจนเกี่ยวกับวิธีตั้งค่าตัวแปรในบริบทข้อความ (ตัวแปรโฟลว์) ในโค้ด Java


การอ้างอิงองค์ประกอบ

การอ้างอิงองค์ประกอบจะอธิบายองค์ประกอบและแอตทริบิวต์ของนโยบาย JavaCaption

<JavaCallout name="MyJavaCalloutPolicy">
   <ClassName>com.example.mypolicy.MyJavaCallout</ClassName>
   <ResourceURL>java://MyJavaCallout.jar</ResourceURL>
</JavaCallout>

แอตทริบิวต์ <Java callout>

<JavaCallout name="MyJavaCalloutPolicy" enabled="true" continueOnError="false" async="false" >

ตารางต่อไปนี้อธิบายแอตทริบิวต์ที่ใช้ร่วมกันในองค์ประกอบระดับบนสุดของนโยบายทั้งหมด

แอตทริบิวต์ คำอธิบาย ค่าเริ่มต้น การมีบุคคลอยู่
name

ชื่อภายในของนโยบาย ค่าของแอตทริบิวต์ name มีตัวอักษร ตัวเลข ช่องว่าง ขีดกลาง ขีดล่าง และจุด ค่านี้ต้องมีอักขระไม่เกิน 255 ตัว

(ไม่บังคับ) ใช้องค์ประกอบ <DisplayName> เพื่อติดป้ายกำกับนโยบายในเครื่องมือแก้ไขพร็อกซี UI การจัดการด้วยชื่อที่เป็นภาษาธรรมชาติที่แตกต่างออกไป

ไม่มีข้อมูล จำเป็น
continueOnError

ตั้งค่าเป็น false เพื่อแสดงผลข้อผิดพลาดเมื่อนโยบายล้มเหลว ซึ่งถือเป็นเรื่องปกติสำหรับนโยบายส่วนใหญ่

ตั้งค่าเป็น true เพื่อให้การดำเนินการโฟลว์ดำเนินต่อไปได้แม้ว่านโยบายจะล้มเหลวก็ตาม

false ไม่บังคับ
enabled

ตั้งค่าเป็น true เพื่อบังคับใช้นโยบาย

ตั้งค่าเป็น false เพื่อปิดนโยบาย ระบบจะไม่บังคับใช้นโยบายแม้ว่าจะยังแนบอยู่กับขั้นตอนก็ตาม

จริง ไม่บังคับ
async

แอตทริบิวต์นี้เลิกใช้งานแล้ว

false เลิกใช้

องค์ประกอบ <DisplayName>

ใช้เพิ่มเติมจากแอตทริบิวต์ name เพื่อติดป้ายกำกับนโยบายในเครื่องมือแก้ไขพร็อกซี UI การจัดการด้วยชื่อที่เป็นภาษาธรรมชาติที่แตกต่างออกไป

<DisplayName>Policy Display Name</DisplayName>
ค่าเริ่มต้น

ไม่มีข้อมูล

หากคุณไม่ใส่องค์ประกอบนี้ ระบบจะใช้ค่าของแอตทริบิวต์ name ของนโยบาย

การมีบุคคลอยู่ ไม่บังคับ
Type สตริง

อีลิเมนต์ <ClassName>

ระบุชื่อคลาสของ Java ที่จะเรียกใช้เมื่อนโยบายคำขอราคาเสนอ Java ทำงาน โดยคลาสดังกล่าวต้องรวมอยู่ในไฟล์ JAR ที่ระบุไว้โดย <ResourceURL> ดูวิธีสร้างข้อความไฮไลต์ Java เพิ่มเติม

<JavaCallout name="MyJavaCalloutPolicy">
   <ResourceURL>java://MyJavaCallout.jar</ResourceURL>
   <ClassName>com.example.mypolicy.MyJavaCallout</ClassName>
</JavaCallout>
ค่าเริ่มต้น: ไม่มีข้อมูล
สถานที่ตั้ง: จำเป็น
ประเภท: สตริง

องค์ประกอบ <Property>

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

<Properties>
    <Property name="propName">propertyValue</Property>
</Properties>
ค่าเริ่มต้น: ไม่มี
สถานที่ตั้ง: ไม่บังคับ
ประเภท: สตริง

Attributes

แอตทริบิวต์ คำอธิบาย ค่าเริ่มต้น การมีบุคคลอยู่
ชื่อ

ระบุชื่อพร็อพเพอร์ตี้

ไม่มีข้อมูล ต้องระบุ

องค์ประกอบ <ResourceURL>

องค์ประกอบนี้ระบุไฟล์ Java JAR ที่จะดำเนินการเมื่อนโยบายไฮไลต์ Java ทำงาน

คุณจะจัดเก็บไฟล์นี้ในขอบเขตพร็อกซี API (ในส่วน /apiproxy/resources/java ในกลุ่มพร็อกซี API หรือในส่วนสคริปต์ของแผงการนำทางของเครื่องมือแก้ไขพร็อกซี 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 ระหว่างการดำเนินการของนโยบาย JavaCaption

ข้อผิดพลาดในการทำให้ใช้งานได้

ข้อผิดพลาดเหล่านี้อาจเกิดขึ้นเมื่อมีการทำให้พร็อกซีที่มีนโยบายใช้งานได้

ชื่อข้อผิดพลาด สตริงข้อผิดพลาด สถานะ HTTP เกิดขึ้นเมื่อ
ResourceDoesNotExist Resource with name [name] and type [type] does not exist ไม่มีข้อมูล ไม่มีไฟล์ที่ระบุในองค์ประกอบ <ResourceURL>
JavaCalloutInstantiationFailed Failed to instantiate the JavaCallout Class [classname] ไม่มีข้อมูล ไฟล์คลาสที่ระบุในองค์ประกอบ <ClassName> ไม่อยู่ใน Jar
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

ข้อจำกัด

ต่อไปนี้เป็นข้อจำกัดที่คุณต้องพิจารณาเมื่อเขียนไฮไลต์สำหรับ Java

  • การเรียกระบบส่วนใหญ่ไม่ได้รับอนุญาต เช่น คุณจะทำให้ระบบไฟล์ภายในอ่านหรือเขียนไม่ได้
  • การเข้าถึงเครือข่ายผ่านซ็อกเก็ต Apigee จะจำกัดการเข้าถึงไปยังที่อยู่แบบ sitelocal, Anylocal, Loopback และ linklocal
  • ไฮไลต์รับข้อมูลเกี่ยวกับกระบวนการปัจจุบัน รายการกระบวนการ หรือการใช้งาน CPU/หน่วยความจำในเครื่องไม่ได้ แม้ว่าบางการเรียกอาจใช้งานได้ แต่ก็ไม่ได้รับการสนับสนุนและจำเป็นต้องปิดใช้อยู่เสมอ คุณควรหลีกเลี่ยงการเรียกใช้ดังกล่าวในโค้ดเพื่อให้ใช้งานร่วมกันได้ส่งต่อ
  • ระบบไม่รองรับการใช้ไลบรารี Java ที่รวมอยู่ใน Apigee Edge ไลบรารีเหล่านี้มีไว้สำหรับฟังก์ชันการทำงานของผลิตภัณฑ์ Edge เท่านั้น และไม่รับประกันว่าไลบรารีจะพร้อมใช้งานตั้งแต่รุ่นสู่รุ่น
  • อย่าใช้ io.apigee หรือ com.apigee เป็นชื่อแพ็กเกจในไฮไลต์ของ Java ชื่อเหล่านี้สงวนไว้และใช้โดยโมดูล Apigee อื่นๆ

การจัดแพ็กเกจ

วาง JAR ในพร็อกซี API ภายใต้ /resources/java หากไฮไลต์ของ Java ใช้ไลบรารีของบุคคลที่สามเพิ่มเติมซึ่งจัดแพ็กเกจเป็นไฟล์ JAR อิสระไว้ ให้วางไฟล์ JAR เหล่านั้นในไดเรกทอรี /resources/java ด้วยเพื่อให้แน่ใจว่าไฟล์ดังกล่าวโหลดอย่างถูกต้องที่รันไทม์

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

ดูข้อมูลเกี่ยวกับการอัปโหลด Java JAR ได้ที่ไฟล์ทรัพยากร

ดูตัวอย่างโดยละเอียดที่สาธิตวิธีแพ็กเกจและใช้ไฮไลต์ของ Java โดยใช้ Maven หรือ Javac ได้ที่วิธีสร้างไฮไลต์ Java

Javadoc

Javadoc สําหรับการเขียนโค้ด JavaScript ของ Java มีอยู่ที่นี่ใน GitHub คุณจะต้องโคลนหรือดาวน์โหลด HTML ลงในระบบ จากนั้นเปิดไฟล์ index.html ในเบราว์เซอร์

หมายเหตุการใช้งาน

  • นโยบายไฮไลต์ของ Java ไม่มีโค้ดจริง แต่นโยบายการเรียก Java จะอ้างอิง "ทรัพยากร" ของ Java และกำหนดขั้นตอนในโฟลว์ API ที่โค้ด Java ทำงาน คุณจะอัปโหลด Java JAR ผ่านเครื่องมือแก้ไขพร็อกซี UI การจัดการ หรือรวมไว้ในไดเรกทอรี /resources/java ในพร็อกซี API ที่คุณพัฒนาในเครื่องก็ได้
  • สำหรับการดำเนินการขนาดเล็ก เช่น การเรียก API ไปยังบริการระยะไกล เราขอแนะนำให้ใช้นโยบาย ServiceAPI ดูนโยบายคำขอราคาเสนอบริการ
  • สำหรับการโต้ตอบที่ค่อนข้างเรียบง่ายกับเนื้อหาข้อความ เช่น การแก้ไขหรือการแยกส่วนหัว พารามิเตอร์ หรือเนื้อหาข้อความของ HTTP Apigee ขอแนะนำให้ใช้นโยบาย JavaScript

หัวข้อที่เกี่ยวข้อง