Javaकॉलआउट नीति

आपको Apigee Edge दस्तावेज़ दिख रहा है.
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है इस पेज पर जाएं Apigee X दस्तावेज़.
जानकारी

क्या

आपको पसंद के मुताबिक व्यवहार को लागू करने के लिए Java का इस्तेमाल करने में मदद करता है जो Apigee की नीतियां. अपने Java कोड में, मैसेज की प्रॉपर्टी (हेडर, क्वेरी पैरामीटर, content) और फ़्लो वैरिएबल से मेल खाते हैं. अगर आपने यह नीति हाल ही में शुरू की है, देखें Java बनाने का तरीका कॉलआउट.

Java के साथ काम करने वाले वर्शन के लिए, 'यह काम करता है' के तौर पर काम करने वाला सॉफ़्टवेयर और सॉफ़्टवेयर के साथ काम करने वाले वर्शन.

कब

दिशा-निर्देशों के लिए, "मुझे Java कॉलआउट का इस्तेमाल कब करना चाहिए?" में Java फ़ाइल की जानकारी कॉलआउट.

इसके बारे में जानकारी

Java कॉलआउट नीति की मदद से, आप फ़्लो वैरिएबल पा सकते हैं और उन्हें सेट कर सकते हैं. साथ ही, कस्टम लॉजिक को एक्ज़ीक्यूट कर सकते हैं और गड़बड़ी ठीक करना, अनुरोधों या जवाबों से डेटा एक्सट्रैक्ट करना वगैरह. इस नीति की मदद से, ये काम किए जा सकते हैं ऐसा कस्टम व्यवहार लागू करें जो किसी दूसरी मानक Edge नीतियों के दायरे में न आता हो.

आप अपने Java ऐप्लिकेशन को अपनी ज़रूरत की किसी भी पैकेज JAR फ़ाइलों के साथ पैकेज कर सकते हैं. नोट जोड़ें साथ ही, यह भी बताया गया है कि Java कॉलआउट की मदद से क्या किया जा सकता है. इनकी सूची नीचे दी गई है पाबंदियां में हैं.

सैंपल

आसान उदाहरण

Java बनाने का तरीका कॉलआउट

अपने Java कोड में प्रॉपर्टी वापस पाना

नीति के <Property> एलिमेंट से, नाम/वैल्यू तय की जा सकती है जोड़ा जा सकता है, जिसे आप अपने Java कोड में रनटाइम के दौरान वापस पा सकते हैं. उदाहरण के लिए, जो प्रॉपर्टी के लिए, प्रॉपर्टी इस्तेमाल करने का तरीका Java के कॉलआउट में.

<प्रॉपर्टी> का इस्तेमाल करें एलिमेंट का name एट्रिब्यूट, जिससे नाम तय करने में मदद मिलती है किस Java कोड से प्रॉपर्टी को ऐक्सेस किया जाता है. <Property> एलिमेंट मान (ओपनिंग और क्लोज़िंग टैग के बीच का मान) वह मान है जो को तय करने में मदद मिलती है. मान एक स्ट्रिंग होनी चाहिए; आपके पास किसी फ़्लो वैरिएबल को वैल्यू.

  • प्रॉपर्टी कॉन्फ़िगर करें. यहां, प्रॉपर्टी की वैल्यू, वैरिएबल का नाम है 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> एलिमेंट का इस्तेमाल करें प्रबंधन यूज़र इंटरफ़ेस (यूआई) प्रॉक्सी एडिटर को अलग, आम भाषा में इस्तेमाल करने वाले नाम के साथ किया जा सकता है.

लागू नहीं ज़रूरी है
continueOnError

किसी नीति के काम न करने पर, गड़बड़ी दिखाने के लिए false पर सेट करें. यह उम्मीद है व्यवहार की जानकारी देने वाला डेटा.

नीति के लागू होने के बाद भी फ़्लो को एक्ज़ीक्यूट करने के लिए, इसे true पर सेट करें विफल होता है.

गलत वैकल्पिक
enabled

नीति को लागू करने के लिए, true पर सेट करें.

नीति को बंद करने के लिए, false पर सेट करें. नीति लागू किया जाता है, भले ही वह किसी फ़्लो से जुड़ा रहता हो.

सही वैकल्पिक
async

यह एट्रिब्यूट अब काम नहीं करता.

गलत बहिष्कृत

&lt;DisplayName&gt; एलिमेंट

इस कॉलम में नीति को लेबल करने के लिए, name एट्रिब्यूट के साथ-साथ इस्तेमाल करें मैनेजमेंट यूज़र इंटरफ़ेस (यूआई) प्रॉक्सी एडिटर, जिसका नाम अलग और सामान्य भाषा में है.

<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>
डिफ़ॉल्ट: कोई नहीं
मौजूदगी: वैकल्पिक
टाइप: स्ट्रिंग

विशेषताएं

एट्रिब्यूट ब्यौरा डिफ़ॉल्ट मौजूदगी
नाम

इससे प्रॉपर्टी का नाम पता चलता है.

लागू नहीं ज़रूरी है.

&lt;ResourceURL&gt; एलिमेंट

यह एलिमेंट, Java JAR फ़ाइल के बारे में बताता है, जो Java कॉलआउट नीति के लागू होने पर काम करेगी दौड़ता है.

आप इस फ़ाइल को API प्रॉक्सी दायरे में (इसके अंतर्गत) एपीआई प्रॉक्सी बंडल में या इसके स्क्रिप्ट सेक्शन में /apiproxy/resources/java फिर से इस्तेमाल करने के लिए संगठन या एनवायरमेंट के दायरे में, एपीआई प्रॉक्सी एडिटर का नेविगेटर पैनल या एक से ज़्यादा एपीआई प्रॉक्सी का इस्तेमाल कर सकते हैं, जैसा कि संसाधन फ़ाइलों में बताया गया है.

<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, साइटों को लोकल, किसी भी लोकल, लूपबैक, और linklocal पते.
  • कॉलआउट में मौजूदा प्रोसेस, प्रोसेस सूची या मशीन पर सीपीयू/मेमोरी का इस्तेमाल. हालांकि इस तरह के कुछ कॉल काम कर सकते हैं, लेकिन काम नहीं करता और किसी भी समय सक्रिय रूप से बंद हो सकता है. आने वाले समय में साथ काम करने के लिए, आपको को अपने कोड में इस तरह के कॉल नहीं करने चाहिए.
  • Apigee Edge के साथ शामिल की गई Java लाइब्रेरी पर भरोसा नहीं किया जा सकता. वे लाइब्रेरी का इस्तेमाल सिर्फ़ Edge प्रॉडक्ट की सुविधाओं के लिए किया जा सकता है. साथ ही, इस बात की कोई गारंटी नहीं है कि लाइब्रेरी अलग-अलग रिलीज़ में उपलब्ध रहे.
  • Java में पैकेज नामों के रूप में io.apigee या com.apigee का इस्तेमाल न करें कॉलआउट. ये नाम रिज़र्व किए गए हैं और Apigee के अन्य मॉड्यूल इनका इस्तेमाल करते हैं.

पैकेजिंग

JAR को /resources/java में मौजूद एपीआई प्रॉक्सी में रखें. अगर आपका Java कॉलआउट स्वतंत्र रूप से काम करने वाली JAR फ़ाइलों के तौर पर पैकेज की गई अतिरिक्त तीसरे पक्ष की लाइब्रेरी का इस्तेमाल करते हैं. इसके बाद, उन JAR फ़ाइलों को में /resources/java डायरेक्ट्री में बदलाव करें. साथ ही, यह पक्का करें कि वे रनटाइम.

अगर प्रॉक्सी बनाने या उसमें बदलाव करने के लिए, मैनेजमेंट यूज़र इंटरफ़ेस (यूआई) का इस्तेमाल किया जा रहा है, तो नया संसाधन जोड़ें और एक अतिरिक्त डिपेंडेंट JAR फ़ाइल जोड़ें. अगर एक से ज़्यादा JAR हैं, तो उन्हें अतिरिक्त संसाधन शामिल करें. अतिरिक्त जानकारी देखने के लिए, आपको नीति के कॉन्फ़िगरेशन में बदलाव करने की ज़रूरत नहीं है JAR फ़ाइलें. उन्हें /resources/java में डालना काफ़ी है.

Java JAR अपलोड करने के बारे में जानकारी के लिए, संसाधन फ़ाइलें देखें.

ज़्यादा जानकारी वाले उदाहरण के लिए, Maven का इस्तेमाल करके Java कॉलआउट को पैकेज और डिप्लॉय करने का तरीका बताया गया है या javac, देखने के लिए कैसे बनाएं Java का कॉलआउट.

Javadoc

Java कॉलआउट कोड लिखने के लिए, Java फ़ाइलें यहां भी शामिल है GitHub. आपको अपने सिस्टम में एचटीएमएल का क्लोन बनाना होगा या उसे डाउनलोड करना होगा. इसके बाद, बस index.html फ़ाइल होनी चाहिए.

इस्तेमाल की जानकारी

  • Java कॉलआउट नीति में कोई असल कोड नहीं है. इसके बजाय, Java कॉलआउट नीति Java 'संसाधन' और उस एपीआई फ़्लो का चरण तय करता है जहां Java कोड काम करता है. आप मैनेजमेंट यूज़र इंटरफ़ेस (यूआई) के प्रॉक्सी एडिटर के ज़रिए अपना Java JAR अपलोड करें या आप इसे एपीआई प्रॉक्सी में /resources/java डायरेक्ट्री, जिसे आपने स्थानीय तौर पर डेवलप किया है.
  • रिमोट सेवाओं को एपीआई कॉल करने जैसे आसान ऑपरेशन के लिए, हमारा सुझाव है कि सेवाकॉलआउट नीति. सेवा कॉलआउट की नीति देखें.
  • मैसेज के कॉन्टेंट के साथ आसान इंटरैक्शन के लिए. जैसे, बदलाव करना या एक्सट्रैक्ट करना एचटीटीपी हेडर, पैरामीटर या मैसेज का कॉन्टेंट, Apigee, JavaScript नीति का इस्तेमाल करने का सुझाव देता है.

मिलते-जुलते विषय