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. java-error/callout ডিরেক্টরিতে cd করুন।
  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-এ cd করুন।
  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. apiproxy/resources/java ডিরেক্টরিতে JAR ফাইল কপি করুন। প্রক্সি সহ ডিপ্লয় করতে চাওয়া JAR ফাইলের জন্য এই লোকেশনটি প্রয়োজন।

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

প্রক্সি ডিপ্লয় ও কল করা

./java-error ডিরেক্টরিতে একটি ডিপ্লয় স্ক্রিপ্ট প্রদান করা হয়েছে। তবে এটি চালানোর আগে, আপনাকে দ্রুত সেট-আপ করতে হবে।

  1. api-platform-samples/doc-samples/java-error-এ cd করুন
  2. আপনি যদি এটি এখনও না করে থাকেন, তাহলে ফাইলটি খুলুন ../../setup/setenv.sh এবং আপনার Apigee অ্যাকাউন্টের তথ্য অনুসারে এটি এডিট করুন: আপনার ইউজারনেম (আপনার অ্যাকাউন্টের সাথে যুক্ত ইমেল আইডি ), আপনার প্রতিষ্ঠানের নাম এবং API ম্যানেজমেন্ট কল করার জন্য আপনি যে ডোমেন ব্যবহার করেন। যেমন, Edge ক্লাউডের জন্য ডোমেন হল https://api.enterprise.apigee.com; তবে, আপনি Edge প্রাইভেট ক্লাউড ব্যবহার করলে আপনার ডোমেন আলাদা হতে পারে।
  3. setenv.sh ফাইলটি সেভ করুন।
  4. ডেপ্লয় স্ক্রিপ্ট এক্সিকিউট করুন:
    ./deploy.sh
  5. ডেপ্লয় করা হয়ে গেলে, ইনভোক স্ক্রিপ্ট এক্সিকিউট করুন:
    ./invoke.sh

    ইনভোক স্ক্রিপ্ট একটি cURL কমান্ড কল করে যা দেখতে এইরকম:

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

    কলটিতে "name" কোয়েরি প্যারামিটার না থাকার কারণে, জাভা কোড রানটাইম এরর দেখায়। প্রক্সি এই মেসেজ ও হেডার রিটার্ন করে:

  • সমস্যা সংক্রান্ত মেসেজ: Please specify a name parameter!
  • শীর্ষক: ExceptionClass: java.lang.RuntimeException