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

أنت الآن بصدد الاطّلاع على مستندات Apigee Edge.
انتقِل إلى مستندات Apigee X.
info

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

التشخيص

  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. إذا كنت من مستخدمي 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 تالفًا، انتقِل إلى السبب: ملف الفئة غير متوفّر.

الدقة

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

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

التشخيص

  1. تحقَّق ممّا إذا كان ملف فئة Java المحدّد (المحدّد في الخطوة 1 أعلاه) جزءًا من ملف JAR المحدّد في >ResourceURL< أو أي من ملفات JAR التابعة.
  2. إذا لم يكن ملف الفئة متوفّرًا في أي من ملفات JAR، تكون قد حدّدت سبب الخطأ. انتقِل إلى "درجة الدقة".
  3. إذا كان ملف الفئة متوفّرًا في أحد ملفات JAR المحدّدة في سياسة JavaCallout، من المفترض أن تكون هناك مشكلة في رمز Java أو الفئة التابعة التي تؤدي إلى حدوث هذا الخطأ. أ. إذا كنت من مستخدمي "السحابة العامة"، يُرجى التواصل مع فريق دعم Apigee. b. إذا كنت من مستخدمي Private Cloud، انتقِل إلى السبب: مشكلة في رمز 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. لتحميل مرجع على مستوى خادم وكيل API، انقر على + (علامة الجمع) في علامة التبويب "المراجع"، ثم انقر على استيراد ملف وحمِّل الملف من جهازك المحلي. يجب أن يتطابق اسم الملف مع العنصر >ResourceURL<، ولكن بدون البادئة java://.

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

    أرسِل طلب البيانات من واجهة برمجة التطبيقات من الدليل نفسه الذي يحتوي على الملف.

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

    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"