شما در حال مشاهده اسناد Apigee Edge هستید.
به مستندات Apigee X بروید . اطلاعات
منبع وجود ندارد
پیغام خطا
استقرار پراکسی API از طریق Edge UI یا Edge management API با این پیام خطا انجام نمی شود:
Error Deploying Revision <var>revision_number</var> to <var>environment</var>
Resource with name <var>ResourceURL</var> and type java does not exist.
نمونه پیام خطا
Error Deploying Revision 1 to test
Resource with name myresource.jar and type java does not exist.
نمونه خطا از صفحه نمایش
علت
اگر منبع مشخص شده در عنصر <ResourceURL>
در خط مشی JavaCallout در سطح پراکسی API، محیط یا سازمان وجود نداشته باشد، در این صورت استقرار پراکسی API با شکست مواجه می شود.
تشخیص
نام محیط و منبع را شناسایی کنید. شما می توانید این اطلاعات را در پیام خطا پیدا کنید. به عنوان مثال، در خطای زیر محیط
test
است و نام منبع استفاده شده در عنصرResourceURL>
myresource.jar
است.Error Deploying Revision 1 to test Resource with name myresource.jar and type java does not exist.
خط مشی JavaCallout را تعیین کنید که از منبع مشخص شده در مرحله 1 در بالا استفاده می کند.
به عنوان مثال، خط مشی زیر مقدار
ResourceURL>
را به عنوانmyresource.jar
مشخص می کند که با مقدار موجود در پیام خطا مطابقت دارد:<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <JavaCallout name="hello-java"> <ClassName>com.apigeesample.HelloJava</ClassName> <ResourceURL>java://myresource.jar</ResourceURL> </JavaCallout>
تعیین کنید که آیا منبع بخشی از پروکسی API است که خراب است یا در سطح محیط یا سازمان آپلود شده است. اگر نه، پس این دلیل خطا است.
برای مشاهده تمام منابع آپلود شده در سطح پروکسی API، به برگه منابع در صفحه ناوبر ویرایشگر پراکسی API بروید. در این مثال، پراکسی API هیچ منبعی آپلود نشده است.
منابع می توانند در سطح محیط یا سازمان در دسترس باشند. برای اطلاعات بیشتر، فایلهای منابع را ببینید.
برای تعیین اینکه آیا منبع در سطح محیط وجود دارد یا خیر، فراخوانی API زیر را با استفاده از curl صادر کنید:
curl -v -u <strong>email </strong>"https://api.enterprise.apigee.com/v1/organizations/myorg/environments/myenv/resourcefiles/java/myresource.jar"
برای تعیین اینکه آیا منبع در سطح سازمان وجود دارد یا خیر، فراخوانی API زیر را با استفاده از curl صادر کنید و جزئیات محیط را حذف کنید:
curl -v -u email "https://api.enterprise.apigee.com/v1/organizations/myorg/resourcefiles/java/myresource.jar"
اگر کد وضعیت 404 را به عنوان پاسخ برای این APIها دریافت کنید، آنگاه این منبع در سطح سازمان و محیط وجود ندارد.
اگر منبع در سطح پراکسی API، سازمان و محیط در دسترس نباشد، خطای استقرار برگردانده می شود:
Resource with name myresource.jar and type java does not exist. ```
قطعنامه
اطمینان حاصل کنید که منبع مشخص شده در عنصر <ResourceURL>
در سطح پروکسی، محیط یا سازمان API وجود دارد. برای اطلاعات بیشتر، فایلهای منابع را ببینید.
برای اصلاح مثال خط مشی JavaCallout نشان داده شده در بالا، فایل JAR را در سطح مناسب (سطح پراکسی API، سازمان یا محیط) آپلود کنید .
NoResourceForURL
پیغام خطا
استقرار پراکسی API از طریق Edge UI یا Edge management API با این پیام خطا انجام نمی شود:
Error in deployment for environment <var>environment</var>
The revision is deployed, but traffic cannot flow. Could not locate a resource with URL <var>ResourceURL</var>
نمونه پیام خطا
Error in deployment for environment test
The revision is deployed, but traffic cannot flow. Could not locate a resource with URL java://myresource.jar
نمونه خطا از صفحه نمایش
علت
این خطا ممکن است در صورتی رخ دهد که فایل منبع خراب باشد یا تا حدی آپلود شود، حتی اگر به نظر می رسد در سطح پروکسی API، محیط یا سازمان وجود دارد.
تشخیص
محیط و نام منبع را شناسایی کنید. شما می توانید این اطلاعات را در پیام خطا پیدا کنید. به عنوان مثال، در خطای زیر، نام محیط
test
و نام منبع استفاده شده در عنصرResourceURL>
myresource.jar
است.Error in deployment for environment test The revision is deployed, but traffic cannot flow. Could not locate a resource with URL java://myresource.jar
اطمینان حاصل کنید که منبع در سطح پروکسی API، محیط یا سازمان آپلود شده است. در مثال زیر، می توانید ببینید که منبع
myresource.jar
در سطح پروکسی API آپلود شده است.منابع می توانند در سطح محیط یا سازمان در دسترس باشند. برای اطلاعات بیشتر، فایلهای منابع را ببینید.
برای تعیین اینکه آیا منبع در سطح محیط وجود دارد یا خیر، فراخوانی API زیر را با استفاده از curl صادر کنید:
curl -v -u <strong>email </strong>"https://api.enterprise.apigee.com/v1/organizations/myorg/environments/myenv/resourcefiles/java/myresource.jar"
برای تعیین اینکه آیا منبع در سطح سازمان وجود دارد یا خیر، فراخوانی API زیر را با استفاده از curl صادر کنید و جزئیات محیط را حذف کنید:
curl -v -u email "https://api.enterprise.apigee.com/v1/organizations/myorg/resourcefiles/java/myresource.jar"
اگر کد وضعیت 404 را به عنوان پاسخ برای این APIها دریافت کنید، آنگاه این منبع در سطح سازمان و محیط وجود ندارد.
قطعنامه
- اگر تشخیص دادید که منبع در سطح پراکسی API، سازمان یا محیط وجود دارد، منبع را حذف کرده و دوباره آن را آپلود کنید، همانطور که در مرحله 2 توضیح داده شد. در غیر این صورت، به مرحله 3 بروید.
برای حذف منبع در سطح پروکسی API، به برگه منابع در قسمت Navigator ویرایشگر پراکسی API بروید و روی دکمه "X" در کنار منبع مانند تصویر زیر کلیک کنید.
برای حذف منبع در سطح محیط یا سازمان ، از فعل DELETE در فراخوانی های API استفاده کنید که قبلاً در مراحل تشخیص استفاده می شد. به عنوان مثال، برای حذف منبع در سطح محیط، دستور زیر را وارد کنید:
curl -X DELETE -v -u <strong>email </strong>"https://api.enterprise.apigee.com/v1/organizations/myorg/environments/myenv/resourcefiles/java/myresource.jar"
فایل JAR را در سطح مناسب (پراکسی API، سازمان یا سطح محیط) آپلود کنید .
اگر آپلود مجدد منبع کمکی نکرد، پردازشگرهای پیام آسیب دیده باید دوباره راه اندازی شوند. اگر از Apigee Edge در Cloud استفاده میکنید، با پشتیبانی Apigee تماس بگیرید. اگر کاربر Private Cloud هستید، به شروع، توقف، راه اندازی مجدد و بررسی وضعیت Apigee Edge مراجعه کنید.
JavaCalloutInstantiationFailed
پیغام خطا
استقرار پراکسی API از طریق Edge UI یا Edge management API با این پیام خطا انجام نمی شود:
Error in deployment for environment <var>environment</var>
The revision is deployed, but traffic cannot flow. Failed to instantiate the JavaCallout Class <var>class_name</var>
یا
Error in deployment for environment <var>environment</var>.
The revision is deployed and traffic can flow, but flow may be impaired. Failed to instantiate the JavaCallout Class <var>class_name</var>
نمونه پیام خطا
Error in deployment for environment test
The revision is deployed, but traffic cannot flow. Failed to instantiate the JavaCallout Class my.class
نمونه خطا از صفحه نمایش
علت
در اینجا دلایل معمولی برای این خطا وجود دارد
علت | توضیحات |
فایل JAR موجود نیست | فایل JAR حاوی کلاس جاوا شناسایی شده در خطا آپلود نمی شود. |
فایل JAR خراب شده | فایل JAR حاوی کلاس جاوا شناسایی شده در خطا خراب است/تا حدی آپلود شده است. |
فایل کلاس موجود نیست | فایل کلاس جاوا که در خطا شناسایی شده است، بخشی از فایل JAR مشخص شده در >ResourceURL< یا فایل های JAR وابسته نیست. |
مشکل کد جاوا | خطایی در کد وجود دارد، مانند عدم وجود سازنده، مشکل وابستگی کد، یا مشکلات دیگر. |
مرحله تشخیص رایج
نام محیط و کلاسی که وارد نشد را شناسایی کنید. به عنوان مثال در پیام خطای زیر نام محیط
test
و نام کلاسmy.class
است:Error in deployment for environment test The revision is deployed, but traffic cannot flow. Failed to instantiate the JavaCallout Class my.class
علت: از دست رفتن فایل JAR
تشخیص
- فایل JAR را تعیین کنید که قرار است حاوی کلاس باشد (در مرحله شماره 1 در بالا مشخص شده است) و نمی تواند نمونه سازی شود.
- بررسی کنید که آیا فایل JAR خاص در سطح پروکسی، سازمان یا محیط API آپلود شده است یا خیر. اگر فایل JAR در هیچ یک از سطوح آپلود نشد، به Resolution بروید.
- اگر فایل JAR آپلود شده است، به Cause: Corrupted JAR File بروید.
قطعنامه
- اگر فایل JAR خراب یا تا حدی آپلود شده است، JAR را دوباره بسازید و فایل JAR را در سطح مناسب (سطح پراکسی API، سازمان یا محیط) آپلود کنید .
- پراکسی API را مجدداً مستقر کنید.
علت: فایل JAR خراب شده است
تشخیص
- فایل JAR را که قرار است حاوی کلاسی باشد (که در مرحله شماره 1 در بالا مشخص شده است) که نمی تواند نمونه سازی شود را تعیین کنید.
- بررسی کنید که آیا فایل JAR خاص خراب است. به عنوان مثال، اگر نمیتوانید فایل را به دلیل خرابی یا آپلود جزئی حذف کنید. اگر خراب است، به Resolution بروید.
- اگر فایل JAR خراب نیست، به Cause: Missing Class File بروید.
قطعنامه
- فایل(های) JAR خراب را بازسازی کنید و فایل JAR را در سطح مناسب (پراکسی API، سازمان یا سطح محیط) آپلود کنید .
- پراکسی API را مجدداً مستقر کنید.
علت: از دست رفتن فایل کلاس
تشخیص
- بررسی کنید که آیا فایل کلاس جاوا خاص (که در مرحله شماره 1 در بالا مشخص شده است) بخشی از فایل JAR مشخص شده در >ResourceURL< یا هر یک از فایل های JAR وابسته است.
- اگر فایل کلاس در هیچ یک از فایل های JAR وجود نداشته باشد، شما علت خطا را مشخص کرده اید. به Resolution بروید.
- اگر فایل کلاس در یکی از فایلهای JAR مشخصشده در خطمشی JavaCallout وجود داشته باشد، باید کد جاوا یا کلاس وابسته مشکلی داشته باشد که منجر به این خطا میشود. الف اگر کاربر Public Cloud هستید، با پشتیبانی Apigee تماس بگیرید. ب اگر کاربر Private Cloud هستید، به Cause: Java Code Issue بروید.
قطعنامه
- JAR را با فایل(های) کلاس گم شده بازسازی کنید و فایل JAR را در سطح مناسب (سطح پروکسی API، سازمان یا محیط) آپلود کنید .
- پراکسی API را مجدداً مستقر کنید.
علت: مشکل کد جاوا
مراحل تشخیصی فقط برای کاربران خصوصی Cloud
تشخیص
- گزارشهای پردازشگر پیام (
/opt/apigee/var/log/edge-message-processor/system.log
و/opt/apigee/var/log/edge-message-processor/configurations.log
) را بررسی کنید. ممکن است استثنایی مشابه مثال زیر ببینید:
2019-07-05 05:40:13,240 org:myorg env:staging target:/organizations/myorg/apiproxies/MyAPI/revisions/5 action:add context-id: mode: Apigee-Main-53 ERROR CONFIG-CHANGE - AbstractConfigurator.add() : Add null to Step failed, reason: {} com.apigee.kernel.exceptions.spi.UncheckedException: Failed to instantiate the JavaCallout Class <class name> at com.apigee.steps.javacallout.JavaCalloutStepDefinition.newInstance(JavaCalloutStepDefinition.java:116) at com.apigee.messaging.runtime.StepDefinition.getStepDefinitionExecution(StepDefinition.java:218) …<snipped> Caused by: java.lang.reflect.InvocationTargetException: null at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at com.apigee.steps.javacallout.JavaCalloutStepDefinition.access$100(JavaCalloutStepDefinition.java:41) at com.apigee.steps.javacallout.JavaCalloutStepDefinition$CallOutWrapper.initialize(JavaCalloutStepDefinition.java:131) at com.apigee.steps.javacallout.JavaCalloutStepDefinition$CallOutWrapper.<init>(JavaCalloutStepDefinition.java:126) ... 42 common frames omitted Caused by: <Reason> ...<snipped>
استثنا را با دقت بخوانید تا دلیل شکست را بفهمید. به طور معمول، این ممکن است به مشکلی در کد جاوا شما اشاره کند.
قطعنامه
- بسته به علت خرابی، ممکن است مجبور شوید مشکل را در کد جاوا خود برطرف کنید.
- JAR را با فایل(های) کلاس گم شده بازسازی کنید و فایل JAR را در سطح مناسب (سطح پروکسی API، سازمان یا محیط) آپلود کنید .
- پراکسی API را مجدداً مستقر کنید.
فایل JAR را آپلود کنید
اطمینان حاصل کنید که عنصر منبع با تمام کلاسهای لازم در سطح API Proxy، محیط یا سازمان وجود دارد. برای اطلاعات بیشتر، فایلهای منابع را ببینید.
برای آپلود یک منبع در سطح پروکسی API، روی + (علامت بعلاوه) در برگه منابع کلیک کنید، سپس Import file و آپلود فایل را از دستگاه محلی خود انتخاب کنید. نام فایل باید با عنصر >ResourceURL< مطابقت داشته باشد، اما بدون پیشوند
java://
.اگر می خواهید منبعی برای بیش از یک پراکسی API در یک محیط موجود باشد، منبع را در محیط آپلود کنید. همانطور که در فایل های منابع توضیح داده شده است، باید از Edge API استفاده کنید.
به عنوان مثال، برای آپلود فایل مشخص شده در سطح محیط، فراخوانی API زیر را از دستگاه محلی وارد کنید:
curl -v -u email -H "Content-Type: application/octet-stream" \ -X POST --data-binary @{classes.jar} \ "http://{mgmt_server}:{port}/v1/organizations/myorg/environments/myenv/resourcefiles?name=myresouce.jar&type=java"
فراخوانی API را از همان پوشه فایل صادر کنید.
برای در دسترس قرار دادن فایل برای همه پراکسیهای API در تمام محیطهای سازمان، میتوانید جزئیات محیط را در مسیر پایه حذف کنید. به عنوان مثال:
curl -v -u email -H "Content-Type: application/octet-stream" \ -X POST --data-binary @{classes.jar} \ "http://{mgmt_server}:{port}/v1/organizations/myorg/resourcefiles?name=myresouce.jar&type=java"