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

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

อะไร

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

สำหรับ Java เวอร์ชันที่สนับสนุน โปรดดูที่ ที่สนับสนุน ซอฟต์แวร์และเวอร์ชันที่รองรับ

กำหนดเวลา

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

เกี่ยวกับ

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

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

ตัวอย่าง

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

วิธีสร้าง Java ข้อความไฮไลต์

ดึงข้อมูลคุณสมบัติในโค้ด Java

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

ใช้ <Property> แอตทริบิวต์ name ขององค์ประกอบเพื่อระบุชื่อที่มี เพื่อเข้าถึงพร็อพเพอร์ตี้จากโค้ด Java ขององค์ประกอบ <Property> value (ค่าระหว่างแท็กเปิดและปิด) คือค่าที่จะได้รับโดย โค้ด 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

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


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

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

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

&lt;JavaCallout&gt; แอตทริบิวต์

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

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

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

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

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

ไม่มี ต้องระบุ
continueOnError

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

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

เท็จ ไม่บังคับ
enabled

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

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

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

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

เท็จ เลิกใช้

&lt;DisplayName&gt; องค์ประกอบ

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

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

ไม่มี

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

การมีบุคคลอยู่ ไม่บังคับ
ประเภท สตริง

&lt;ClassName&gt; องค์ประกอบ

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

<JavaCallout name="MyJavaCalloutPolicy">
   <ResourceURL>java://MyJavaCallout.jar</ResourceURL>
   <ClassName>com.example.mypolicy.MyJavaCallout</ClassName>
</JavaCallout>
ค่าเริ่มต้น: ไม่มี
การตรวจหาบุคคล: ต้องระบุ
ประเภท: สตริง

&lt;Property&gt; องค์ประกอบ

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

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

Attributes

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

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

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

&lt;ResourceURL&gt; องค์ประกอบ

องค์ประกอบนี้ระบุไฟล์ 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 ในระหว่างการบังคับใช้นโยบาย JavaScript

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

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

ชื่อข้อผิดพลาด สตริงข้อผิดพลาด สถานะ 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 ข้อความไฮไลต์

ข้อจำกัด

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

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

บรรจุภัณฑ์

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

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

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

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

Javadoc

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

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

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

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