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

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

ResourceDoesNotExist

गड़बड़ी संदेश

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

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.

गड़बड़ी का उदाहरण

वजह

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

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

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

    Error Deploying Revision 1 to test
    Resource with name myresource.jar and type java does not exist.
    
  2. ऊपर चरण #1 में बताए गए संसाधन का इस्तेमाल करने वाली Java कॉलआउट नीति तय करें.

    उदाहरण के लिए, यह नीति <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 -v -u <strong>email </strong>"https://api.enterprise.apigee.com/v1/organizations/myorg/environments/myenv/resourcefiles/java/myresource.jar"

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

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

NoResourceForURL

गड़बड़ी संदेश

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

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 -v -u <strong>email </strong>"https://api.enterprise.apigee.com/v1/organizations/myorg/environments/myenv/resourcefiles/java/myresource.jar"

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

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

रिज़ॉल्यूशन

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

    परिवेश या संगठन के लेवल पर संसाधन को मिटाने के लिए, उन एपीआई कॉल पर 'मिटाएं' कार्रवाई का इस्तेमाल करें जिनका इस्तेमाल पहले विश्लेषण के चरणों में किया गया था. उदाहरण के लिए, एनवायरमेंट लेवल पर संसाधन को मिटाने के लिए, यह निर्देश डालें: 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 मैनेजमेंट एपीआई से एपीआई प्रॉक्सी को डिप्लॉय नहीं किया जा सकता:

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

रिज़ॉल्यूशन

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

वजह: गड़बड़ी वाली JAR फ़ाइल

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

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

रिज़ॉल्यूशन

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

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

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

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

रिज़ॉल्यूशन

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

कारण: Java कोड से जुड़ी समस्या

सिर्फ़ प्राइवेट क्लाउड उपयोगकर्ताओं के लिए गड़बड़ी की जानकारी के चरण

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

  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. एपीआई प्रॉक्सी लेवल पर संसाधन अपलोड करने के लिए, संसाधन टैब पर + (प्लस का निशान) पर क्लिक करें. इसके बाद, फ़ाइल इंपोर्ट करें चुनें और अपने कंप्यूटर से फ़ाइल अपलोड करें. फ़ाइल का नाम >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"