كيفية التعامل مع أخطاء وسائل الشرح باستخدام Java

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

ما وسيلة شرح Java؟

إذا كنت مبتدئًا في استخدام وسائل الشرح بلغة Java، ننصحك بالبدء بمقالة كيفية إنشاء وسيلة شرح بلغة Java.

التعامل مع الأخطاء في وسيلة شرح Java

عند كتابة وسيلة شرح Java، قد تحتاج إلى معالجة أخطاء مخصصة في رمز Java. على سبيل المثال، قد تريد عرض عناوين ورسائل خطأ مخصّصة و/أو ضبط متغيّرات التدفق مع معلومات عن الخطأ في تدفق الخادم الوكيل على Edge.

لنلقِ نظرة على مثال بسيط لوسائل شرح Java يوضّح الأنماط الأساسية المخصّصة لمعالجة الأخطاء. يعرض النموذج رسالة خطأ مخصصة عند حدوث استثناء. وهو يضع أيضًا تتبع تكديس الخطأ في متغيّر تدفق، ما يمكن أن يكون أسلوبًا مفيدًا لتصحيح الأخطاء.

تنزيل المشروع

لتبسيط الأمور، يمكنك تنزيل هذا المشروع من مستودع api-platform-samples Apigee على GitHub.

  1. يمكنك تنزيل api-platform-samples أو نسخها إلى نظامك.
  2. في أيّ وحدة طرفية أو أداة تعديل رموز من اختيارك، انتقِل إلى مشروع api-platform-samples/doc-samples/java-error.

نموذج رمز Java

أنماط التعامل مع الأخطاء واضحة. ويمكنك ضبط متغيّرات التدفق في سياق تدفق Edge الحالي باستخدام طريقة messageContext.setVariable(). لعرض معلومات الخطأ المخصّصة، أنشِئ مثيل ExecutionResult وطرق الاستدعاء عليه لضبط استجابة الخطأ وعناوينه.

package com.apigeesample;

import com.apigee.flow.execution.ExecutionContext;
import com.apigee.flow.execution.ExecutionResult;
import com.apigee.flow.execution.spi.Execution;
import com.apigee.flow.message.MessageContext;
import com.apigee.flow.execution.Action;

import org.apache.commons.lang.exception.ExceptionUtils;


public class JavaError implements Execution {
    public ExecutionResult execute(MessageContext messageContext, ExecutionContext executionContext) {
                
        try {

                String name = messageContext.getMessage().getHeader("username");

                if (name != null && name.length()>0) {
                        messageContext.getMessage().setContent("Hello, " + name + "!");
                        messageContext.getMessage().removeHeader("username");

                } else {
                        throw new RuntimeException("Please specify a name parameter!");
                }
            
                return ExecutionResult.SUCCESS;

        } catch (RuntimeException ex) {

            ExecutionResult executionResult = new ExecutionResult(false, Action.ABORT);
            
            //--Returns custom error message and header
            executionResult.setErrorResponse(ex.getMessage());
            executionResult.addErrorResponseHeader("ExceptionClass", ex.getClass().getName());
            
            //--Set flow variables -- may be useful for debugging. 
            messageContext.setVariable("JAVA_ERROR", ex.getMessage());
            messageContext.setVariable("JAVA_STACKTRACE", ExceptionUtils.getStackTrace(ex));
            return executionResult;
        }
    }
}


تجميع الرمز باستخدام Maven

تم إعداد المشروع بحيث يمكنك التجميع باستخدام Maven. إذا كنت تريد استخدام السمة javac، سندرج مثالاً أيضًا.

  1. تأكَّد من تثبيت Maven من خلال:
    mvn -version
    
  2. نفِّذ النص البرمجي java-error/buildsetup.sh. يثبّت هذا النص البرمجي تبعيات JAR المطلوبة في مستودع Maven المحلي.
  3. القرص المضغوط إلى دليل java-error/callout.
  4. نفِّذ Maven:
    mvn clean package
    
  5. تأكَّد من أنّه تم نسخ ملف JAR edge-custom-policy-java-error.jar إلى java-error/apiproxy/resources/java، إذا أردت ذلك. وهذا هو المكان المطلوب لملفات JAR التي تريد نشرها باستخدام خادم وكيل.

التجميع باستخدام javac

إذا أردت استخدام javac لتجميع الرمز، يمكنك تنفيذ ما يلي (من دليل java-error). يتم توفير ملفات JAR المطلوبة لك في دليل java-error/lib.

  1. القرص المضغوط إلى api-platform-samples/doc-samples/java-error.
  2. تأكد من أن لديك javac في مسارك.

    javac -version
    
  3. نفِّذ أمر javac التالي:

    javac -d . -classpath ./lib/expressions-1.0.0.jar:./lib/message-flow-1.0.0.jar:. callout/src/main/java/JavaProperties.java
    
  4. انسخ ملف JAR إلى دليل apiproxy/resources/java. وهذا هو الموقع المطلوب لملفات JAR التي تريد نشرها باستخدام خادم وكيل.

    cp com/apigeesample/JavaProperties.class apiproxy/resources/java
    

نشر الخادم الوكيل والاتصال به

يتم توفير نص برمجي للتفعيل في دليل ./java-error. ولكن قبل تشغيله، عليك إجراء إعداد سريع.

  1. القرص المضغوط إلى api-platform-samples/doc-samples/java-error
  2. إذا لم يسبق لك إجراء ذلك، افتح الملف ../../setup/setenv.sh وعدِّله كما هو موضّح في معلومات حسابك على Apigee: اسم المستخدم (عنوان البريد الإلكتروني المرتبط بحسابك) واسم مؤسستك والنطاق الذي تستخدمه لإجراء طلبات إدارة واجهة برمجة التطبيقات. على سبيل المثال، بالنسبة إلى سحابة Edge، يكون النطاق هو https://api.enterprise.apigee.com، ولكن قد يكون نطاقك مختلفًا إذا كنت تستخدم Edge Private Cloud.
  3. احفظ الملف setenv.sh.
  4. نفِّذ النص البرمجي للتفعيل:
    ./deploy.sh
    
  5. في حال نجاح عملية النشر، نفِّذ النص البرمجي للاستدعاء:
    ./invoke.sh
    

    يستدعي النص البرمجي للاستدعاء أمر cURL يبدو على النحو التالي:

    curl  http://$org-$env.$api_domain/java-error
    

    وبما أنّ الاستدعاء لا يتضمّن مَعلمة طلب بحث "name"، تعرض رمز Java خطأ في وقت التشغيل. يعرض الخادم الوكيل هذه الرسالة والعنوان:

  • رسالة الخطأ: Please specify a name parameter!
  • العنوان: ExceptionClass: java.lang.RuntimeException