Java कॉलआउट नीति के रनटाइम की गड़बड़ी से जुड़ी समस्या हल करना

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

पर क्लिक करें.

ResourceDoesNotExist

गड़बड़ी का मैसेज

Edge यूज़र इंटरफ़ेस (यूआई) या Edge Management API के ज़रिए एपीआई प्रॉक्सी को डिप्लॉय करने पर, यह गड़बड़ी का मैसेज दिखता है:

Error Deploying Revision <var>revision_number</var> to <var>environment</var>
Resource with name <var>ResourceURL</var> and type java does not exist.

गड़बड़ी के मैसेज का उदाहरण

Error Deploying Revision 1 to test
Resource with name myresource.jar and type java does not exist.

गड़बड़ी के उदाहरण का स्क्रीनशॉट

वजह

अगर JavaCallout नीति में <ResourceURL> एलिमेंट में दिया गया संसाधन, एपीआई प्रॉक्सी, एनवायरमेंट या संगठन के लेवल पर मौजूद नहीं है, तो एपीआई प्रॉक्सी को डिप्लॉय नहीं किया जा सकेगा.

संक्रमण की जांच

  1. आस-पास के माहौल और संसाधन के नाम की पहचान करें. यह जानकारी, गड़बड़ी के मैसेज में देखी जा सकती है. उदाहरण के लिए, यहां दी गई गड़बड़ी में एनवायरमेंट test है और <ResourceURL> एलिमेंट में इस्तेमाल किया गया संसाधन का नाम myresource.jar है.

    Error Deploying Revision 1 to test
    Resource with name myresource.jar and type java does not exist.
    
  2. उस JavaCallout नीति का पता लगाएं जो ऊपर दिए गए पहले चरण में पहचाने गए संसाधन का इस्तेमाल कर रही है.

    उदाहरण के लिए, यहां दी गई नीति में <ResourceURL> की वैल्यू myresource.jar के तौर पर बताई गई है. यह वैल्यू, गड़बड़ी के मैसेज में दी गई वैल्यू से मेल खाती है:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <JavaCallout name="hello-java">
        <ClassName>com.apigeesample.HelloJava</ClassName>
        <ResourceURL>java://myresource.jar</ResourceURL>
    </JavaCallout>
    
  3. यह पता लगाएं कि संसाधन, एपीआई प्रॉक्सी का हिस्सा है या नहीं. अगर ऐसा है, तो देखें कि संसाधन को एनवायरमेंट या संगठन के लेवल पर अपलोड किया गया है या नहीं. अगर ऐसा नहीं है, तो गड़बड़ी की वजह यही है.

    • एपीआई प्रॉक्सी लेवल पर अपलोड किए गए सभी संसाधन देखने के लिए, एपीआई प्रॉक्सी एडिटर के नेविगेटर पैन में मौजूद 'संसाधन' टैब पर जाएं. इस उदाहरण में, एपीआई प्रॉक्सी में कोई संसाधन अपलोड नहीं किया गया है.

    • संसाधन, एनवायरमेंट या संगठन के लेवल पर उपलब्ध हो सकते हैं. ज़्यादा जानकारी के लिए, संसाधन फ़ाइलें देखें.

      • यह पता लगाने के लिए कि संसाधन एनवायरमेंट लेवल पर मौजूद है या नहीं, curl का इस्तेमाल करके यह एपीआई कॉल करें: curl -v -u <strong>email </strong>"https://api.enterprise.apigee.com/v1/organizations/myorg/environments/myenv/resourcefiles/java/myresource.jar"

      • यह पता लगाने के लिए कि संसाधन संगठन के लेवल पर मौजूद है या नहीं, curl का इस्तेमाल करके यह एपीआई कॉल करें. इसमें एनवायरमेंट की जानकारी शामिल न करें: curl -v -u email "https://api.enterprise.apigee.com/v1/organizations/myorg/resourcefiles/java/myresource.jar"

      अगर आपको इन एपीआई के जवाब में 404 स्टेटस कोड मिलता है, तो इसका मतलब है कि संगठन और एनवायरमेंट, दोनों लेवल पर संसाधन मौजूद नहीं है.

    अगर एपीआई प्रॉक्सी, संगठन, और एनवायरमेंट लेवल पर संसाधन उपलब्ध नहीं है, तो डिप्लॉयमेंट से जुड़ी गड़बड़ी का मैसेज दिखता है:

    Resource with name myresource.jar and type java does not exist.
     ```
    

रिज़ॉल्यूशन

पक्का करें कि <ResourceURL> एलिमेंट में बताया गया संसाधन, एपीआई प्रॉक्सी, एनवायरमेंट या संगठन के लेवल पर मौजूद हो. ज़्यादा जानकारी के लिए, संसाधन फ़ाइलें देखें.

ऊपर दिखाई गई JavaCallout नीति के उदाहरण को ठीक करने के लिए, सही लेवल (एपीआई प्रॉक्सी, संगठन या एनवायरमेंट लेवल) पर JAR फ़ाइल अपलोड करें.

NoResourceForURL

गड़बड़ी का मैसेज

Edge यूज़र इंटरफ़ेस (यूआई) या Edge Management API के ज़रिए एपीआई प्रॉक्सी को डिप्लॉय करने पर, यह गड़बड़ी का मैसेज दिखता है:

Error in deployment for environment <var>environment</var>
The revision is deployed, but traffic cannot flow. Could not locate a resource with URL <var>ResourceURL</var>

गड़बड़ी के मैसेज का उदाहरण

Error in deployment for environment test
The revision is deployed, but traffic cannot flow. Could not locate a resource with URL java://myresource.jar

गड़बड़ी के उदाहरण का स्क्रीनशॉट

वजह

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

संक्रमण की जांच

  1. एनवायरमेंट और संसाधन के नाम की पहचान करें. यह जानकारी, गड़बड़ी के मैसेज में देखी जा सकती है. उदाहरण के लिए, यहां दी गई गड़बड़ी में, एनवायरमेंट का नाम test है और <ResourceURL> एलिमेंट में इस्तेमाल किया गया संसाधन का नाम myresource.jar है.

    Error in deployment for environment test
    The revision is deployed, but traffic cannot flow. Could not locate a resource with URL java://myresource.jar
    
  2. पक्का करें कि संसाधन को एपीआई प्रॉक्सी, एनवायरमेंट या संगठन के लेवल पर अपलोड किया गया हो. नीचे दिए गए उदाहरण में, देखा जा सकता है कि संसाधन myresource.jar को एपीआई प्रॉक्सी लेवल पर अपलोड किया गया है.

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

    यह पता लगाने के लिए कि संसाधन एनवायरमेंट लेवल पर मौजूद है या नहीं, curl का इस्तेमाल करके यह एपीआई कॉल करें: curl -v -u <strong>email </strong>"https://api.enterprise.apigee.com/v1/organizations/myorg/environments/myenv/resourcefiles/java/myresource.jar"

    यह पता लगाने के लिए कि संसाधन संगठन के लेवल पर मौजूद है या नहीं, curl का इस्तेमाल करके यह एपीआई कॉल करें. इसमें एनवायरमेंट की जानकारी शामिल न करें: curl -v -u email "https://api.enterprise.apigee.com/v1/organizations/myorg/resourcefiles/java/myresource.jar"

    अगर आपको इन एपीआई के जवाब में 404 स्टेटस कोड मिलता है, तो इसका मतलब है कि संगठन और एनवायरमेंट, दोनों लेवल पर संसाधन मौजूद नहीं है.

रिज़ॉल्यूशन

  1. अगर आपको लगता है कि संसाधन, एपीआई प्रॉक्सी, संगठन या एनवायरमेंट लेवल पर मौजूद है, तो संसाधन को मिटाएं और उसे फिर से अपलोड करें. इसके लिए, दूसरे चरण में बताया गया तरीका अपनाएं. अगर वेबसाइट बिल्डर का इस्तेमाल नहीं किया जा रहा है, तो सीधे तीसरे चरण पर जाएं.
  2. एपीआई प्रॉक्सी लेवल पर मौजूद संसाधन को मिटाने के लिए, एपीआई प्रॉक्सी एडिटर के नेविगेटर पैन में मौजूद संसाधन टैब पर जाएं. इसके बाद, संसाधन के बगल में मौजूद “X” बटन पर क्लिक करें. यह बटन नीचे दिखाया गया है.

    एनवायरमेंट या संगठन लेवल पर मौजूद संसाधन को मिटाने के लिए, उन एपीआई कॉल पर DELETE वर्ब का इस्तेमाल करें जिनका इस्तेमाल पहले समस्या हल करने के चरणों में किया गया था. उदाहरण के लिए, एनवायरमेंट लेवल पर मौजूद संसाधन को मिटाने के लिए, यह कमांड डालें: curl -X DELETE -v -u <strong>email </strong>"https://api.enterprise.apigee.com/v1/organizations/myorg/environments/myenv/resourcefiles/java/myresource.jar"

  3. सही लेवल (एपीआई प्रॉक्सी, संगठन या एनवायरमेंट लेवल) पर JAR फ़ाइल अपलोड करें.

  4. अगर संसाधन को फिर से अपलोड करने से समस्या ठीक नहीं होती है, तो जिन मैसेज प्रोसेसर पर असर पड़ा है उन्हें रीस्टार्ट करना होगा. अगर Cloud में Apigee Edge का इस्तेमाल किया जा रहा है, तो Apigee की सहायता टीम से संपर्क करें. अगर आप Private Cloud के उपयोगकर्ता हैं, तो Apigee Edge को शुरू करना, बंद करना, फिर से शुरू करना, और उसकी स्थिति देखना लेख पढ़ें.

JavaCalloutInstantiationFailed

गड़बड़ी का मैसेज

Edge यूज़र इंटरफ़ेस (यूआई) या Edge Management API के ज़रिए एपीआई प्रॉक्सी को डिप्लॉय करने पर, यह गड़बड़ी का मैसेज दिखता है:

Error in deployment for environment <var>environment</var>
The revision is deployed, but traffic cannot flow. Failed to instantiate the JavaCallout Class <var>class_name</var>

या

Error in deployment for environment <var>environment</var>.
The revision is deployed and traffic can flow, but flow may be impaired. Failed to instantiate the JavaCallout Class <var>class_name</var>

गड़बड़ी के मैसेज का उदाहरण

Error in deployment for environment test
The revision is deployed, but traffic cannot flow. Failed to instantiate the JavaCallout Class my.class

गड़बड़ी के उदाहरण का स्क्रीनशॉट

वजह

इस गड़बड़ी की सामान्य वजहें यहां दी गई हैं

Cause ब्यौरा
JAR फ़ाइल मौजूद नहीं है गड़बड़ी में बताई गई Java क्लास वाली JAR फ़ाइल अपलोड नहीं की गई है.
खराब JAR फ़ाइल गड़बड़ी में बताई गई Java क्लास वाली JAR फ़ाइल खराब हो गई है या उसे पूरी तरह से अपलोड नहीं किया गया है.
क्लास फ़ाइल मौजूद नहीं है गड़बड़ी में बताई गई Java क्लास फ़ाइल, >ResourceURL< में बताई गई JAR फ़ाइल या उससे जुड़ी JAR फ़ाइलों का हिस्सा नहीं है.
Java कोड से जुड़ी समस्या कोड में कोई गड़बड़ी है. जैसे, कंस्ट्रक्टर मौजूद नहीं है, कोड की डिपेंडेंसी से जुड़ी समस्या है या कोई अन्य समस्या है.

गड़बड़ी का पता लगाने का सामान्य तरीका

  1. उस एनवायरमेंट और क्लास का नाम पता करें जिसे इंपोर्ट नहीं किया जा सका. उदाहरण के लिए, इस गड़बड़ी के मैसेज में एनवायरमेंट का नाम test और क्लास का नाम my.class है:

    Error in deployment for environment test
    The revision is deployed, but traffic cannot flow. Failed to instantiate the JavaCallout Class my.class
    
    

    वजह: JAR फ़ाइल मौजूद नहीं है

संक्रमण की जांच

  1. उस JAR फ़ाइल का पता लगाएं जिसमें क्लास (ऊपर दिए गए पहले चरण में पहचान की गई) मौजूद है और जिसे इंस्टैंशिएट नहीं किया जा सका.
  2. देखें कि JAR फ़ाइल को एपीआई प्रॉक्सी, संगठन या एनवायरमेंट लेवल पर अपलोड किया गया है या नहीं. अगर JAR फ़ाइल को किसी भी लेवल पर अपलोड नहीं किया गया है, तो 'समस्या हल करना' सेक्शन पर जाएं.
  3. अगर JAR फ़ाइल अपलोड की गई है, तो वजह: खराब JAR फ़ाइल पर जाएं.

रिज़ॉल्यूशन

  1. अगर JAR फ़ाइल करप्ट हो गई है या उसे पूरी तरह से अपलोड नहीं किया गया है, तो JAR फ़ाइल को फिर से बनाएं. इसके बाद, सही लेवल (एपीआई प्रॉक्सी, संगठन या एनवायरमेंट लेवल) पर JAR फ़ाइल अपलोड करें.
  2. एपीआई प्रॉक्सी को फिर से डिप्लॉय करें.

वजह: JAR फ़ाइल खराब है

संक्रमण की जांच

  1. उस JAR फ़ाइल का पता लगाएं जिसमें वह क्लास (ऊपर दिए गए पहले चरण में बताई गई) मौजूद है जिसे इंस्टैंटिएट नहीं किया जा सका.
  2. देखें कि कहीं JAR फ़ाइल में कोई गड़बड़ी तो नहीं है. उदाहरण के लिए, अगर फ़ाइल के खराब होने या आंशिक रूप से अपलोड होने की वजह से, उसे अनजार नहीं किया जा सकता. अगर यह फ़ाइल करप्ट हो गई है, तो समस्या हल करने के तरीके पर जाएं.
  3. अगर JAR फ़ाइल में कोई गड़बड़ी नहीं है, तो वजह: क्लास फ़ाइल मौजूद नहीं है पर जाएं.

रिज़ॉल्यूशन

  1. खराब हुई JAR फ़ाइलों को फिर से बनाएं और सही लेवल (एपीआई प्रॉक्सी, संगठन या एनवायरमेंट लेवल) पर JAR फ़ाइल अपलोड करें.
  2. एपीआई प्रॉक्सी को फिर से डिप्लॉय करें.

वजह: क्लास फ़ाइल मौजूद नहीं है

संक्रमण की जांच

  1. देखें कि क्या ऊपर दिए गए पहले चरण में बताई गई Java क्लास फ़ाइल, >ResourceURL< में बताई गई JAR फ़ाइल या उससे जुड़ी किसी JAR फ़ाइल का हिस्सा है.
  2. अगर क्लास फ़ाइल किसी भी JAR फ़ाइल में मौजूद नहीं है, तो आपको गड़बड़ी की वजह का पता चल गया है. 'रिज़ॉल्यूशन' पर जाएं.
  3. अगर क्लास फ़ाइल, JavaCallout नीति में बताई गई किसी JAR फ़ाइल में मौजूद है, तो इसका मतलब है कि Java कोड या उससे जुड़ी क्लास में कोई समस्या है. इस वजह से, यह गड़बड़ी हो रही है. a. अगर आप Public Cloud के उपयोगकर्ता हैं, तो Apigee की सहायता टीम से संपर्क करें. b. अगर आप Private Cloud का इस्तेमाल करते हैं, तो वजह: Java कोड से जुड़ी समस्या पर जाएं.

रिज़ॉल्यूशन

  1. क्लास फ़ाइलें जोड़कर JAR को फिर से बनाएं. इसके बाद, सही लेवल (एपीआई प्रॉक्सी, संगठन या एनवायरमेंट लेवल) पर JAR फ़ाइल अपलोड करें.
  2. एपीआई प्रॉक्सी को फिर से डिप्लॉय करें.

वजह: Java कोड से जुड़ी समस्या

सिर्फ़ Private Cloud के उपयोगकर्ताओं के लिए गड़बड़ी की जानकारी पाने का तरीका

संक्रमण की जांच

  1. मैसेज प्रोसेसर के लॉग (/opt/apigee/var/log/edge-message-processor/system.log और /opt/apigee/var/log/edge-message-processor/configurations.log) देखें.
  2. आपको नीचे दिए गए उदाहरण की तरह कोई अपवाद दिख सकता है:

    2019-07-05 05:40:13,240 org:myorg env:staging target:/organizations/myorg/apiproxies/MyAPI/revisions/5 action:add context-id: mode: Apigee-Main-53 ERROR CONFIG-CHANGE - AbstractConfigurator.add() : Add null to Step failed, reason: {}
    com.apigee.kernel.exceptions.spi.UncheckedException: Failed to instantiate the JavaCallout Class <class name>
    at com.apigee.steps.javacallout.JavaCalloutStepDefinition.newInstance(JavaCalloutStepDefinition.java:116)
    at com.apigee.messaging.runtime.StepDefinition.getStepDefinitionExecution(StepDefinition.java:218)
    …<snipped>
    Caused by: java.lang.reflect.InvocationTargetException: null
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at com.apigee.steps.javacallout.JavaCalloutStepDefinition.access$100(JavaCalloutStepDefinition.java:41)
    at com.apigee.steps.javacallout.JavaCalloutStepDefinition$CallOutWrapper.initialize(JavaCalloutStepDefinition.java:131)
    at com.apigee.steps.javacallout.JavaCalloutStepDefinition$CallOutWrapper.<init>(JavaCalloutStepDefinition.java:126)
    ... 42 common frames omitted
    Caused by: <Reason>
    
    ...<snipped>
    
    
  3. पुष्टि न हो पाने की वजह जानने के लिए, अपवाद के बारे में दी गई जानकारी को ध्यान से पढ़ें. आम तौर पर, इससे आपके Java कोड में किसी समस्या का पता चल सकता है.

रिज़ॉल्यूशन

  1. समस्या की वजह के आधार पर, आपको अपने Java कोड में समस्या को ठीक करना पड़ सकता है.
  2. क्लास फ़ाइलें जोड़कर JAR को फिर से बनाएं. इसके बाद, सही लेवल (एपीआई प्रॉक्सी, संगठन या एनवायरमेंट लेवल) पर JAR फ़ाइल अपलोड करें.
  3. एपीआई प्रॉक्सी को फिर से डिप्लॉय करें.

JAR फ़ाइल अपलोड करना

पक्का करें कि एपीआई प्रॉक्सी, एनवायरमेंट या संगठन के लेवल पर, सभी ज़रूरी क्लास वाला संसाधन एलिमेंट मौजूद हो. ज़्यादा जानकारी के लिए, संसाधन फ़ाइलें देखें.

  1. एपीआई प्रॉक्सी लेवल पर कोई संसाधन अपलोड करने के लिए, Resources टैब पर मौजूद + (प्लस का निशान) पर क्लिक करें. इसके बाद, फ़ाइल इंपोर्ट करें को चुनें और अपनी लोकल मशीन से फ़ाइल अपलोड करें. फ़ाइल का नाम, >ResourceURL< एलिमेंट से मेल खाना चाहिए. हालांकि, इसमें java:// प्रीफ़िक्स शामिल नहीं होना चाहिए.

  2. अगर आपको किसी संसाधन को एक ही एनवायरमेंट में एक से ज़्यादा एपीआई प्रॉक्सी के लिए उपलब्ध कराना है, तो संसाधन को एनवायरमेंट में अपलोड करें. आपको Edge API का इस्तेमाल करना होगा. इसके बारे में संसाधन फ़ाइलों में बताया गया है.

    उदाहरण के लिए, एनवायरमेंट लेवल पर बताई गई फ़ाइल को अपलोड करने के लिए, लोकल मशीन से यह एपीआई कॉल डालें:

    curl -v -u email -H "Content-Type: application/octet-stream" \
    -X POST --data-binary @{classes.jar} \
    "http://{mgmt_server}:{port}/v1/organizations/myorg/environments/myenv/resourcefiles?name=myresouce.jar&type=java"
    

    फ़ाइल वाली डायरेक्ट्री से ही एपीआई कॉल करें.

  3. अगर आपको फ़ाइल को संगठन के सभी एनवायरमेंट में मौजूद सभी एपीआई प्रॉक्सी के लिए उपलब्ध कराना है, तो बेसपाथ में एनवायरमेंट की जानकारी शामिल न करें. उदाहरण के लिए:

    curl -v -u email -H "Content-Type: application/octet-stream" \
    -X POST --data-binary @{classes.jar} \
    "http://{mgmt_server}:{port}/v1/organizations/myorg/resourcefiles?name=myresouce.jar&type=java"