JavaCallout নীতি

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

কী

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

Java-এর কোন কোন ভার্সনে কাজ করে তা জানতে, কাজ করে এমন সফ্টওয়্যার ও কাজ করে এমন ভার্সন দেখুন।

কখন

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

সম্পর্কে

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

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

নমুনা

সহজ উদাহরণ

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

আপনার Java কোডে প্রপার্টি ফিরিয়ে আনা

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

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

  • প্রপার্টি কনফিগার করুন। এখানে, প্রপার্টির ভ্যালু হল ভেরিয়েবলের নাম 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>
  • আপনার Java কোডে, Execution ক্লাসে নিম্নলিখিত কনস্ট্রাক্টর ইমপ্লিমেন্ট করুন:
    public class MyJavaCallout implements Execution{
        public MyJavaCallout(Map<string, string> props){
    
                // Extract property values from map.
        }
        ...
    }

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

আপনার Java কোডে মেসেজ কনটেক্সটে (ফ্লো ভেরিয়েবল) কীভাবে ভেরিয়েবল সেট করতে হয়, তার স্পষ্ট বিবরণের জন্য, এই 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> এলিমেন্ট

Java কলআউট নীতি রান করার সময় যে Java ক্লাস এক্সিকিউট হয় তার নাম নির্দিষ্ট করে। <ResourceURL>-এ নির্দিষ্ট করা JAR ফাইলে ক্লাস অন্তর্ভুক্ত থাকতে হবে। এছাড়াও, কীভাবে Java কলআউট তৈরি করতে হয় তা দেখুন।

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

<Property> এলিমেন্ট

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

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

অ্যাট্রিবিউট

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

প্রপার্টির নাম নির্দিষ্ট করে।

প্রযোজ্য নয় প্রয়োজনীয়।

<ResourceURL> এলিমেন্ট

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

আপনি এই ফাইলটি API প্রক্সি স্কোপে (API প্রক্সি বান্ডেলের মধ্যে /apiproxy/resources/java অথবা 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>

স্কিমা

কম্পাইল ও ডেপ্লয় করা

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

বিধিনিষেধ

Java কলআউট লেখার সময় আপনাকে নিম্নলিখিত বিধিনিষেধ বিবেচনা করতে হবে:

  • বেশিরভাগ সিস্টেম কল অনুমোদিত নয়। যেমন, আপনি ইন্টার্নাল ফাইল সিস্টেম রিড বা রাইট করতে পারবেন না।
  • সকেটের মাধ্যমে নেটওয়ার্কে অ্যাক্সেস। Apigee, sitelocal, anylocal, loopback এবং linklocal অ্যাড্রেসে অ্যাক্সেস সীমাবদ্ধ করে।
  • কলআউট বর্তমান প্রসেস, প্রসেস তালিকা বা মেশিনে CPU/মেমরি ব্যবহারের তথ্য পায় না। যদিও এই ধরনের কিছু কল কার্যকরী হতে পারে, তবে সেগুলি কাজ করে না এবং যেকোনও সময় বন্ধ করে দেওয়া হতে পারে। ভবিষ্যতে যাতে কাজ করে সেই জন্য, আপনার কোডে এই ধরনের কল করা এড়িয়ে যাওয়া উচিত।
  • Apigee Edge-এর সাথে অন্তর্ভুক্ত Java লাইব্রেরির উপর নির্ভর করা যায় না। সেইসব লাইব্রেরি শুধুমাত্র Edge প্রোডাক্টের কার্যকারিতার জন্য এবং কোনও লাইব্রেরি রিলিজ থেকে রিলিজ পর্যন্ত উপলভ্য থাকবে কিনা সেই ব্যাপারে কোনও গ্যারান্টি নেই।
  • Java কলআউটে প্যাকেজের নাম হিসেবে io.apigee বা com.apigee ব্যবহার করবেন না। সেইসব নাম সংরক্ষিত এবং অন্যান্য Apigee মডিউল ব্যবহার করে।

প্যাকেজিং

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

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

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

Maven বা javac ব্যবহার করে কীভাবে Java কলআউট প্যাকেজ ও ডেপ্লয় করতে হয় তা বিস্তারিত উদাহরণের মাধ্যমে দেখতে, Java কলআউট কীভাবে তৈরি করতে হয় দেখুন।

Javadoc

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

ব্যবহার সংক্রান্ত নোট

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

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