JavaCallout নীতি রানটাইম ত্রুটি সমস্যা সমাধান

আপনি Apigee Edge-এর ডকুমেন্টেশন দেখছেন।
Apigee X ডকুমেন্টেশন
.info- তে যান।

রিসোর্সটি বিদ্যমান নেই

ত্রুটি বার্তা

Edge UI অথবা Edge ম্যানেজমেন্ট API-এর মাধ্যমে 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> এলিমেন্টে নির্দিষ্ট করা রিসোর্সটি যদি API প্রক্সি, এনভায়রনমেন্ট বা অর্গানাইজেশন লেভেলে বিদ্যমান না থাকে, তাহলে API প্রক্সির ডেপ্লয়মেন্ট ব্যর্থ হয়।

রোগ নির্ণয়

  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> 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 ব্যবহার করে নিম্নলিখিত API কলটি করুন: curl -v -u <strong>email </strong>"https://api.enterprise.apigee.com/v1/organizations/myorg/environments/myenv/resourcefiles/java/myresource.jar"

      • সংস্থা স্তরে রিসোর্সটি বিদ্যমান আছে কিনা তা নির্ধারণ করতে, এনভায়রনমেন্টের বিবরণ বাদ দিয়ে curl ব্যবহার করে নিম্নলিখিত API কলটি করুন: curl -v -u email "https://api.enterprise.apigee.com/v1/organizations/myorg/resourcefiles/java/myresource.jar"

      এই API-গুলোর প্রতিক্রিয়া হিসাবে যদি আপনি 404 স্ট্যাটাস কোড পান, তাহলে রিসোর্সটি অর্গানাইজেশন এবং এনভায়রনমেন্ট উভয় স্তরেই অনুপস্থিত।

    যদি রিসোর্সটি এপিআই প্রক্সি, অর্গানাইজেশন এবং এনভায়রনমেন্ট লেভেলে উপলব্ধ না থাকে, তাহলে ডিপ্লয়মেন্ট এরর ফেরত দেওয়া হয়:

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

সমাধান

নিশ্চিত করুন যে <ResourceURL> এলিমেন্টে নির্দিষ্ট করা রিসোর্সটি এপিআই প্রক্সি, এনভায়রনমেন্ট বা অর্গানাইজেশন লেভেলে বিদ্যমান আছে। আরও তথ্যের জন্য, রিসোর্স ফাইলস দেখুন।

উপরে দেখানো উদাহরণ JavaCallout পলিসিটি সংশোধন করতে, JAR ফাইলটি উপযুক্ত স্তরে (API প্রক্সি, সংস্থা, বা পরিবেশ স্তর) আপলোড করুন

NoResourceForURL

ত্রুটি বার্তা

Edge UI অথবা Edge ম্যানেজমেন্ট API-এর মাধ্যমে 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 ব্যবহার করে নিম্নলিখিত API কলটি করুন: curl -v -u <strong>email </strong>"https://api.enterprise.apigee.com/v1/organizations/myorg/environments/myenv/resourcefiles/java/myresource.jar"

    সংস্থা পর্যায়ে রিসোর্সটি বিদ্যমান আছে কিনা তা নির্ধারণ করতে, এনভায়রনমেন্টের বিবরণ বাদ দিয়ে curl ব্যবহার করে নিম্নলিখিত API কলটি করুন: curl -v -u email "https://api.enterprise.apigee.com/v1/organizations/myorg/resourcefiles/java/myresource.jar"

    এই API-গুলোর প্রতিক্রিয়া হিসাবে যদি আপনি 404 স্ট্যাটাস কোড পান, তাহলে রিসোর্সটি অর্গানাইজেশন এবং এনভায়রনমেন্ট উভয় স্তরেই অনুপস্থিত।

সমাধান

  1. যদি আপনি নিশ্চিত হন যে রিসোর্সটি এপিআই প্রক্সি, অর্গানাইজেশন বা এনভায়রনমেন্ট লেভেলে বিদ্যমান, তাহলে ধাপ ২-এ বর্ণিত পদ্ধতি অনুযায়ী রিসোর্সটি ডিলিট করে পুনরায় আপলোড করুন। অন্যথায়, সরাসরি ধাপ ৩-এ চলে যান।
  2. এপিআই প্রক্সি লেভেলে রিসোর্সটি ডিলিট করতে, এপিআই প্রক্সি এডিটরের নেভিগেটর প্যানে থাকা রিসোর্সেস ট্যাবে যান এবং নিচে দেখানো অনুযায়ী রিসোর্সটির পাশে থাকা “X” বাটনে ক্লিক করুন।

    এনভায়রনমেন্ট বা অর্গানাইজেশন লেভেলে রিসোর্স ডিলিট করতে, পূর্বে ডায়াগনোসিস ধাপে ব্যবহৃত API কলগুলিতে 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. রিসোর্সটি পুনরায় আপলোড করার পরেও যদি সমস্যার সমাধান না হয়, তাহলে সংশ্লিষ্ট মেসেজ প্রসেসরগুলোকে রিস্টার্ট করতে হবে। আপনি যদি ক্লাউডে Apigee Edge ব্যবহার করেন, তাহলে Apigee Support-এর সাথে যোগাযোগ করুন। আপনি যদি একজন প্রাইভেট ক্লাউড ব্যবহারকারী হন, তাহলে Apigee Edge চালু করা, বন্ধ করা, রিস্টার্ট করা এবং এর স্ট্যাটাস চেক করা দেখুন।

জাভা কলআউট ইনস্ট্যানসিয়েশন ব্যর্থ হয়েছে

ত্রুটি বার্তা

Edge UI অথবা Edge ম্যানেজমেন্ট API-এর মাধ্যমে 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

ত্রুটির স্ক্রিনশটের উদাহরণ

কারণ

এই ত্রুটির সাধারণ কারণগুলো নিচে দেওয়া হলো।

কারণ বর্ণনা
JAR ফাইল অনুপস্থিত ত্রুটিতে চিহ্নিত জাভা ক্লাসটি ধারণকারী JAR ফাইলটি আপলোড করা হয়নি।
ত্রুটিপূর্ণ JAR ফাইল ত্রুটিতে উল্লেখিত জাভা ক্লাস ধারণকারী JAR ফাইলটি ত্রুটিপূর্ণ বা আংশিকভাবে আপলোড করা হয়েছে।
অনুপস্থিত ক্লাস ফাইল ত্রুটিতে চিহ্নিত জাভা ক্লাস ফাইলটি >ResourceURL<-এ নির্দিষ্ট করা JAR ফাইল বা এর উপর নির্ভরশীল JAR ফাইলগুলোর অংশ নয়।
জাভা কোডের সমস্যা কোডে কোনো ত্রুটি আছে, যেমন কনস্ট্রাক্টরের অনুপস্থিতি, কোড নির্ভরতার সমস্যা বা অন্য কোনো সমস্যা।

সাধারণ রোগ নির্ণয়ের ধাপ

  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 ফাইলটি API প্রক্সি, অর্গানাইজেশন বা এনভায়রনমেন্ট লেভেলে আপলোড করা হয়েছে কিনা তা পরীক্ষা করুন। যদি JAR ফাইলটি কোনো লেভেলেই আপলোড না করা থাকে, তাহলে রেজোলিউশন-এ যান।
  3. যদি JAR ফাইলটি আপলোড করা হয়ে থাকে, তাহলে ‘কারণ: ত্রুটিপূর্ণ JAR ফাইল’ অংশে যান।

সমাধান

  1. যদি JAR ফাইলটি ত্রুটিপূর্ণ বা আংশিকভাবে আপলোড করা হয়, তাহলে JAR ফাইলটি পুনর্নির্মাণ করুন এবং উপযুক্ত স্তরে (API প্রক্সি, সংস্থা বা পরিবেশ স্তর) আপলোড করুন
  2. এপিআই প্রক্সিটি পুনরায় স্থাপন করুন।

কারণ: ত্রুটিপূর্ণ JAR ফাইল

রোগ নির্ণয়

  1. সেই JAR ফাইলটি শনাক্ত করুন, যেটিতে উপরে ধাপ #১-এ চিহ্নিত সেই ক্লাসটি থাকার কথা, যা ইনস্ট্যানশিয়েট করা যায়নি।
  2. নির্দিষ্ট JAR ফাইলটি ত্রুটিপূর্ণ কিনা তা পরীক্ষা করুন। উদাহরণস্বরূপ, ফাইলটি ত্রুটিপূর্ণ বা আংশিকভাবে আপলোড হওয়ার কারণে আপনি যদি এটি আনজার করতে না পারেন। যদি এটি ত্রুটিপূর্ণ হয়, তাহলে রেজোলিউশন-এ যান।
  3. যদি JAR ফাইলটি ত্রুটিপূর্ণ না হয়, তাহলে "কারণ: অনুপস্থিত ক্লাস ফাইল" অংশে যান।

সমাধান

  1. ক্ষতিগ্রস্ত JAR ফাইল(গুলি) পুনর্নির্মাণ করুন এবং উপযুক্ত স্তরে (API প্রক্সি, সংস্থা, বা পরিবেশ স্তর ) JAR ফাইলটি আপলোড করুন
  2. এপিআই প্রক্সিটি পুনরায় স্থাপন করুন।

কারণ: ক্লাস ফাইল অনুপস্থিত

রোগ নির্ণয়

  1. উপরে ধাপ #১-এ চিহ্নিত নির্দিষ্ট জাভা ক্লাস ফাইলটি >ResourceURL<-এ উল্লেখিত JAR ফাইল বা এর উপর নির্ভরশীল কোনো JAR ফাইলের অংশ কিনা, তা যাচাই করুন।
  2. যদি ক্লাস ফাইলটি কোনো JAR ফাইলে না থাকে, তাহলে আপনি ত্রুটির কারণটি নির্ধারণ করেছেন। সমাধানে যান।
  3. যদি ক্লাস ফাইলটি JavaCallout পলিসিতে উল্লেখিত JAR ফাইলগুলির মধ্যে একটিতে থাকে, তাহলে অবশ্যই জাভা কোড বা নির্ভরশীল ক্লাসে কোনো সমস্যা আছে, যার কারণে এই ত্রুটিটি ঘটছে। ক. আপনি যদি একজন পাবলিক ক্লাউড ব্যবহারকারী হন, তাহলে Apigee সাপোর্টের সাথে যোগাযোগ করুন। খ. আপনি যদি একজন প্রাইভেট ক্লাউড ব্যবহারকারী হন, তাহলে "কারণ: জাভা কোডের সমস্যা " অংশে যান।

সমাধান

  1. অনুপস্থিত ক্লাস ফাইল(গুলি) দিয়ে JAR ফাইলটি পুনর্নির্মাণ করুন এবং উপযুক্ত স্তরে (API প্রক্সি, সংস্থা, বা পরিবেশ স্তর) JAR ফাইলটি আপলোড করুন
  2. এপিআই প্রক্সি পুনরায় স্থাপন করুন।

কারণ: জাভা কোডের সমস্যা

শুধুমাত্র প্রাইভেট ক্লাউড ব্যবহারকারীদের জন্য রোগ নির্ণয়ের পদক্ষেপ

রোগ নির্ণয়

  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. ব্যর্থতার কারণ বোঝার জন্য এক্সেপশনটি মনোযোগ সহকারে পড়ুন। সাধারণত, এটি আপনার জাভা কোডের কোনো সমস্যার দিকে ইঙ্গিত করতে পারে।

সমাধান

  1. ব্যর্থতার কারণের উপর নির্ভর করে, আপনাকে আপনার জাভা কোডে সমস্যাটি সমাধান করতে হতে পারে।
  2. অনুপস্থিত ক্লাস ফাইল(গুলি) দিয়ে JAR ফাইলটি পুনর্নির্মাণ করুন এবং উপযুক্ত স্তরে (API প্রক্সি, সংস্থা, বা পরিবেশ স্তর) JAR ফাইলটি আপলোড করুন
  3. এপিআই প্রক্সি পুনরায় স্থাপন করুন।

JAR ফাইলটি আপলোড করুন

নিশ্চিত করুন যে API প্রক্সি, এনভায়রনমেন্ট বা অর্গানাইজেশন লেভেলে সমস্ত প্রয়োজনীয় ক্লাস সহ রিসোর্স এলিমেন্টটি বিদ্যমান আছে। আরও তথ্যের জন্য, রিসোর্স ফাইলস দেখুন।

  1. এপিআই প্রক্সি লেভেলে কোনো রিসোর্স আপলোড করতে, রিসোর্সেস ট্যাবে থাকা + (প্লাস চিহ্ন)-এ ক্লিক করুন, তারপর ‘ইম্পোর্ট ফাইল’ নির্বাচন করে আপনার লোকাল মেশিন থেকে ফাইলটি আপলোড করুন। ফাইলের নামটি অবশ্যই >ResourceURL< এলিমেন্টের সাথে মিলতে হবে, তবে java:// প্রিফিক্সটি ছাড়া।

  2. যদি আপনি চান যে একই পরিবেশে কোনো রিসোর্স একাধিক এপিআই প্রক্সির জন্য উপলব্ধ হোক, তাহলে রিসোর্সটি পরিবেশে আপলোড করুন। এর জন্য আপনাকে এজ এপিআই (Edge API) ব্যবহার করতে হবে, যেমনটি রিসোর্স ফাইল (Resource files) অংশে বর্ণনা করা হয়েছে।

    উদাহরণস্বরূপ, এনভায়রনমেন্ট লেভেলে নির্দিষ্ট ফাইলটি আপলোড করতে লোকাল মেশিন থেকে নিম্নলিখিত 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"