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

כרגע מוצג התיעוד של Apigee Edge.
כניסה למסמכי התיעוד של Apigee X.
מידע

מהו הסבר Java?

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

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

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

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

מורידים את הפרויקט

כדי לפשט את הדברים, אפשר להוריד את הפרויקט הזה ממאגר Apigee api-platform-samples ב-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. 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. 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 שברצונך לפרוס באמצעות שרת 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 Private Cloud.
  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