تحديد وحلّ المشاكل المتعلقة بوقت تشغيل سياسة JavaCallout

يتم الآن عرض مستندات Apigee Edge.
انتقِل إلى مستندات Apigee X.
المعلومات

ResourceDoesNotExist

رسالة الخطأ

يتعذّر نشر الخادم الوكيل لواجهة برمجة التطبيقات من خلال واجهة مستخدم Edge أو واجهة برمجة تطبيقات إدارة Edge مع ظهور رسالة الخطأ التالية:

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 غير متوفّر على مستوى الخادم الوكيل لواجهة برمجة التطبيقات أو البيئة أو المؤسسة، سيتعذّر نشر الخادم الوكيل لواجهة برمجة التطبيقات.

التشخيص

  1. حدِّد البيئة واسم المورد. يمكنك العثور على هذه المعلومات في رسالة الخطأ. على سبيل المثال، في الخطأ التالي، تكون البيئة test واسم المورد المستخدَم في العنصر <ResourceURL> هو myresource.jar.

    Error Deploying Revision 1 to test
    Resource with name myresource.jar and type java does not exist.
    
  2. حدِّد سياسة 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>
    
  3. يمكنك تحديد ما إذا كان المورد جزءًا من الخادم الوكيل لواجهة برمجة التطبيقات يتعذُّر أو تم تحميله على مستوى البيئة أو المؤسسة. إذا لم يكن الأمر كذلك، فهذا هو سبب الخطأ.

    • انتقل إلى علامة التبويب "Resources" (الموارد) في جزء "المستكشف" من محرر الخادم الوكيل لواجهة برمجة التطبيقات لعرض جميع الموارد التي تم تحميلها على مستوى الخادم الوكيل لواجهة برمجة التطبيقات. في هذا المثال، لم يتم تحميل أي موارد للخادم الوكيل لواجهة برمجة التطبيقات.

    • يمكن أن تتوفر الموارد على مستوى البيئة أو المؤسسة. لمزيد من المعلومات، راجع ملفات الموارد.

      • لتحديد ما إذا كان المورد متوفرًا على مستوى البيئة، يمكنك إصدار طلب البيانات التالي من واجهة برمجة التطبيقات باستخدام curl: curl -v -u <strong>email </strong>"https://api.enterprise.apigee.com/v1/organizations/myorg/environments/myenv/resourcefiles/java/myresource.jar"

      • لتحديد ما إذا كان المورد متوفّرًا على مستوى المؤسسة، يمكنك إصدار طلب البيانات من واجهة برمجة التطبيقات التالي باستخدام curl مع حذف تفاصيل البيئة: curl -v -u email "https://api.enterprise.apigee.com/v1/organizations/myorg/resourcefiles/java/myresource.jar"

      إذا تلقيت رمز الحالة 404 كاستجابة لواجهات برمجة التطبيقات هذه، يعني ذلك أنّ المورد مفقود على مستوى المؤسسة والبيئة معًا.

    إذا لم يكن المورد متاحًا على مستوى الخادم الوكيل والمؤسسة والبيئة لواجهة برمجة التطبيقات، سيظهر خطأ في النشر:

    Resource with name myresource.jar and type java does not exist.
     ```
    

درجة الدقّة

تأكَّد من أنّ المورد المحدّد في العنصر <ResourceURL> متوفّر على مستوى الخادم الوكيل لواجهة برمجة التطبيقات أو البيئة أو المؤسسة. لمزيد من المعلومات، راجع ملفات الموارد.

لتصحيح مثال سياسة JavaCallout الموضح أعلاه، يمكنك تحميل ملف JAR على المستوى المناسب (الخادم الوكيل لواجهة برمجة التطبيقات أو مستوى المؤسسة أو البيئة).

NoResourceForURL

رسالة الخطأ

يتعذّر نشر الخادم الوكيل لواجهة برمجة التطبيقات من خلال واجهة مستخدم Edge أو واجهة برمجة تطبيقات إدارة Edge مع ظهور رسالة الخطأ التالية:

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

لقطة شاشة لمثال على الخطأ

السبب

قد يحدث هذا الخطأ إذا كان ملف المورد تالفًا أو تم تحميله جزئيًا، على الرغم من ظهوره على مستوى الخادم الوكيل أو البيئة أو المؤسسة لواجهة برمجة التطبيقات.

التشخيص

  1. تحديد البيئة واسم المورد. يمكنك العثور على هذه المعلومات في رسالة الخطأ. على سبيل المثال، في الخطأ التالي، يكون اسم البيئة هو 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
    
  2. تأكَّد من تحميل المورد على مستوى الخادم الوكيل لواجهة برمجة التطبيقات أو البيئة أو المؤسسة. في المثال أدناه، يمكنك ملاحظة أنّه تم تحميل المورد "myresource.jar" على مستوى الخادم الوكيل لواجهة برمجة التطبيقات.

    يمكن أن تتوفر الموارد على مستوى البيئة أو المؤسسة. لمزيد من المعلومات، راجع ملفات الموارد.

    لتحديد ما إذا كان المورد متوفرًا على مستوى البيئة، يمكنك إصدار طلب البيانات التالي من واجهة برمجة التطبيقات باستخدام curl: curl -v -u <strong>email </strong>"https://api.enterprise.apigee.com/v1/organizations/myorg/environments/myenv/resourcefiles/java/myresource.jar"

    لتحديد ما إذا كان المورد متوفّرًا على مستوى المؤسسة، يمكنك إصدار طلب البيانات من واجهة برمجة التطبيقات التالي باستخدام curl مع حذف تفاصيل البيئة: curl -v -u email "https://api.enterprise.apigee.com/v1/organizations/myorg/resourcefiles/java/myresource.jar"

    إذا تلقيت رمز الحالة 404 كاستجابة لواجهات برمجة التطبيقات هذه، يعني ذلك أنّ المورد مفقود على مستوى المؤسسة والبيئة معًا.

درجة الدقّة

  1. إذا حددت أن المورد موجود على مستوى الخادم الوكيل لواجهة برمجة التطبيقات أو المؤسسة أو البيئة، احذف المورد وأعد تحميله، كما هو موضح في الخطوة 2. وبخلاف ذلك، انتقِل مباشرةً إلى الخطوة 3.
  2. لحذف المورد على مستوى الخادم الوكيل لواجهة برمجة التطبيقات، انتقل إلى علامة التبويب "Resources" (الموارد) في جزء "المستكشف" (Navigator) في محرِّر وكيل واجهة برمجة التطبيقات وانقر على الزر "X" بجوار المورد كما هو موضح أدناه.

    لحذف المورد على مستوى البيئة أو المؤسسة، استخدِم الفعل DELETE في طلبات بيانات من واجهة برمجة التطبيقات التي سبق استخدامها في خطوات التشخيص. على سبيل المثال، لحذف المورد على مستوى البيئة، أدخِل الأمر التالي: curl -X DELETE -v -u <strong>email </strong>"https://api.enterprise.apigee.com/v1/organizations/myorg/environments/myenv/resourcefiles/java/myresource.jar"

  3. تحميل ملف JAR) على المستوى المناسب (الخادم الوكيل لواجهة برمجة التطبيقات أو مستوى المؤسسة أو البيئة.

  4. إذا لم تنجح إعادة تحميل المورد في حلّ المشكلة، عليك إعادة تشغيل معالِجات الرسائل المتأثّرة. إذا كنت تستخدم Apigee Edge في السحابة الإلكترونية، يُرجى التواصل مع فريق دعم Apigee. إذا كنت من مستخدمي Private Cloud، يُرجى الاطّلاع على مقالة البدء والإيقاف وإعادة التشغيل والتحقّق من حالة Apigee Edge.

JavaCalloutInstantiationFailed

رسالة الخطأ

يتعذّر نشر الخادم الوكيل لواجهة برمجة التطبيقات من خلال واجهة مستخدم Edge أو واجهة برمجة تطبيقات إدارة Edge مع ظهور رسالة الخطأ التالية:

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 الذي يحتوي على فئة Java المحدَّدة في الخطأ.
ملف JAR تالف ملف JAR الذي يحتوي على فئة Java المحددة في الخطأ تالف/تم تحميله جزئيًا.
ملف الصف غير متوفّر ملف فئة Java المحدد في الخطأ ليس جزءًا من ملف JAR المحدد في >ResourceURL< أو ملفات JAR التابعة.
مشكلة في رمز Java هناك خطأ في الرمز، مثل عدم توفُّر دالة إنشاء أو مشكلة في تبعية الرمز أو مشكلة أخرى.

خطوة التشخيص الشائعة

  1. حدِّد اسم البيئة والفئة التي تعذّر استيرادها. على سبيل المثال، في اسم بيئة رسالة الخطأ التالية هو 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 غير متوفر

التشخيص

  1. حدد ملف JAR الذي من المفترض أن يحتوي على الفئة (الموضحة في الخطوة رقم 1 أعلاه) والذي لا يمكن إنشاء مثيل له.
  2. تحقَّق مما إذا تم تحميل ملف JAR المحدَّد على مستوى الخادم الوكيل لواجهة برمجة التطبيقات أو المؤسسة أو البيئة. إذا لم يتم تحميل ملف JAR إلى أي من المستويات، فانتقل إلى "الدقة".
  3. في حال تحميل ملف JAR، انتقِل إلى السبب: ملف JAR تالف.

درجة الدقّة

  1. إذا كان ملف JAR تالفًا أو تم تحميله جزئيًا، أعِد إنشاء ملف JAR وحمِّل ملف JAR على المستوى المناسب (الخادم الوكيل لواجهة برمجة التطبيقات أو مستوى المؤسسة أو البيئة).
  2. أعِد نشر الخادم الوكيل لواجهة برمجة التطبيقات.

السبب: ملف JAR تالف

التشخيص

  1. حدد ملف JAR الذي من المفترض أن يحتوي على الفئة (الموضحة في الخطوة رقم 1 أعلاه) التي لا يمكن إنشاء مثيل لها.
  2. تحقَّق مما إذا كان ملف JAR المحدد تالفًا. على سبيل المثال، إذا لم تتمكن من إلغاء استخدام الملف لأنه تالف أو تم تحميله جزئيًا. في حال التلف، انتقل إلى "الدقة".
  3. إذا لم يكن ملف JAR تالفًا، انتقِل إلى Cause: عدم توفُّر ملف الفئة.

درجة الدقّة

  1. أعِد إنشاء ملفات JAR التالفة وحمِّل ملف JAR) على المستوى المناسب (الخادم الوكيل لواجهة برمجة التطبيقات أو مستوى المؤسسة أو البيئة.
  2. أعِد نشر الخادم الوكيل لواجهة برمجة التطبيقات.

السبب: ملف الفئة غير متوفّر

التشخيص

  1. تحقق مما إذا كان ملف فئة Java المحدد (الموضح في الخطوة رقم 1 أعلاه) جزءًا من ملف JAR المحدد في >ResourceURL< أو أي من ملفات JAR التابعة.
  2. إذا كان ملف الفئة غير موجود في أي من ملفات JAR، تكون قد حددت سبب الخطأ. انتقِل إلى "درجة الدقة".
  3. إذا كان ملف الفئة متوفرًا في أحد ملفات JAR المحدّدة في سياسة JavaCallout، يجب أن تكون هناك مشكلة في رمز Java أو الفئة التابعة تسبب هذا الخطأ. أ. إذا كنت من مستخدمي Public Cloud، يُرجى التواصل مع فريق دعم Apigee. ب. إذا كنت من مستخدمي "السحابة الإلكترونية الخاصة"، انتقِل إلى السبب: مشكلة في رمز JavaScript.

درجة الدقّة

  1. أعِد إنشاء ملف JAR الذي يتضمّن ملفات الفئة المفقودة وحمِّل ملف JAR على المستوى المناسب (الخادم الوكيل لواجهة برمجة التطبيقات أو مستوى المؤسسة أو البيئة).
  2. أعِد نشر الخادم الوكيل لواجهة برمجة التطبيقات.

السبب: مشكلة في رمز Java

خطوات التشخيص لمستخدمي السحابة الإلكترونية الخاصة فقط

التشخيص

  1. تحقَّق من سجلات معالج الرسائل (/opt/apigee/var/log/edge-message-processor/system.log و/opt/apigee/var/log/edge-message-processor/configurations.log).
  2. قد يظهر لك استثناء مشابه للمثال أدناه:

    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>
    
    
  3. اقرأ الاستثناء بعناية لفهم سبب الإخفاق. وقد يشير ذلك عادةً إلى حدوث مشكلة في رمز Java.

درجة الدقّة

  1. بناءً على سبب الإخفاق، قد تضطر إلى إصلاح المشكلة في رمز Java.
  2. أعِد إنشاء ملف JAR الذي يتضمّن ملفات الفئة المفقودة وحمِّل ملف JAR على المستوى المناسب (الخادم الوكيل لواجهة برمجة التطبيقات أو مستوى المؤسسة أو البيئة).
  3. أعِد نشر الخادم الوكيل لواجهة برمجة التطبيقات.

تحميل ملف JAR

تأكد من أن عنصر المورد مع كل الفئات اللازمة موجود على مستوى الخادم الوكيل لواجهة برمجة التطبيقات أو البيئة أو المؤسسة. لمزيد من المعلومات، راجع ملفات الموارد.

  1. لتحميل مورد على مستوى الخادم الوكيل لواجهة برمجة التطبيقات، انقر على + (علامة الجمع) في علامة التبويب "الموارد"، ثم اختَر استيراد ملف وحمِّل ملفًا من جهازك المحلي. يجب أن يتطابق اسم الملف مع عنصر >ResourceURL<، ولكن بدون البادئة java://.

  2. إذا كنت تريد إتاحة مورد لأكثر من خادم وكيل لواجهة برمجة التطبيقات في البيئة نفسها، يمكنك تحميل المورد إلى البيئة. ستحتاج إلى استخدام واجهة برمجة تطبيقات Edge، كما هو موضح في ملفات الموارد.

    على سبيل المثال، أدخِل طلب واجهة برمجة التطبيقات التالي من الجهاز المحلي لتحميل الملف المحدّد على مستوى البيئة:

    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"
    

    يمكنك إصدار طلب بيانات من واجهة برمجة التطبيقات من الدليل نفسه الذي يتضمّن الملف.

  3. لإتاحة الملف لجميع الخوادم الوكيلة لواجهة برمجة التطبيقات في جميع بيئات المؤسسة، يمكنك حذف تفاصيل البيئة في المسار الأساسي. مثال:

    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"