JavaCallout নীতি

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

কি

Apigee নীতিমালার বাইরের অন্তর্ভুক্ত নয় এমন কাস্টম আচরণ বাস্তবায়নের জন্য জাভা ব্যবহার করতে আপনাকে সক্ষম করে। আপনার জাভা কোডে, আপনি প্রক্সি ফ্লোতে বার্তা বৈশিষ্ট্য (হেডার, ক্যোয়ারী প্যারামিটার, বিষয়বস্তু) এবং ফ্লো ভেরিয়েবল অ্যাক্সেস করতে পারেন। আপনি যদি এই নীতির সাথে শুরু করে থাকেন, তাহলে দেখুন কিভাবে একটি Java কলআউট তৈরি করতে হয়

জাভা সমর্থিত সংস্করণগুলির জন্য, সমর্থিত সফ্টওয়্যার এবং সমর্থিত সংস্করণগুলি দেখুন।

কখন

নির্দেশিকাগুলির জন্য, দেখুন "আমি কখন একটি জাভা কলআউট ব্যবহার করব?" কিভাবে একটি জাভা কলআউট তৈরি করতে হয়

সম্পর্কে

জাভা কলআউট নীতি আপনাকে ফ্লো ভেরিয়েবল পেতে এবং সেট করতে, কাস্টম লজিক চালাতে এবং ত্রুটি পরিচালনা করতে, অনুরোধ বা প্রতিক্রিয়া থেকে ডেটা বের করতে এবং আরও অনেক কিছু করতে দেয়। এই নীতি আপনাকে কাস্টম আচরণ বাস্তবায়নের অনুমতি দেয় যা অন্য কোনো মানক এজ নীতি দ্বারা আচ্ছাদিত নয়।

আপনি আপনার জাভা অ্যাপ্লিকেশানকে প্যাকেজ করতে পারেন যেকোন প্যাকেজ JAR ফাইলের সাথে। নোট করুন যে জাভা কলআউট দিয়ে আপনি কী করতে পারেন তার উপর কিছু বিধিনিষেধ রয়েছে। এই বিধিনিষেধ নীচে তালিকাভুক্ত করা হয়.

নমুনা

সহজ উদাহরণ

কিভাবে একটি জাভা কলআউট তৈরি করতে হয়

আপনার জাভা কোডে বৈশিষ্ট্য পুনরুদ্ধার করুন

নীতির <Property> উপাদানটি আপনাকে একটি নাম/মান জোড়া নির্দিষ্ট করতে দেয় যা আপনি আপনার জাভা কোডে রানটাইমে পুনরুদ্ধার করতে পারেন। বৈশিষ্ট্যগুলি ব্যবহার করে এমন একটি কাজের উদাহরণের জন্য, Java কলআউটে বৈশিষ্ট্যগুলি কীভাবে ব্যবহার করবেন তা দেখুন।

জাভা কোড থেকে যে নাম দিয়ে সম্পত্তি অ্যাক্সেস করতে হবে তা নির্দিষ্ট করতে <সম্পত্তি> উপাদানের name বৈশিষ্ট্যটি ব্যবহার করুন। <Property> উপাদানের মান (উদ্বোধন এবং বন্ধ করার ট্যাগের মধ্যে মান) হল সেই মান যা জাভা কোড দ্বারা গৃহীত হবে। মান একটি স্ট্রিং হতে হবে; আপনি মান পেতে একটি প্রবাহ পরিবর্তনশীল উল্লেখ করতে পারবেন না।

  • সম্পত্তি কনফিগার করুন. এখানে, সম্পত্তি মান হল পরিবর্তনশীল নাম response.status.code
    <JavaCallout async="false" continueOnError="false" enabled="true" name="JavaCallout">
        <DisplayName>JavaCallout</DisplayName>
        <ClassName>com.example.mypolicy.MyJavaCallout</ClassName>
        <ResourceURL>java://MyJavaCallout.jar</ResourceURL>
        <Properties>
            <Property name="source">response.status.code</Property>
        </Properties>
    </Javascript>
    
  • আপনার জাভা কোডে, এক্সিকিউশন ক্লাস ইমপ্লিমেন্টেশনে নিম্নোক্ত কনস্ট্রাক্টরকে নিম্নরূপ প্রয়োগ করুন:
    public class MyJavaCallout implements Execution{
        public MyJavaCallout(Map<string, string> props){
            
                // Extract property values from map.
        }
        ...
    }
    

আপনার জাভা কোডে ফ্লো ভেরিয়েবল সেট করুন

আপনার জাভা কোডে বার্তা প্রসঙ্গে (ফ্লো ভেরিয়েবল) কীভাবে ভেরিয়েবল সেট করবেন তার একটি পরিষ্কার বিবরণের জন্য, এই Apigee কমিউনিটি পোস্টটি দেখুন।


উপাদান রেফারেন্স

উপাদান রেফারেন্স JavaCallout নীতির উপাদান এবং বৈশিষ্ট্য বর্ণনা করে।

<JavaCallout name="MyJavaCalloutPolicy">
   <ClassName>com.example.mypolicy.MyJavaCallout</ClassName>
   <ResourceURL>java://MyJavaCallout.jar</ResourceURL>
</JavaCallout>

<JavaCallout> বৈশিষ্ট্য

<JavaCallout name="MyJavaCalloutPolicy" enabled="true" continueOnError="false" async="false" >

নিম্নলিখিত সারণী সমস্ত নীতির মূল উপাদানগুলির জন্য সাধারণ বৈশিষ্ট্যগুলি বর্ণনা করে:

বৈশিষ্ট্য বর্ণনা ডিফল্ট উপস্থিতি
name

নীতির অভ্যন্তরীণ নাম। name বৈশিষ্ট্যের মানটিতে অক্ষর, সংখ্যা, স্পেস, হাইফেন, আন্ডারস্কোর এবং পিরিয়ড থাকতে পারে। এই মান 255 অক্ষরের বেশি হতে পারে না।

ঐচ্ছিকভাবে, ম্যানেজমেন্ট UI প্রক্সি এডিটরে নীতিটিকে একটি ভিন্ন, প্রাকৃতিক-ভাষা নামের সাথে লেবেল করতে <DisplayName> উপাদানটি ব্যবহার করুন।

N/A প্রয়োজন
continueOnError

একটি নীতি ব্যর্থ হলে একটি ত্রুটি ফেরত দিতে false সেট করুন৷ এটি বেশিরভাগ নীতির জন্য প্রত্যাশিত আচরণ।

একটি নীতি ব্যর্থ হওয়ার পরেও ফ্লো এক্সিকিউশন চালিয়ে যেতে true সেট করুন৷

মিথ্যা ঐচ্ছিক
enabled

নীতি প্রয়োগ করতে true সেট করুন৷

নীতি বন্ধ করতে false সেট করুন। নীতিটি প্রবাহের সাথে সংযুক্ত থাকলেও তা কার্যকর করা হবে না।

সত্য ঐচ্ছিক
async

এই বৈশিষ্ট্যটি অবমূল্যায়ন করা হয়েছে৷

মিথ্যা অবচয়

<DisplayName> উপাদান

ম্যানেজমেন্ট UI প্রক্সি এডিটরে নীতিটিকে একটি ভিন্ন, প্রাকৃতিক-ভাষা নামের সাথে লেবেল করতে name বৈশিষ্ট্য ছাড়াও ব্যবহার করুন।

<DisplayName>Policy Display Name</DisplayName>
ডিফল্ট

N/A

আপনি এই উপাদানটি বাদ দিলে, নীতির name বৈশিষ্ট্যের মান ব্যবহার করা হবে।

উপস্থিতি ঐচ্ছিক
টাইপ স্ট্রিং

<ClassName> উপাদান

জাভা ক্লাসের নাম নির্দিষ্ট করে যা জাভা কলআউট নীতি চালানোর সময় কার্যকর করে। ক্লাসটিকে অবশ্যই <ResourceURL> দ্বারা নির্দিষ্ট করা JAR ফাইলে অন্তর্ভুক্ত করতে হবে। কিভাবে একটি জাভা কলআউট তৈরি করতে হয় তাও দেখুন।

<JavaCallout name="MyJavaCalloutPolicy">
   <ResourceURL>java://MyJavaCallout.jar</ResourceURL>
   <ClassName>com.example.mypolicy.MyJavaCallout</ClassName>
</JavaCallout>
ডিফল্ট: N/A
উপস্থিতি: প্রয়োজন
প্রকার: স্ট্রিং

<সম্পত্তি> উপাদান

রানটাইমে জাভা কোড থেকে আপনি অ্যাক্সেস করতে পারেন এমন একটি সম্পত্তি নির্দিষ্ট করে। আপনাকে অবশ্যই প্রতিটি সম্পত্তির জন্য একটি আক্ষরিক স্ট্রিং মান নির্দিষ্ট করতে হবে; আপনি এই উপাদানে প্রবাহ ভেরিয়েবল উল্লেখ করতে পারবেন না। বৈশিষ্ট্যগুলি ব্যবহার করে এমন একটি কাজের উদাহরণের জন্য, Java কলআউটে বৈশিষ্ট্যগুলি কীভাবে ব্যবহার করবেন তা দেখুন।

<Properties>
    <Property name="propName">propertyValue</Property>
</Properties>
ডিফল্ট: কোনোটিই নয়
উপস্থিতি: ঐচ্ছিক
প্রকার: স্ট্রিং

গুণাবলী

বৈশিষ্ট্য বর্ণনা ডিফল্ট উপস্থিতি
নাম

সম্পত্তির নাম উল্লেখ করে।

N/A প্রয়োজন।

<ResourceURL> উপাদান

এই উপাদানটি Java JAR ফাইলটি নির্দিষ্ট করে যা Java কলআউট নীতি চালু হলে কার্যকর হবে।

আপনি এই ফাইলটিকে API প্রক্সি স্কোপে ( /apiproxy/resources/java এর অধীনে API প্রক্সি বান্ডেলে বা API প্রক্সি এডিটরের নেভিগেটর ফলকের স্ক্রিপ্ট বিভাগে) অথবা একাধিক API প্রক্সি জুড়ে পুনঃব্যবহারের জন্য সংস্থা বা পরিবেশের সুযোগে সংরক্ষণ করতে পারেন , যেমন রিসোর্স ফাইলে বর্ণনা করা হয়েছে।

<JavaCallout name="MyJavaCalloutPolicy">
   <ResourceURL>java://MyJavaCallout.jar</ResourceURL>
   <ClassName>com.example.mypolicy.MyJavaCallout</ClassName>
</JavaCallout>
ডিফল্ট: কোনোটিই নয়
উপস্থিতি: প্রয়োজন
প্রকার: স্ট্রিং

ত্রুটি উল্লেখ

এই বিভাগটি ফল্ট কোড এবং ত্রুটি বার্তাগুলি বর্ণনা করে যেগুলি ফেরত দেওয়া হয় এবং ত্রুটি ভেরিয়েবলগুলি যেগুলি এজ দ্বারা সেট করা হয় যখন এই নীতিটি একটি ত্রুটি ট্রিগার করে৷ এই তথ্যটি জানা গুরুত্বপূর্ণ যে আপনি ত্রুটিগুলি পরিচালনা করার জন্য ত্রুটির নিয়ম তৈরি করছেন কিনা। আরও জানতে, নীতিগত ত্রুটি এবং হ্যান্ডলিং ফল্ট সম্পর্কে আপনার যা জানা দরকার তা দেখুন৷

রানটাইম ত্রুটি

নীতি কার্যকর করার সময় এই ত্রুটিগুলি ঘটতে পারে৷

ফল্ট কোড HTTP স্থিতি কারণ ঠিক করুন
steps.javacallout.ExecutionError 500 JavaCallout নীতি কার্যকর করার সময় জাভা কোড একটি ব্যতিক্রম ছুঁড়ে বা শূন্য প্রদান করলে ঘটে।

স্থাপনার ত্রুটি

এই ত্রুটিগুলি ঘটতে পারে যখন নীতি সমন্বিত প্রক্সি স্থাপন করা হয়৷

ত্রুটির নাম ফল্ট স্ট্রিং HTTP স্থিতি যখন ঘটে
ResourceDoesNotExistResource with name [name] and type [type] does not exist N/A <ResourceURL> উপাদানে নির্দিষ্ট করা ফাইলটি বিদ্যমান নেই।
JavaCalloutInstantiationFailed Failed to instantiate the JavaCallout Class [classname] N/A <ClassName> এলিমেন্টে নির্দিষ্ট করা ক্লাস ফাইলটি জারে নেই।
IncompatibleJavaVersion Failed to load java class [classname] definition due to - [reason] N/A ফল্ট স্ট্রিং দেখুন। সমর্থিত সফ্টওয়্যার এবং সমর্থিত সংস্করণগুলিও দেখুন।
JavaClassNotFoundInJavaResource Failed to find the ClassName in java resource [jar_name] - [class_name] N/A ফল্ট স্ট্রিং দেখুন।
JavaClassDefinitionNotFound Failed to load java class [class_name] definition due to - [reason] N/A ফল্ট স্ট্রিং দেখুন।
NoAppropriateConstructor No appropriate constructor found in JavaCallout class [class_name] N/A ফল্ট স্ট্রিং দেখুন।
NoResourceForURL Could not locate a resource with URL [string] N/A ফল্ট স্ট্রিং দেখুন।

ফল্ট ভেরিয়েবল

যখন এই নীতি একটি ত্রুটি ট্রিগার করে তখন এই ভেরিয়েবলগুলি সেট করা হয়৷ আরও তথ্যের জন্য, নীতি ত্রুটি সম্পর্কে আপনার যা জানা দরকার তা দেখুন।

ভেরিয়েবল যেখানে উদাহরণ
fault.name=" fault_name " fault_name হল ফল্টের নাম, যা উপরে রানটাইম ত্রুটির সারণীতে তালিকাভুক্ত করা হয়েছে। ফল্ট নামটি ফল্ট কোডের শেষ অংশ। fault.name Matches "ExecutionError"
javacallout. policy_name .failed policy_name হল সেই নীতির ব্যবহারকারী-নির্দিষ্ট নাম যা ত্রুটিটি ফেলেছে। javacallout.JC-GetUserData.failed = true

উদাহরণ ত্রুটি প্রতিক্রিয়া

{  
   "fault":{  
      "faultstring":"Failed to execute JavaCallout. [policy_name]",
      "detail":{  
         "errorcode":"javacallout.ExecutionError"
      }
   }
}

উদাহরণ দোষ নিয়ম

<FaultRule name="JavaCalloutFailed">
    <Step>
        <Name>AM-JavaCalloutError</Name>
    </Step>
    <Condition>(fault.name Matches "ExecutionError") </Condition>
</FaultRule>

স্কিমাস

সংকলন এবং স্থাপনা

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

বিধিনিষেধ

নীচে জাভা কলআউট লেখার সময় আপনাকে যে বিধিনিষেধগুলি বিবেচনা করতে হবে:

  • বেশিরভাগ সিস্টেম কল অননুমোদিত। উদাহরণস্বরূপ, আপনি অভ্যন্তরীণ ফাইল সিস্টেমকে পড়তে বা লিখতে পারবেন না।
  • সকেটের মাধ্যমে নেটওয়ার্কে অ্যাক্সেস। Apigee সাইটলোকাল, যেকোন লোকাল, লুপব্যাক এবং লিঙ্কলোকাল ঠিকানাগুলিতে অ্যাক্সেস সীমাবদ্ধ করে।
  • কলআউট বর্তমান প্রক্রিয়া, প্রক্রিয়া তালিকা, বা মেশিনে CPU/মেমরি ব্যবহার সম্পর্কে তথ্য পেতে পারে না। যদিও এই ধরনের কিছু কল কার্যকরী হতে পারে, তবে সেগুলি অসমর্থিত এবং যেকোন সময় সক্রিয়ভাবে অক্ষম করার জন্য দায়ী। ফরওয়ার্ড সামঞ্জস্যের জন্য, আপনার কোডে এই ধরনের কল করা এড়ানো উচিত।
  • Apigee Edge এর সাথে অন্তর্ভুক্ত জাভা লাইব্রেরির উপর নির্ভরতা সমর্থিত নয়। এই লাইব্রেরিগুলি শুধুমাত্র এজ পণ্য কার্যকারিতার জন্য, এবং কোনও গ্যারান্টি নেই যে একটি লাইব্রেরি রিলিজ থেকে রিলিজ পর্যন্ত উপলব্ধ থাকবে৷
  • Java কলআউটে প্যাকেজ নাম হিসেবে io.apigee বা com.apigee ব্যবহার করবেন না। এই নামগুলি সংরক্ষিত এবং অন্যান্য Apigee মডিউল দ্বারা ব্যবহৃত হয়।

প্যাকেজিং

/resources/java অধীনে একটি API প্রক্সিতে JAR রাখুন। যদি আপনার জাভা কলআউট স্বাধীন JAR ফাইল হিসাবে প্যাকেজ করা অতিরিক্ত তৃতীয় পক্ষের লাইব্রেরির উপর নির্ভর করে, তাহলে সেই JAR ফাইলগুলিকে /resources/java ডিরেক্টরিতে রাখুন যাতে রানটাইমে সঠিকভাবে লোড হয় কিনা তা নিশ্চিত করতে।

আপনি যদি প্রক্সি তৈরি বা পরিবর্তন করতে ম্যানেজমেন্ট UI ব্যবহার করেন, তাহলে একটি নতুন সংস্থান যোগ করুন এবং একটি অতিরিক্ত নির্ভরশীল JAR ফাইল নির্দিষ্ট করুন। যদি একাধিক JAR থাকে তবে সেগুলিকে অতিরিক্ত সংস্থান হিসাবে যোগ করুন। অতিরিক্ত JAR ফাইলগুলি উল্লেখ করার জন্য আপনাকে নীতি কনফিগারেশন পরিবর্তন করতে হবে না। সেগুলিকে /resources/java এ রাখাই যথেষ্ট।

Java JAR আপলোড করার তথ্যের জন্য, রিসোর্স ফাইলগুলি দেখুন।

একটি বিস্তারিত উদাহরণের জন্য যা প্রদর্শন করে যে কিভাবে Maven বা javac ব্যবহার করে একটি জাভা কলআউট প্যাকেজ এবং স্থাপন করতে হয়, দেখুন কিভাবে একটি Java কলআউট তৈরি করতে হয়

জাভাডক

জাভা কলআউট কোড লেখার জন্য Javadoc এখানে GitHub-এ অন্তর্ভুক্ত করা হয়েছে। আপনাকে আপনার সিস্টেমে এইচটিএমএল ক্লোন বা ডাউনলোড করতে হবে এবং তারপরে একটি ব্রাউজারে index.html ফাইলটি খুলতে হবে।

ব্যবহারের নোট

  • একটি জাভা কলআউট নীতিতে কোন প্রকৃত কোড নেই। পরিবর্তে, একটি জাভা কলআউট নীতি একটি জাভা 'রিসোর্স' উল্লেখ করে এবং এপিআই প্রবাহের ধাপটি সংজ্ঞায়িত করে যেখানে জাভা কোড কার্যকর হয়। আপনি ম্যানেজমেন্ট UI প্রক্সি সম্পাদকের মাধ্যমে আপনার Java JAR আপলোড করতে পারেন, অথবা আপনি স্থানীয়ভাবে বিকাশ করা API প্রক্সিগুলিতে /resources/java ডিরেক্টরিতে এটি অন্তর্ভুক্ত করতে পারেন।
  • দূরবর্তী পরিষেবাগুলিতে API কলগুলির মতো হালকা অপারেশনগুলির জন্য, আমরা ServiceCallout নীতি ব্যবহার করার পরামর্শ দিই৷ পরিষেবা কলআউট নীতি দেখুন।
  • বার্তা সামগ্রীর সাথে তুলনামূলকভাবে সহজ ইন্টারঅ্যাকশনের জন্য, যেমন HTTP শিরোনাম, পরামিতি বা বার্তা সামগ্রী পরিবর্তন করা বা বের করা, Apigee একটি JavaScript নীতি ব্যবহার করার পরামর্শ দেয়।

সম্পর্কিত বিষয়