شما در حال مشاهده اسناد Apigee Edge هستید.
به مستندات Apigee X بروید . اطلاعات
چی
به شما امکان می دهد از جاوا برای پیاده سازی رفتار سفارشی استفاده کنید که خارج از چارچوب سیاست های Apigee گنجانده نشده است. در کد جاوا خود، می توانید به ویژگی های پیام (سرصفحه ها، پارامترهای پرس و جو، محتوا) و متغیرهای جریان در جریان پروکسی دسترسی داشته باشید. اگر به تازگی این خطمشی را شروع کردهاید، به نحوه ایجاد فراخوان جاوا مراجعه کنید.
برای نسخه های پشتیبانی شده جاوا، به نرم افزارهای پشتیبانی شده و نسخه های پشتیبانی شده مراجعه کنید.
چه زمانی
برای دستورالعمل ها، به "چه زمانی باید از فراخوانی جاوا استفاده کنم؟" در نحوه ایجاد فراخوانی جاوا .
درباره
خط مشی Java Callout به شما امکان می دهد متغیرهای جریان را دریافت و تنظیم کنید، منطق سفارشی را اجرا کنید و مدیریت خطا را انجام دهید، داده ها را از درخواست ها یا پاسخ ها استخراج کنید و موارد دیگر. این خطمشی به شما امکان میدهد رفتار سفارشی را پیادهسازی کنید که توسط سایر خطمشیهای استاندارد Edge پوشش داده نمیشود.
می توانید برنامه جاوا خود را با هر بسته فایل JAR که نیاز دارید بسته بندی کنید. توجه داشته باشید که محدودیت هایی در مورد کاری که می توانید با Java Callout انجام دهید وجود دارد. این موارد در زیر در محدودیت ها ذکر شده است.نمونه ها
مثال ساده
چگونه یک فراخوان جاوا ایجاد کنیمویژگی های کد جاوا خود را بازیابی کنید
عنصر <Property>
خط مشی به شما اجازه می دهد یک جفت نام/مقدار را مشخص کنید که می توانید در زمان اجرا در کد جاوا خود بازیابی کنید. برای مثال کاری که از ویژگیها استفاده میکند، به نحوه استفاده از ویژگیها در فراخوانی جاوا مراجعه کنید.
از ویژگی name
عنصر <Property> برای تعیین نامی استفاده کنید که با آن از کد جاوا به ویژگی دسترسی داشته باشید. مقدار عنصر <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 | نام داخلی سیاست. مقدار مشخصه در صورت تمایل، از عنصر | N/A | مورد نیاز |
continueOnError | برای بازگرداندن خطا در صورت شکست خط مشی، روی روی | نادرست | اختیاری |
enabled | برای اجرای خط مشی روی برای خاموش کردن خط مشی، روی | درست است | اختیاری |
async | این ویژگی منسوخ شده است. | نادرست | منسوخ شده است |
عنصر <DisplayName>
علاوه بر ویژگی name
برای برچسبگذاری خطمشی در ویرایشگر پروکسی رابط کاربری مدیریت با نامی متفاوت و به زبان طبیعی، از آن استفاده کنید.
<DisplayName>Policy Display Name</DisplayName>
پیش فرض | N/A اگر این عنصر را حذف کنید، از مقدار ویژگی |
---|---|
حضور | اختیاری |
تایپ کنید | رشته |
عنصر <ClassName>
نام کلاس جاوا را مشخص می کند که هنگام اجرای سیاست Java Callout اجرا می شود. کلاس باید در فایل JAR مشخص شده توسط <ResourceURL>
گنجانده شود. نحوه ایجاد فراخوان جاوا را نیز ببینید.
<JavaCallout name="MyJavaCalloutPolicy"> <ResourceURL>java://MyJavaCallout.jar</ResourceURL> <ClassName>com.example.mypolicy.MyJavaCallout</ClassName> </JavaCallout>
پیش فرض: | N/A |
حضور: | مورد نیاز |
نوع: | رشته |
عنصر <Property>
خصوصیتی را مشخص می کند که در زمان اجرا می توانید از کد جاوا به آن دسترسی داشته باشید. شما باید یک مقدار رشته تحت اللفظی برای هر ویژگی مشخص کنید. شما نمی توانید به متغیرهای جریان در این عنصر ارجاع دهید. برای مثال کاری که از ویژگیها استفاده میکند، به نحوه استفاده از ویژگیها در فراخوانی جاوا مراجعه کنید.
<Properties> <Property name="propName">propertyValue</Property> </Properties>
پیش فرض: | هیچ کدام |
حضور: | اختیاری |
نوع: | رشته |
صفات
صفت | توضیحات | پیش فرض | حضور |
---|---|---|---|
نام | نام ملک را مشخص می کند. | N/A | مورد نیاز. |
عنصر <ResourceURL>
این عنصر فایل جاوا JAR را مشخص می کند که با اجرای خط مشی فراخوانی جاوا اجرا می شود.
میتوانید این فایل را در محدوده پروکسی API (در زیر /apiproxy/resources/java
در بسته پراکسی API یا در بخش اسکریپتها در پنجره ناوبر ویرایشگر پراکسی API)، یا در محدوده سازمان یا محیط برای استفاده مجدد در چندین پراکسی API ذخیره کنید. همانطور که در فایل های منابع توضیح داده شده است.
<JavaCallout name="MyJavaCalloutPolicy"> <ResourceURL>java://MyJavaCallout.jar</ResourceURL> <ClassName>com.example.mypolicy.MyJavaCallout</ClassName> </JavaCallout>
پیش فرض: | هیچ کدام |
حضور: | مورد نیاز |
نوع: | رشته |
مرجع خطا
این بخش کدهای خطا و پیامهای خطایی را که برگردانده میشوند و متغیرهای خطا را که توسط Edge تنظیم میشوند، هنگامی که این خطمشی خطا را راهاندازی میکند، توضیح میدهد. این اطلاعات برای دانستن اینکه آیا در حال توسعه قوانین خطا برای رسیدگی به خطاها هستید، مهم است. برای کسب اطلاعات بیشتر، آنچه را که باید در مورد خطاهای خط مشی و مدیریت خطاها بدانید را ببینید.
خطاهای زمان اجرا
این خطاها ممکن است هنگام اجرای سیاست رخ دهند.
کد خطا | وضعیت HTTP | علت | رفع کنید |
---|---|---|---|
steps.javacallout.ExecutionError | 500 | زمانی اتفاق میافتد که کد جاوا در طول اجرای یک خطمشی JavaCallout یک استثنا ایجاد میکند یا null را برمیگرداند. | 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> در jar نیست. |
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 نام خطا است، همانطور که در جدول خطاهای Runtime در بالا ذکر شده است. نام خطا آخرین قسمت کد خطا است. | 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 Callouts در نظر بگیرید:
- اکثر تماس های سیستمی غیر مجاز هستند. به عنوان مثال، شما نمی توانید سیستم فایل داخلی را بخواند یا بنویسد.
- دسترسی به شبکه از طریق سوکت Apigee دسترسی به آدرس های sitelocal، anylocal، loopback و linklocal را محدود می کند.
- فراخوان نمی تواند اطلاعاتی در مورد فرآیند جاری، لیست فرآیند یا استفاده از CPU/حافظه در دستگاه دریافت کند. اگرچه برخی از این تماسها ممکن است کاربردی باشند، اما پشتیبانی نمیشوند و در هر زمانی ممکن است فعالانه غیرفعال شوند. برای سازگاری فوروارد، باید از برقراری چنین تماس هایی در کد خود اجتناب کنید.
- تکیه بر کتابخانه های جاوا که با Apigee Edge ارائه شده اند پشتیبانی نمی شود. این کتابخانه ها فقط برای عملکرد محصول Edge هستند و هیچ تضمینی وجود ندارد که یک کتابخانه از انتشار تا انتشار در دسترس باشد.
- از
io.apigee
یاcom.apigee
به عنوان نام بسته در Java Callouts استفاده نکنید. این نامها توسط سایر ماژولهای Apigee رزرو شده و استفاده میشوند.
بسته بندی
JAR را در یک پراکسی API در زیر /resources/java
قرار دهید. اگر Java Callout شما به کتابخانه های شخص ثالث دیگری که به عنوان فایل های JAR مستقل بسته بندی شده اند متکی است، آن فایل های JAR را در فهرست /resources/java
نیز قرار دهید تا مطمئن شوید که در زمان اجرا به درستی بارگذاری می شوند.
اگر از رابط کاربری مدیریت برای ایجاد یا تغییر پروکسی استفاده میکنید، یک منبع جدید اضافه کنید و یک فایل JAR وابسته دیگر را مشخص کنید. اگر چندین JAR وجود دارد، به سادگی آنها را به عنوان منابع اضافی اضافه کنید. برای مراجعه به فایل های JAR اضافی، نیازی به تغییر پیکربندی خط مشی ندارید. قرار دادن آنها در /resources/java
کافی است.
برای اطلاعات در مورد آپلود جاوا JAR ها، فایل های منابع را ببینید.
برای مثالی دقیق که نحوه بسته بندی و استقرار Java Callout را با استفاده از Maven یا javac نشان می دهد، به نحوه ایجاد فراخوان جاوا مراجعه کنید.
جوادوک
Javadoc برای نوشتن کد Java Callout در اینجا در GitHub گنجانده شده است. شما باید HTML را در سیستم خود کلون یا دانلود کنید و سپس به سادگی فایل index.html را در یک مرورگر باز کنید.
نکات استفاده
- یک خط مشی فراخوانی جاوا حاوی هیچ کد واقعی نیست. در عوض، یک خط مشی فراخوانی جاوا به یک "منبع" جاوا ارجاع می دهد و مرحله ای را در جریان API که در آن کد جاوا اجرا می شود، تعریف می کند. میتوانید Java JAR خود را از طریق ویرایشگر پروکسی مدیریت رابط کاربری آپلود کنید، یا میتوانید آن را در فهرست
/resources/java
در پراکسیهای API که به صورت محلی توسعه میدهید قرار دهید. - برای عملیات سبک، مانند تماسهای API به سرویسهای راه دور، توصیه میکنیم از خطمشی ServiceCallout استفاده کنید. به خط مشی Callout Service مراجعه کنید.
- برای تعاملات نسبتاً ساده با محتوای پیام، مانند اصلاح یا استخراج سرصفحهها، پارامترها یا محتوای پیام HTTP، Apigee استفاده از خطمشی جاوا اسکریپت را توصیه میکند.
موضوعات مرتبط
- برای نمونههای مرتبط، به مخزن کتاب آشپزی جاوا مراجعه کنید.