كيفية التعامل مع أخطاء وسائل الشرح باستخدام 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

أنماط التعامل مع الأخطاء واضحة. يمكنك تعيين متغيرات التدفق في الجدول سياق تدفق الحافة باستخدام طريقة 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
    

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

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