Javaकॉलआउट नीति

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

क्या

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

Java के साथ काम करने वाले वर्शन के बारे में जानने के लिए, काम करने वाले सॉफ़्टवेयर और उनके वर्शन देखें.

कब

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

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

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

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

सैंपल

सामान्य उदाहरण

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

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

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

<Property> एलिमेंट के name एट्रिब्यूट का इस्तेमाल करके, उस नाम की जानकारी दें जिससे 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

नीति का अंदरूनी नाम. name एट्रिब्यूट की वैल्यू ये काम कर सकती है: अक्षरों, संख्याओं, स्पेस, हाइफ़न, अंडरस्कोर, और फ़ुलस्टॉप को शामिल करें. यह मान नहीं हो सकता 255 वर्णों से ज़्यादा होने चाहिए.

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

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

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

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

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

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

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

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

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

गलत बहिष्कृत

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

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

<DisplayName>Policy Display Name</DisplayName>
डिफ़ॉल्ट

लागू नहीं

अगर आप इस एलिमेंट को छोड़ देते हैं, तो नीति की name एट्रिब्यूट की वैल्यू यह होगी इस्तेमाल किया गया.

मौजूदगी वैकल्पिक
टाइप स्ट्रिंग

<ClassName> एलिमेंट

Java क्लास का नाम बताता है. यह क्लास, Java Callout नीति के लागू होने पर काम करती है. क्लास को <ResourceURL> में बताई गई JAR फ़ाइल में शामिल किया जाना चाहिए. 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>
डिफ़ॉल्ट: कोई नहीं
मौजूदगी: वैकल्पिक
टाइप: स्ट्रिंग

विशेषताएं

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

प्रॉपर्टी का नाम बताता है.

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

<ResourceURL> एलिमेंट

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

इस फ़ाइल को एपीआई प्रॉक्सी स्कोप (एपीआई प्रॉक्सी बंडल में /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, sitelocal, anylocal, लूपबैक, और 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 या javac का इस्तेमाल करके, Java कॉलआउट को पैकेज करने और डिप्लॉय करने का तरीका जानने के लिए, Java कॉलआउट बनाने का तरीका लेख पढ़ें.

Javadoc

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

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

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

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