Javaकॉलआउट नीति

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

यह क्या है

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

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

जब ऐसा होता है

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

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

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

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

सैंपल

आसान उदाहरण

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

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

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

<प्रॉपर्टी> एलिमेंट के 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 कोड में, एक्ज़ीक्यूशन क्लास लागू करने पर इस कंस्ट्रक्टर को इस तरह लागू करें:
    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>

<Java callout> एट्रिब्यूट

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

इस टेबल में उन एट्रिब्यूट के बारे में बताया गया है जो नीति के सभी पैरंट एलिमेंट के लिए एक जैसे होते हैं:

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

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

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

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

इस नीति को false पर सेट करें, ताकि नीति के काम न करने पर गड़बड़ी का मैसेज दिखे. ज़्यादातर नीतियों में, ऐसा आम तौर पर किया जाता है.

किसी नीति के काम न करने पर भी फ़्लो एक्ज़ीक्यूट करने की प्रोसेस को जारी रखने के लिए, true पर सेट करें.

false ज़रूरी नहीं
enabled

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

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

सही ज़रूरी नहीं
async

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

false बहिष्कृत

<DisplayName> एलिमेंट

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

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

लागू नहीं

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

मौजूदगी ज़रूरी नहीं
Type String

<ClassName> एलिमेंट

इससे, Java की कॉलआउट नीति के चलने पर एक्ज़ीक्यूट होने वाली Java क्लास का नाम पता चलता है. क्लास को उस JAR फ़ाइल में शामिल किया जाना चाहिए जिसे <ResourceURL> ने तय किया है. Java कॉलआउट बनाने का तरीका भी देखें.

<JavaCallout name="MyJavaCalloutPolicy">
   <ResourceURL>java://MyJavaCallout.jar</ResourceURL>
   <ClassName>com.example.mypolicy.MyJavaCallout</ClassName>
</JavaCallout>
डिफ़ॉल्ट: लागू नहीं
मौजूदगी: ज़रूरी है
टाइप: String

<प्रॉपर्टी> एलिमेंट

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

<Properties>
    <Property name="propName">propertyValue</Property>
</Properties>
डिफ़ॉल्ट: कभी नहीं
मौजूदगी: ज़रूरी नहीं
टाइप: String

एट्रिब्यूट

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

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

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

<ResourceURL> एलिमेंट

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

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

<JavaCallout name="MyJavaCalloutPolicy">
   <ResourceURL>java://MyJavaCallout.jar</ResourceURL>
   <ClassName>com.example.mypolicy.MyJavaCallout</ClassName>
</JavaCallout>
डिफ़ॉल्ट: कभी नहीं
मौजूदगी: ज़रूरी है
टाइप: String

गड़बड़ी का रेफ़रंस

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

रनटाइम से जुड़ी गड़बड़ियां

नीति के लागू होने पर ये गड़बड़ियां हो सकती हैं.

गड़बड़ी का कोड एचटीटीपी कोड स्थिति वजह समाधान
steps.javacallout.ExecutionError 500 ऐसा तब होता है, जब Java कोड किसी अपवाद की जानकारी देता है या Java कॉलआउट नीति के लागू होने के दौरान, शून्य दिखाता है.

डिप्लॉयमेंट से जुड़ी गड़बड़ियां

ये गड़बड़ियां तब हो सकती हैं, जब नीति वाले प्रॉक्सी को डिप्लॉय किया जाता है.

गड़बड़ी का नाम गड़बड़ी वाली स्ट्रिंग एचटीटीपी कोड स्थिति कब होता है
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, साइटलोकल, किसी भीलोकल, लूपबैक, और 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 डायरेक्ट्री में शामिल किया जा सकता है.
  • रिमोट सेवाओं के लिए एपीआई कॉल करने जैसे आसान काम के लिए, हम सेवा कॉलआउट की नीति का इस्तेमाल करने का सुझाव देते हैं. सेवा की कॉलआउट नीति देखें.
  • मैसेज के कॉन्टेंट के साथ सामान्य इंटरैक्शन के लिए, Apigee, JavaScript नीति इस्तेमाल करने का सुझाव देता है. इन इंटरैक्शन में, एचटीटीपी हेडर, पैरामीटर या मैसेज के कॉन्टेंट में बदलाव करना या उसे निकालना शामिल है.

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