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

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

সম্পদের অস্তিত্ব নেই

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

এজ ইউআই বা এজ ম্যানেজমেন্ট এপিআই এর মাধ্যমে এপিআই প্রক্সির স্থাপনা এই ত্রুটি বার্তার সাথে ব্যর্থ হয়:

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 নীতি নির্ধারণ করুন যা উপরের ধাপ # 1 এ চিহ্নিত সম্পদ ব্যবহার করছে।

    উদাহরণস্বরূপ, নিম্নলিখিত নীতি < 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 প্রক্সিতে আপলোড করা কোনো সংস্থান নেই।

    • সম্পদ পরিবেশ বা প্রতিষ্ঠান পর্যায়ে উপলব্ধ হতে পারে. আরও তথ্যের জন্য, সম্পদ ফাইল দেখুন।

      • পরিবেশ স্তরে সংস্থানটি বিদ্যমান কিনা তা নির্ধারণ করতে, কার্ল ব্যবহার করে নিম্নলিখিত API কলটি ইস্যু করুন: curl -v -u <strong>email </strong>"https://api.enterprise.apigee.com/v1/organizations/myorg/environments/myenv/resourcefiles/java/myresource.jar"

      • সংস্থার স্তরে সংস্থানটি বিদ্যমান কিনা তা নির্ধারণ করতে, পরিবেশের বিবরণ বাদ দিয়ে কার্ল ব্যবহার করে নিম্নলিখিত 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 নীতি সংশোধন করতে, JAR ফাইলটি যথাযথ স্তরে আপলোড করুন (API প্রক্সি, সংস্থা, বা পরিবেশ স্তর)।

NoResourceForURL

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

এজ ইউআই বা এজ ম্যানেজমেন্ট এপিআই এর মাধ্যমে এপিআই প্রক্সির স্থাপনা এই ত্রুটি বার্তার সাথে ব্যর্থ হয়:

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 প্রক্সি স্তরে আপলোড করা হয়েছে৷

    সম্পদ পরিবেশ বা প্রতিষ্ঠান পর্যায়ে উপলব্ধ হতে পারে. আরও তথ্যের জন্য, সম্পদ ফাইল দেখুন।

    পরিবেশ স্তরে সংস্থানটি বিদ্যমান কিনা তা নির্ধারণ করতে, কার্ল ব্যবহার করে নিম্নলিখিত API কলটি ইস্যু করুন: curl -v -u <strong>email </strong>"https://api.enterprise.apigee.com/v1/organizations/myorg/environments/myenv/resourcefiles/java/myresource.jar"

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

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

রেজোলিউশন

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

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

JavaCallout Instantiation ব্যর্থ হয়েছে৷

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

এজ ইউআই বা এজ ম্যানেজমেন্ট এপিআই এর মাধ্যমে এপিআই প্রক্সির স্থাপনা এই ত্রুটি বার্তার সাথে ব্যর্থ হয়:

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 ফাইলটি দূষিত/আংশিকভাবে আপলোড করা হয়েছে।
ক্লাস ফাইল অনুপস্থিত ত্রুটিতে চিহ্নিত Java ক্লাস ফাইলটি >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 ফাইলটি নির্ধারণ করুন যা ক্লাস ধারণ করে (উপরে ধাপ # 1 এ চিহ্নিত করা হয়েছে) এবং যেটি তাত্ক্ষণিক করা যাবে না।
  2. নির্দিষ্ট JAR ফাইলটি API প্রক্সি, সংস্থা বা পরিবেশ স্তরে আপলোড করা হয়েছে কিনা তা পরীক্ষা করুন৷ যদি JAR ফাইলটি কোনো স্তরে আপলোড না হয়, তাহলে রেজোলিউশনে যান।
  3. যদি JAR ফাইলটি আপলোড করা হয়, তাহলে Cause: Corrupted JAR ফাইলে যান।

রেজোলিউশন

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

কারণ: দূষিত JAR ফাইল

রোগ নির্ণয়

  1. JAR ফাইলটি নির্ধারণ করুন যা ক্লাস ধারণ করে (উপরে ধাপ # 1 এ চিহ্নিত করা হয়েছে) যা ইনস্ট্যান্ট করা যায়নি।
  2. নির্দিষ্ট JAR ফাইলটি দূষিত কিনা তা পরীক্ষা করুন। উদাহরণস্বরূপ, যদি আপনি ফাইলটি আনজার করতে না পারেন কারণ এটি দূষিত বা আংশিকভাবে আপলোড হয়েছে। যদি এটি দূষিত হয়, তাহলে রেজোলিউশনে যান।
  3. যদি JAR ফাইলটি দূষিত না হয়, তাহলে Cause: Missing Class File- এ যান।

রেজোলিউশন

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

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

রোগ নির্ণয়

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

রেজোলিউশন

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

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

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

রোগ নির্ণয়

  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. API প্রক্সি পুনরায় স্থাপন করুন।

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

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

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

  2. আপনি যদি একই পরিবেশে একাধিক API প্রক্সির জন্য একটি সংস্থান উপলব্ধ করতে চান তবে পরিবেশে সংস্থানটি আপলোড করুন৷ রিসোর্স ফাইলে বর্ণিত হিসাবে আপনাকে এজ 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 প্রক্সির জন্য ফাইল উপলব্ধ করতে আপনি বেসপাথে পরিবেশের বিবরণ বাদ দিতে পারেন। যেমন:

    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"