Java कॉलआउट की गड़बड़ियों को कैसे मैनेज करें

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

Java कॉलआउट क्या होता है?

अगर आपने Java कॉलआउट का इस्तेमाल पहले कभी नहीं किया है, तो हमारा सुझाव है कि आप Java कॉलआउट बनाने का तरीका लेख से शुरुआत करें.

Java कॉलआउट में गड़बड़ियों को ठीक करना

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

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

प्रोजेक्ट डाउनलोड करना

आसानी के लिए, इस प्रोजेक्ट को GitHub पर मौजूद Apigee api-platform-samples डेटाबेस से डाउनलोड किया जा सकता है.

  1. api-platform-samples को अपने सिस्टम पर डाउनलोड करें या क्लोन करें.
  2. अपनी पसंद के किसी टर्मिनल या कोड एडिटर में, api-platform-samples/doc-samples/java-error प्रोजेक्ट पर जाएं.

Java कोड का उदाहरण

गड़बड़ी ठीक करने के पैटर्न आसान हैं. `messageContext.setVariable()` तरीके से, Edge के मौजूदा फ़्लो कॉन्टेक्स्ट में फ़्लो वैरिएबल सेट किए जा सकते हैं. गड़बड़ी की कस्टम जानकारी दिखाने के लिए, ExecutionResult इंस्टेंस बनाएं. इसके बाद, गड़बड़ी का जवाब और हेडर सेट करने के लिए, इस पर तरीके कॉल करें.

package com.apigeesample;

import com.apigee.flow.execution.ExecutionContext;
import com.apigee.flow.execution.ExecutionResult;
import com.apigee.flow.execution.spi.Execution;
import com.apigee.flow.message.MessageContext;
import com.apigee.flow.execution.Action;

import org.apache.commons.lang.exception.ExceptionUtils;


public class JavaError implements Execution {
    public ExecutionResult execute(MessageContext messageContext, ExecutionContext executionContext) {

        try {

                String name = messageContext.getMessage().getHeader("username");

                if (name != null && name.length()>0) {
                        messageContext.getMessage().setContent("Hello, " + name + "!");
                        messageContext.getMessage().removeHeader("username");

                } else {
                        throw new RuntimeException("Please specify a name parameter!");
                }

                return ExecutionResult.SUCCESS;

        } catch (RuntimeException ex) {

            ExecutionResult executionResult = new ExecutionResult(false, Action.ABORT);

            //--Returns custom error message and header
            executionResult.setErrorResponse(ex.getMessage());
            executionResult.addErrorResponseHeader("ExceptionClass", ex.getClass().getName());

            //--Set flow variables -- may be useful for debugging.
            messageContext.setVariable("JAVA_ERROR", ex.getMessage());
            messageContext.setVariable("JAVA_STACKTRACE", ExceptionUtils.getStackTrace(ex));
            return executionResult;
        }
    }
}


Maven की मदद से अपना कोड कंपाइल करना

प्रोजेक्ट को इस तरह सेट अप किया गया है कि इसे Maven की मदद से कंपाइल किया जा सके. अगर आपको javac का इस्तेमाल करना है, तो हम एक उदाहरण भी शामिल करेंगे.

  1. पक्का करें कि आपने Maven इंस्टॉल किया हो:
    mvn -version
  2. java-error/buildsetup.sh स्क्रिप्ट को लागू करें. यह स्क्रिप्ट, आपके स्थानीय Maven रेपो में ज़रूरी JAR डिपेंडेंसी इंस्टॉल करती है.
  3. java-error/callout डायरेक्ट्री पर जाएं.
  4. Maven को लागू करें:
    mvn clean package
  5. अगर चाहें, तो पुष्टि करें कि JAR फ़ाइल edge-custom-policy-java-error.jar को java-error/apiproxy/resources/java में कॉपी किया गया है. यह JAR फ़ाइलों के लिए ज़रूरी जगह है. इन फ़ाइलों को प्रॉक्सी के साथ डिप्लॉय किया जाता है.

javac की मदद से कंपाइल करना

अगर आपको कोड कंपाइल करने के लिए javac का इस्तेमाल करना है, तो java-error डायरेक्ट्री से, यहां दिए गए तरीके का इस्तेमाल किया जा सकता है. ज़रूरी JAR फ़ाइलें, आपके लिए java-error/lib डायरेक्ट्री में उपलब्ध हैं.

  1. api-platform-samples/doc-samples/java-error पर जाएं.
  2. पक्का करें कि आपके पाथ में javac मौजूद हो.

    javac -version
  3. javac का यह निर्देश लागू करें:

    javac -d . -classpath ./lib/expressions-1.0.0.jar:./lib/message-flow-1.0.0.jar:. callout/src/main/java/JavaProperties.java
  4. JAR फ़ाइल को apiproxy/resources/java डायरेक्ट्री में कॉपी करें. यह JAR फ़ाइलों के लिए ज़रूरी जगह है . इन फ़ाइलों को प्रॉक्सी के साथ डिप्लॉय किया जाता है.

    cp com/apigeesample/JavaProperties.class apiproxy/resources/java

प्रॉक्सी डिप्लॉय करना और उसे कॉल करना

डिप्लॉय करने की स्क्रिप्ट, ./java-error डायरेक्ट्री में उपलब्ध है. हालांकि, इसे चलाने से पहले, आपको सेटअप करना होगा.

  1. api-platform-samples/doc-samples/java-error पर जाएं
  2. अगर आपने पहले से ऐसा नहीं किया है, तो फ़ाइल ../../setup/setenv.sh खोलें और इसमें अपने Apigee खाते की जानकारी डालें: जैसे: आपका उपयोगकर्ता नाम (आपके खाते से जुड़ा ईमेल पता), आपकी संगठन का नाम, और एपीआई मैनेजमेंट कॉल करने के लिए इस्तेमाल किया जाने वाला डोमेन. उदाहरण के लिए, Edge Cloud के लिए डोमेन https://api.enterprise.apigee.com है. हालांकि, अगर Edge Private Cloud का इस्तेमाल किया जा रहा है, तो आपका डोमेन अलग हो सकता है.
  3. setenv.sh फ़ाइल सेव करें.
  4. डिप्लॉय करने की स्क्रिप्ट लागू करें:
    ./deploy.sh
  5. अगर डिप्लॉय करने की प्रोसेस पूरी हो जाती है, तो स्क्रिप्ट लागू करें:
    ./invoke.sh

    स्क्रिप्ट लागू करने पर, cURL का एक निर्देश कॉल होता है. यह निर्देश ऐसा दिखता है:

    curl  http://$org-$env.$api_domain/java-error

    कॉल में "name" क्वेरी पैरामीटर शामिल नहीं होने की वजह से, Java कोड में रनटाइम गड़बड़ी होती है. प्रॉक्सी, यह मैसेज और हेडर दिखाता है:

  • गड़बड़ी का मैसेज: Please specify a name parameter!
  • हेडर: ExceptionClass: java.lang.RuntimeException