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

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

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. cd को 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. cd से 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 फ़ाइल को apiप्रॉक्सी/resources/java डायरेक्ट्री में कॉपी करें. यह JAR फ़ाइलों के लिए जगह की जानकारी है, जिसे आपको प्रॉक्सी की मदद से डिप्लॉय करना है.

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

प्रॉक्सी डिप्लॉय करें और कॉल करें

./java-error डायरेक्ट्री में एक डिप्लॉय स्क्रिप्ट दी गई है. हालांकि, इसे चलाने से पहले आपको तेज़ी से सेटअप करना होगा.

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

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

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

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

  • गड़बड़ी संदेश: Please specify a name parameter!
  • हेडर: ExceptionClass: java.lang.RuntimeException