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

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

ما هي Java Callout؟

إذا كنت جديدًا على عمليات الربط الخارجية في Java، ننصحك بالبدء بمقال كيفية إنشاء عملية ربط خارجية في Java.

معالجة الأخطاء في Java Callout

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

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

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

لتسهيل الأمر، يمكنك تنزيل هذا المشروع من مستودع 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. cd إلى 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. cd إلى api-platform-samples/doc-samples/java-error
  2. إذا لم يسبق لك إجراء ذلك، افتح الملف ../../setup/setenv.sh وعدِّله كما هو موضّح باستخدام معلومات حسابك على Apigee: اسم المستخدم (عنوان البريد الإلكتروني المرتبط بحسابك) واسم مؤسستك والنطاق الذي تستخدمه لإجراء طلبات إدارة واجهة برمجة التطبيقات. على سبيل المثال، بالنسبة إلى Edge Cloud، يكون النطاق هو 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