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

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

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

      • لتحديد ما إذا كان المورد موجودًا على مستوى البيئة، عليك إصدار طلب البيانات من واجهة برمجة التطبيقات التالي باستخدام 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. لحذف المورد على مستوى الخادم الوكيل لواجهة برمجة التطبيقات، انتقل إلى علامة التبويب "الموارد" في جزء المستكشف من محرر الخادم الوكيل لواجهة برمجة التطبيقات وانقر على الزر "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 Support. إذا كنت تستخدم سحابة خاصة، يمكنك الاطّلاع على مقالة بدء استخدام 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 تالفًا، انتقِل إلى السبب: ملف الصف غير متوفّر.

الدقة

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

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

التشخيص

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

الدقة

  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"