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

আপনি Apigee Edge ডকুমেন্টেশন দেখছেন।
Apigee X ডকুমেন্টেশন দেখুন।
তথ্য

ResourceDoesNotExist

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

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

    • API প্রক্সি লেভেলে আপলোড করা সব রিসোর্স দেখতে API প্রক্সি এডিটরের নেভিগেটর প্যানেলে রিসোর্স ট্যাবে নেভিগেট করুন। এই উদাহরণে API প্রক্সিতে কোনও রিসোর্স আপলোড করা হয়নি।

    • এনভায়রনমেন্ট বা সংস্থা লেভেলে রিসোর্স উপলভ্য থাকতে পারে। আরও তথ্যের জন্য, রিসোর্স ফাইল দেখুন।

      • এনভায়রনমেন্ট লেভেলে রিসোর্স আছে কিনা তা নির্ধারণ করতে, 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 স্ট্যাটাস কোড পেলে, বুঝতে হবে যে রিসোর্সটি সংস্থা ও এনভায়রনমেন্ট, দুটি লেভেলেই অনুপস্থিত।

    API প্রক্সি, সংস্থা ও এনভায়রনমেন্ট লেভেলে রিসোর্স উপলভ্য না থাকলে, ডিপ্লয়মেন্ট সংক্রান্ত সমস্যা দেখানো হয়:

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

রেজোলিউশন

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

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

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

সমস্যার স্ক্রিনশটের উদাহরণ

কারণ

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

ডায়াগনসিস

  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. API প্রক্সি, এনভায়রনমেন্ট বা সংস্থা লেভেলে রিসোর্স আপলোড করা হয়েছে কিনা তা নিশ্চিত করুন। নিচের উদাহরণে, আপনি দেখতে পাবেন যে রিসোর্স myresource.jar API প্রক্সি লেভেলে আপলোড করা হয়েছে।

    এনভায়রনমেন্ট বা সংস্থা লেভেলে রিসোর্স উপলভ্য থাকতে পারে। আরও তথ্যের জন্য, রিসোর্স ফাইল দেখুন।

    এনভায়রনমেন্ট লেভেলে রিসোর্স আছে কিনা তা নির্ধারণ করতে, 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. আপনি যদি নির্ধারণ করেন যে API প্রক্সি, সংস্থা বা এনভায়রনমেন্ট লেভেলে রিসোর্সটি বিদ্যমান, তাহলে ২ নম্বর ধাপে বর্ণিত পদ্ধতিতে রিসোর্সটি মুছে দিন এবং আবার আপলোড করুন। অন্যথায়, ৩ নম্বর ধাপে যান।
  2. API প্রক্সি লেভেলে রিসোর্স মুছে দিতে, API প্রক্সি এডিটরের নেভিগেটর প্যানেলে রিসোর্স ট্যাবে নেভিগেট করুন এবং নিচে দেখানো রিসোর্সের পাশে "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. সঠিক লেভেলে (API প্রক্সি, সংস্থা বা এনভায়রনমেন্ট লেভেল) JAR ফাইল আপলোড করুন)।

  4. রিসোর্স আবার আপলোড করেও কোনও লাভ না হলে, প্রভাবিত মেসেজ প্রসেসর রিস্টার্ট করতে হবে। আপনি ক্লাউডে Apigee Edge ব্যবহার করলে, Apigee সহায়তা টিমের সাথে যোগাযোগ করুন। আপনি Private Cloud ব্যবহারকারী হলে, Apigee Edge চালু, বন্ধ ও রিস্টার্ট করা এবং স্ট্যাটাস চেক করা দেখুন।

JavaCalloutInstantiationFailed

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

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 ফাইল নেই সমস্যাতে শনাক্ত করা 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 ফাইলে ক্লাস (উপরে #১ ধাপে শনাক্ত করা হয়েছে) থাকার কথা এবং যা ইনস্ট্যানশিয়েট করা যায়নি, সেটি নির্ধারণ করুন।
  2. API প্রক্সি, সংস্থা বা এনভায়রনমেন্ট লেভেলে নির্দিষ্ট JAR ফাইল আপলোড করা হয়েছে কিনা তা চেক করুন। কোনও লেভেলে JAR ফাইল আপলোড করা না থাকলে, সমাধানের বিভাগে যান।
  3. JAR ফাইল আপলোড করা হয়ে থাকলে, কারণ: JAR ফাইলে সমস্যা আছে বিকল্পে যান।

রেজোলিউশন

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

কারণ: JAR ফাইল করাপ্ট হয়ে গেছে

ডায়াগনসিস

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

রেজোলিউশন

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

কারণ: ক্লাস ফাইল নেই

ডায়াগনসিস

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

রেজোলিউশন

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

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

রেজোলিউশন

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

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

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

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

  2. আপনি যদি চান যে একই এনভায়রনমেন্টে একাধিক API প্রক্সির জন্য কোনও রিসোর্স উপলভ্য হোক, তাহলে এনভায়রনমেন্টে রিসোর্স আপলোড করুন। রিসোর্স ফাইল-এ যেভাবে বর্ণনা করা হয়েছে, সেইভাবে আপনাকে Edge API ব্যবহার করতে হবে।

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

    যে ডিরেক্টরিতে ফাইলটি আছে সেখান থেকেই API কল ইস্যু করুন।

  3. সংস্থার মধ্যে সব এনভায়রনমেন্টে সব API প্রক্সির জন্য ফাইল উপলভ্য করতে, আপনি basepath-এ এনভায়রনমেন্টের বিবরণ বাদ দিতে পারেন। যেমন:

    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"