JavaCallout নীতি

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

কি

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

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

কখন

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

সম্পর্কে

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

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

নমুনা

কিভাবে জাভা কলআউট তৈরি করবেন

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

জাভা কোড থেকে প্রপার্টি অ্যাক্সেস করার জন্য <Property> এলিমেন্টের 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>
  • আপনার জাভা কোডে, Execution ক্লাস বাস্তবায়নে নিম্নলিখিত কনস্ট্রাক্টরটি নিম্নরূপ প্রয়োগ করুন:
    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 বৈশিষ্ট্যের মান ব্যবহার করা হবে।

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

<ক্লাসনাম> উপাদান

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

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

<প্রোপার্টি> উপাদান

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

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

গুণাবলী

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

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

নিষিদ্ধ প্রয়োজন।

<ResourceURL> উপাদান

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

আপনি এই ফাইলটি API প্রক্সি স্কোপে (API প্রক্সি বান্ডেলের /apiproxy/resources/java এর অধীনে অথবা API প্রক্সি এডিটরের ন্যাভিগেটর প্যানের স্ক্রিপ্ট বিভাগে) সংরক্ষণ করতে পারেন, অথবা Resource files এ বর্ণিত একাধিক 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-এর সাথে অন্তর্ভুক্ত জাভা লাইব্রেরির উপর নির্ভরতা সমর্থিত নয়। এই লাইব্রেরিগুলি শুধুমাত্র Edge পণ্যের কার্যকারিতার জন্য, এবং কোনও লাইব্রেরি যে রিলিজ থেকে রিলিজে পাওয়া যাবে তার কোনও গ্যারান্টি নেই।
  • জাভা কলআউটে প্যাকেজের নাম হিসেবে io.apigee বা com.apigee ব্যবহার করবেন না। এই নামগুলি অন্যান্য Apigee মডিউল দ্বারা সংরক্ষিত এবং ব্যবহৃত হয়।

প্যাকেজিং

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

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

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

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

জাভাডক

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

ব্যবহারবিধি

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

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