איך מטפלים בשגיאות של יתרונות מרכזיים ב-Java

אתם מציגים את מסמכי התיעוד של Apigee Edge.
לעיון במאמרי העזרה של Apigee X.
מידע

מהו יתרונות מרכזיים של Java?

אם זו הפעם הראשונה שאתם משתמשים בתוספי יתרונות מרכזיים ב-Java, מומלץ להתחיל עם המאמר איך יוצרים יתרונות מרכזיים של Java.

טיפול בשגיאות בהסבר על Java

כשכותבים יתרונות מרכזיים של Java, כדאי לבצע טיפול בשגיאות בהתאמה אישית בקוד Java. לדוגמה, ייתכן שתרצו להחזיר הודעות שגיאה וכותרות בהתאמה אישית או להגדיר משתני זרימה עם פרטי שגיאה בתהליך ה-Proxy ב-Edge.

נבחן דוגמה פשוטה להסבר על Java שממחישה דפוסים בסיסיים של טיפול בשגיאות בהתאמה אישית. הדוגמה מחזירה הודעת שגיאה מותאמת אישית כאשר מתרחשת חריגה. הוא גם מכניס את דוח הקריסות של השגיאות במשתנה זרימה, שיכול להיות שיטה שימושית לניפוי באגים.

הורדת הפרויקט

כדי לפשט את הדברים, אפשר להוריד את הפרויקט הזה ממאגר api-platform-samples של Apigee ב-GitHub.

  1. מורידים או משכפלים api-platform-samples למערכת שלכם.
  2. בטרמינל או בעורך קוד לבחירתכם, נכנסים לפרויקט api-platform-samples/doc-samples/java-error.

קוד Java לדוגמה

דפוסי הטיפול בשגיאות הם פשוטים. אפשר להגדיר משתני זרימה בהקשר הנוכחי של הזרימה ב-Edge באמצעות ה-method messageContext.setVariable(). כדי לקבל מידע מותאם אישית על השגיאה, צריך ליצור ממנה מכונת ExecutionResult ו-methods של קריאה כדי להגדיר את תגובת השגיאה ואת הכותרות.

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. cd לספרייה java-error/callout.
  4. הרצת Maven:
    mvn clean package
    
  5. ניתן לוודא שקובץ ה-JAR edge-custom-policy-java-error.jar הועתק אל java-error/apiproxy/resources/java. זה המיקום הנדרש לקובצי JAR שרוצים לפרוס באמצעות שרת proxy.

הידור באמצעות Javac

כדי להדר את הקוד באמצעות javac, אפשר לבצע פעולה דומה לזו (מהספרייה java-error). קובצי ה-JAR הנדרשים זמינים בספרייה java-error/lib.

  1. c לapi-platform-samples/doc-samples/java-error.
  2. חשוב לוודא שהנתיב Javac (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 שרוצים לפרוס באמצעות שרת proxy.

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

פריסה וקריאה לשרת ה-proxy

סקריפט לפריסה מסופק בספרייה ./java-error. אבל לפני שמפעילים אותו, צריך לבצע הגדרה מהירה.

  1. cd ל-api-platform-samples/doc-samples/java-error
  2. אם עדיין לא עשיתם זאת, פותחים את הקובץ ../../setup/setenv.sh ועורכים אותו בהתאם לפרטי חשבון Apigee שלכם: שם המשתמש (כתובת האימייל שמשויכת לחשבון), שם הארגון והדומיין שבו אתם משתמשים לביצוע קריאות לניהול API. לדוגמה, בענן של Edge, הדומיין הוא https://api.enterprise.apigee.com. עם זאת, הדומיין עשוי להיות שונה אם משתמשים בענן הפרטי של Edge.
  3. שומרים את קובץ ה-setenv.sh.
  4. מריצים את סקריפט הפריסה:
    ./deploy.sh
    
  5. אם הפריסה מצליחה, מריצים את סקריפט ההפעלה:
    ./invoke.sh
    

    סקריפט ההפעלה קורא לפקודת cURL שנראית כך:

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

    מכיוון שהקריאה לא כוללת את פרמטר השאילתה name, קוד Java יקפיץ שגיאת זמן ריצה. שרת ה-proxy מחזיר את ההודעה והכותרת הבאות:

  • הודעת שגיאה: Please specify a name parameter!
  • כותרת: ExceptionClass: java.lang.RuntimeException