আপনি Apigee Edge-এর ডকুমেন্টেশন দেখছেন।
Apigee X ডকুমেন্টেশন .info- তে যান।
![]()
কী
এটি আপনাকে জাভা ব্যবহার করে এমন কাস্টম আচরণ প্রয়োগ করতে সক্ষম করে যা Apigee পলিসিতে ডিফল্টভাবে অন্তর্ভুক্ত থাকে না। আপনার জাভা কোডে, আপনি প্রক্সি ফ্লো-তে মেসেজ প্রোপার্টি (হেডার, কোয়েরি প্যারামিটার, কন্টেন্ট) এবং ফ্লো ভেরিয়েবল অ্যাক্সেস করতে পারেন। আপনি যদি এই পলিসিটি নিয়ে নতুন কাজ শুরু করে থাকেন, তাহলে "কিভাবে একটি জাভা কলআউট তৈরি করবেন" দেখুন।
জাভার সমর্থিত সংস্করণগুলোর জন্য, সমর্থিত সফ্টওয়্যার এবং সমর্থিত সংস্করণসমূহ দেখুন।
যখন
নির্দেশনার জন্য, " How to create a Java callout"-এর "When should I use a Java callout ?" অংশটি দেখুন।
সম্পর্কে
জাভা কলআউট পলিসি আপনাকে ফ্লো ভেরিয়েবল গেট ও সেট করতে, কাস্টম লজিক এক্সিকিউট করতে ও এরর হ্যান্ডলিং করতে, রিকোয়েস্ট বা রেসপন্স থেকে ডেটা এক্সট্র্যাক্ট করতে এবং আরও অনেক কিছু করতে দেয়। এই পলিসি আপনাকে এমন কাস্টম আচরণ বাস্তবায়ন করার সুযোগ দেয় যা অন্য কোনো স্ট্যান্ডার্ড এজ পলিসির আওতায় পড়ে না।
আপনার জাভা অ্যাপ্লিকেশনটিকে আপনার প্রয়োজনমতো যেকোনো প্যাকেজ JAR ফাইল দিয়ে প্যাকেজ করতে পারেন। মনে রাখবেন যে, জাভা কলআউট (Java Callout) দিয়ে আপনি যা করতে পারবেন, তার উপর কিছু সীমাবদ্ধতা রয়েছে। এই সীমাবদ্ধতাগুলো নিচে 'সীমাবদ্ধতা' (Restrictions) অংশে তালিকাভুক্ত করা হলো।নমুনা
সহজ উদাহরণ
জাভা কলআউট কীভাবে তৈরি করবেনআপনার জাভা কোডে প্রোপার্টিগুলো পুনরুদ্ধার করুন
পলিসির <Property> এলিমেন্টটি আপনাকে একটি নাম/মান জোড়া নির্দিষ্ট করার সুযোগ দেয়, যা আপনি আপনার জাভা কোডে রানটাইমে পুনরুদ্ধার করতে পারেন। প্রপার্টি ব্যবহার করে এমন একটি কার্যকরী উদাহরণের জন্য, "How to use properties in a Java callout" দেখুন।
জাভা কোড থেকে প্রপার্টিটি অ্যাক্সেস করার জন্য নামটি নির্দিষ্ট করতে <Property> এলিমেন্টের name অ্যাট্রিবিউট ব্যবহার করুন। <Property> এলিমেন্টের value (ওপেনিং এবং ক্লোজিং ট্যাগের ভেতরের মান) হলো সেই মান যা জাভা কোড গ্রহণ করবে। মানটি অবশ্যই একটি স্ট্রিং হতে হবে; মানটি পাওয়ার জন্য আপনি কোনো ফ্লো ভেরিয়েবল রেফারেন্স করতে পারবেন না।
- প্রপার্টিটি কনফিগার করুন। এখানে, প্রপার্টির মান হলো
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 | নীতির অভ্যন্তরীণ নাম। ঐচ্ছিকভাবে, ম্যানেজমেন্ট UI প্রক্সি এডিটরে নীতিটিকে একটি ভিন্ন, প্রাকৃতিক-ভাষা নামের সাথে লেবেল করতে | N/A | প্রয়োজন |
continueOnError | একটি নীতি ব্যর্থ হলে একটি ত্রুটি ফেরত দিতে একটি নীতি ব্যর্থ হওয়ার পরেও ফ্লো এক্সিকিউশন চালিয়ে যেতে | মিথ্যা | ঐচ্ছিক |
enabled | নীতি প্রয়োগ করতে নীতি বন্ধ করতে | সত্য | ঐচ্ছিক |
async | এই বৈশিষ্ট্যটি অবমূল্যায়ন করা হয়েছে৷ | মিথ্যা | অবচয় |
<DisplayName> উপাদান
ম্যানেজমেন্ট UI প্রক্সি এডিটরে নীতিটিকে একটি ভিন্ন, প্রাকৃতিক-ভাষা নামের সাথে লেবেল করতে name বৈশিষ্ট্য ছাড়াও ব্যবহার করুন।
<DisplayName>Policy Display Name</DisplayName>
| ডিফল্ট | N/A আপনি এই উপাদানটি বাদ দিলে, নীতির |
|---|---|
| উপস্থিতি | ঐচ্ছিক |
| টাইপ | স্ট্রিং |
<ClassName> উপাদান
জাভা কলআউট পলিসি চলার সময় যে জাভা ক্লাসটি এক্সিকিউট হয়, তার নাম নির্দিষ্ট করে। ক্লাসটি অবশ্যই <ResourceURL> দ্বারা নির্দিষ্ট করা JAR ফাইলে অন্তর্ভুক্ত থাকতে হবে। আরও দেখুন, কীভাবে একটি জাভা কলআউট তৈরি করতে হয় ।
<JavaCallout name="MyJavaCalloutPolicy"> <ResourceURL>java://MyJavaCallout.jar</ResourceURL> <ClassName>com.example.mypolicy.MyJavaCallout</ClassName> </JavaCallout>
| ডিফল্ট: | প্রযোজ্য নয় |
| উপস্থিতি: | প্রয়োজনীয় |
| প্রকার: | স্ট্রিং |
<সম্পত্তি> উপাদান
এটি এমন একটি প্রপার্টি নির্দিষ্ট করে যা আপনি রানটাইমে জাভা কোড থেকে অ্যাক্সেস করতে পারেন। আপনাকে প্রতিটি প্রপার্টির জন্য একটি আক্ষরিক স্ট্রিং ভ্যালু নির্দিষ্ট করতে হবে; আপনি এই এলিমেন্টে ফ্লো ভেরিয়েবল রেফারেন্স করতে পারবেন না। প্রপার্টি ব্যবহার করে এমন একটি কার্যকরী উদাহরণের জন্য, "How to use properties in a Java callout" দেখুন।
<Properties> <Property name="propName">propertyValue</Property> </Properties>
| ডিফল্ট: | কোনোটিই না |
| উপস্থিতি: | ঐচ্ছিক |
| প্রকার: | স্ট্রিং |
বৈশিষ্ট্য
| বৈশিষ্ট্য | বর্ণনা | ডিফল্ট | উপস্থিতি |
|---|---|---|---|
| নাম | প্রপার্টির নাম নির্দিষ্ট করে। | প্রযোজ্য নয় | প্রয়োজনীয়। |
<রিসোর্সইউআরএল> উপাদান
এই এলিমেন্টটি সেই জাভা JAR ফাইলটি নির্দিষ্ট করে, যা জাভা কলআউট পলিসি চলার সময় এক্সিকিউট হবে।
আপনি এই ফাইলটি এপিআই প্রক্সি স্কোপে (এপিআই প্রক্সি বান্ডেলের মধ্যে /apiproxy/resources/java তে অথবা এপিআই প্রক্সি এডিটরের নেভিগেটর পেনের স্ক্রিপ্টস বিভাগে), অথবা একাধিক এপিআই প্রক্সিতে পুনঃব্যবহারের জন্য অর্গানাইজেশন বা এনভায়রনমেন্ট স্কোপে সংরক্ষণ করতে পারেন, যেমনটি রিসোর্স ফাইলস -এ বর্ণনা করা হয়েছে।
<JavaCallout name="MyJavaCalloutPolicy"> <ResourceURL>java://MyJavaCallout.jar</ResourceURL> <ClassName>com.example.mypolicy.MyJavaCallout</ClassName> </JavaCallout>
| ডিফল্ট: | কোনোটিই না |
| উপস্থিতি: | প্রয়োজনীয় |
| প্রকার: | স্ট্রিং |
ত্রুটির রেফারেন্স
এই বিভাগটি ফল্ট কোড এবং ত্রুটি বার্তাগুলি বর্ণনা করে যেগুলি ফেরত দেওয়া হয় এবং ত্রুটি ভেরিয়েবলগুলি যেগুলি এজ দ্বারা সেট করা হয় যখন এই নীতিটি একটি ত্রুটি ট্রিগার করে৷ এই তথ্যটি জানা গুরুত্বপূর্ণ যে আপনি ত্রুটিগুলি পরিচালনা করার জন্য ত্রুটির নিয়ম তৈরি করছেন কিনা। আরও জানতে, নীতিগত ত্রুটি এবং হ্যান্ডলিং ফল্ট সম্পর্কে আপনার যা জানা দরকার তা দেখুন৷
রানটাইম ত্রুটি
নীতি কার্যকর করার সময় এই ত্রুটিগুলি ঘটতে পারে৷
| ফল্ট কোড | HTTP স্থিতি | কারণ | ঠিক করুন |
|---|---|---|---|
steps.javacallout.ExecutionError | 500 | JavaCallout নীতি কার্যকর করার সময় জাভা কোড একটি ব্যতিক্রম ছুঁড়ে বা শূন্য প্রদান করলে ঘটে। | build |
স্থাপনার ত্রুটি
এই ত্রুটিগুলি ঘটতে পারে যখন নীতি সমন্বিত প্রক্সি স্থাপন করা হয়৷
| ত্রুটির নাম | ফল্ট স্ট্রিং | HTTP স্থিতি | যখন ঘটে |
|---|---|---|---|
ResourceDoesNotExist | Resource 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>
স্কিমা
সংকলন এবং স্থাপন
আপনার কাস্টম জাভা কোড কীভাবে কম্পাইল করবেন এবং প্রক্সির মাধ্যমে তা ডিপ্লয় করবেন, সে সম্পর্কে বিস্তারিত জানতে "How to create a Java callout" দেখুন।
বিধিনিষেধ
জাভা কলআউট লেখার সময় আপনাকে নিম্নলিখিত সীমাবদ্ধতাগুলো বিবেচনা করতে হবে:
- বেশিরভাগ সিস্টেম কল অনুমোদিত নয়। উদাহরণস্বরূপ, আপনি অভ্যন্তরীণ ফাইল সিস্টেমে রিড বা রাইট করতে পারবেন না।
- সকেটের মাধ্যমে নেটওয়ার্কে প্রবেশ করা যায়। Apigee সাইটলোকাল, অ্যানিলোকাল, লুপব্যাক এবং লিঙ্কলোকাল অ্যাড্রেসে প্রবেশাধিকার সীমাবদ্ধ করে।
- কলআউটটি মেশিনের বর্তমান প্রসেস, প্রসেস তালিকা, বা সিপিইউ/মেমরি ব্যবহারের তথ্য পেতে পারে না। যদিও এই ধরনের কিছু কল কার্যকরী হতে পারে, সেগুলি অসমর্থিত এবং যেকোনো সময় সক্রিয়ভাবে নিষ্ক্রিয় করা হতে পারে। ভবিষ্যৎ সামঞ্জস্যের জন্য, আপনার কোডে এই ধরনের কল করা এড়িয়ে চলা উচিত।
- Apigee Edge-এর সাথে অন্তর্ভুক্ত জাভা লাইব্রেরিগুলোর উপর নির্ভর করা সমর্থিত নয়। ঐ লাইব্রেরিগুলো শুধুমাত্র Edge প্রোডাক্টের কার্যকারিতার জন্য, এবং একটি লাইব্রেরি এক রিলিজ থেকে অন্য রিলিজে উপলব্ধ থাকবে এমন কোনো নিশ্চয়তা নেই।
- জাভা কলআউটে প্যাকেজের নাম হিসেবে
io.apigeeবাcom.apigeeব্যবহার করবেন না। এই নামগুলো সংরক্ষিত এবং অন্যান্য Apigee মডিউল দ্বারা ব্যবহৃত হয়।
প্যাকেজিং
JAR ফাইলটি একটি API প্রক্সির অধীনে /resources/java তে রাখুন। যদি আপনার জাভা কলআউট স্বাধীন JAR ফাইল হিসেবে প্যাকেজ করা অতিরিক্ত থার্ড-পার্টি লাইব্রেরির উপর নির্ভর করে, তাহলে সেই JAR ফাইলগুলোও /resources/java ডিরেক্টরিতে রাখুন, যাতে রানটাইমে সেগুলো সঠিকভাবে লোড হয়।
আপনি যদি প্রক্সি তৈরি বা পরিবর্তন করার জন্য ম্যানেজমেন্ট UI ব্যবহার করেন, তাহলে একটি নতুন রিসোর্স যোগ করুন এবং একটি অতিরিক্ত নির্ভরশীল JAR ফাইল নির্দিষ্ট করে দিন। যদি একাধিক JAR ফাইল থাকে, তবে সেগুলোকে কেবল অতিরিক্ত রিসোর্স হিসেবে যোগ করুন। অতিরিক্ত JAR ফাইলগুলোকে উল্লেখ করার জন্য পলিসি কনফিগারেশন পরিবর্তন করার কোনো প্রয়োজন নেই। সেগুলোকে /resources/java তে রাখাই যথেষ্ট।
জাভা JAR আপলোড করার তথ্যের জন্য, রিসোর্স ফাইলস দেখুন।
Maven বা javac ব্যবহার করে কীভাবে একটি Java Callout প্যাকেজ ও ডিপ্লয় করতে হয়, তার বিস্তারিত উদাহরণের জন্য “How to create a Java callout” দেখুন।
জাভাডক
জাভা কলআউট কোড লেখার জন্য জাভাডক এখানে গিটহাবে দেওয়া আছে। আপনাকে এইচটিএমএল ফাইলটি আপনার সিস্টেমে ক্লোন বা ডাউনলোড করতে হবে এবং তারপর ব্রাউজারে index.html ফাইলটি খুলতে হবে।
ব্যবহারের নির্দেশাবলী
- একটি জাভা কলআউট পলিসিতে কোনো প্রকৃত কোড থাকে না। এর পরিবর্তে, একটি জাভা কলআউট পলিসি একটি জাভা 'রিসোর্স'-কে রেফারেন্স করে এবং এপিআই ফ্লো-এর সেই ধাপটি নির্ধারণ করে যেখানে জাভা কোডটি এক্সিকিউট হবে। আপনি ম্যানেজমেন্ট UI প্রক্সি এডিটরের মাধ্যমে আপনার জাভা JAR আপলোড করতে পারেন, অথবা আপনার স্থানীয়ভাবে তৈরি করা এপিআই প্রক্সিগুলোর
/resources/javaডিরেক্টরিতে এটি অন্তর্ভুক্ত করতে পারেন। - রিমোট সার্ভিসে এপিআই কলের মতো হালকা অপারেশনের জন্য, আমরা সার্ভিসকলআউট পলিসি ব্যবহার করার পরামর্শ দিই। সার্ভিস কলআউট পলিসি দেখুন।
- মেসেজের বিষয়বস্তুর সাথে তুলনামূলকভাবে সহজ ইন্টারঅ্যাকশনের জন্য, যেমন HTTP হেডার, প্যারামিটার বা মেসেজের বিষয়বস্তু পরিবর্তন বা নিষ্কাশন করার ক্ষেত্রে, Apigee একটি জাভাস্ক্রিপ্ট পলিসি ব্যবহার করার পরামর্শ দেয়।
সম্পর্কিত বিষয়
- সম্পর্কিত নমুনার জন্য, java-cookbook রিপোজিটরি দেখুন।