นโยบายคําขอราคาเสนอของ 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>
ค่าเริ่มต้น: ไม่มี
การตรวจหาบุคคล: ต้องระบุ
ประเภท: สตริง

ข้อมูลอ้างอิงข้อผิดพลาด

This section describes the fault codes and error messages that are returned and fault variables that are set by Edge when this policy triggers an error. This information is important to know if you are developing fault rules to handle faults. To learn more, see What you need to know about policy errors and Handling faults.

Runtime errors

These errors can occur when the policy executes.

Fault code HTTP status Cause Fix
steps.javacallout.ExecutionError 500 Occurs when Java code throws an exception or returns null during the execution of a JavaCallout policy.

Deployment errors

These errors can occur when the proxy containing the policy is deployed.

Error name Fault string HTTP status Occurs when
ResourceDoesNotExist Resource with name [name] and type [type] does not exist N/A The file specified in the <ResourceURL> element does not exist.
JavaCalloutInstantiationFailed Failed to instantiate the JavaCallout Class [classname] N/A The class file specified in the <ClassName> element is not in the jar.
IncompatibleJavaVersion Failed to load java class [classname] definition due to - [reason] N/A See fault string. See also Supported software and supported versions.
JavaClassNotFoundInJavaResource Failed to find the ClassName in java resource [jar_name] - [class_name] N/A See fault string.
JavaClassDefinitionNotFound Failed to load java class [class_name] definition due to - [reason] N/A See fault string.
NoAppropriateConstructor No appropriate constructor found in JavaCallout class [class_name] N/A See fault string.
NoResourceForURL Could not locate a resource with URL [string] N/A See fault string.

Fault variables

These variables are set when this policy triggers an error. For more information, see What you need to know about policy errors.

Variables Where Example
fault.name="fault_name" fault_name is the name of the fault, as listed in the Runtime errors table above. The fault name is the last part of the fault code. fault.name Matches "ExecutionError"
javacallout.policy_name.failed policy_name is the user-specified name of the policy that threw the fault. javacallout.JC-GetUserData.failed = true

Example error response

{  
   "fault":{  
      "faultstring":"Failed to execute JavaCallout. [policy_name]",
      "detail":{  
         "errorcode":"javacallout.ExecutionError"
      }
   }
}

Example fault rule

<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

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