אתם צופים במסמכי התיעוד של Apigee Edge.
כדאי לעיין במסמכי התיעוד של Apigee X. מידע
מהי קריאה ל-Java?
אם אין לכם ניסיון עם קריאות ל-Java, מומלץ להתחיל עם המאמר איך יוצרים קריאה ל-Java.
טיפול בשגיאות ב-Java Callout
כשכותבים Java Callout, יכול להיות שתרצו לבצע טיפול בשגיאות בהתאמה אישית בקוד Java. לדוגמה, יכול להיות שתרצו להחזיר הודעות שגיאה וכותרות בהתאמה אישית ו/או להגדיר משתני זרימה עם פרטי שגיאה בזרימת ה-proxy ב-Edge.
נציג דוגמה פשוטה של Java Callout שממחישה דפוסי טיפול בסיסיים בשגיאות מותאמות אישית. הדוגמה מחזירה הודעת שגיאה מותאמת אישית כשמתרחש חריג. הוא גם מציב את עקבות מחסנית השגיאות במשתנה של זרימת העבודה, וזו יכולה להיות טכניקה שימושית לניפוי באגים.
הורדת הפרויקט
כדי לפשט את התהליך, אפשר להוריד את הפרויקט הזה ממאגר api-platform-samples של Apigee ב-GitHub.
- מורידים או משכפלים את api-platform-samples למערכת.
- במסוף או בכלי לעריכת קוד לפי בחירתכם, עוברים לפרויקט
api-platform-samples/doc-samples/java-error.
קוד Java לדוגמה
התבניות לטיפול בשגיאות הן פשוטות. אפשר להגדיר משתני Flow בהקשר הנוכחי של Edge Flow באמצעות השיטה 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, נכלול גם דוגמה.
- מוודאים ש-Maven מותקן:
mvn -version
- מריצים את הסקריפט
java-error/buildsetup.sh. הסקריפט הזה מתקין את יחסי התלות הנדרשים ב-JAR במאגר Maven המקומי. - משתמשים בפקודה cd כדי לעבור לספרייה
java-error/callout. - מריצים את Maven:
mvn clean package
- אם רוצים, אפשר לוודא שקובץ ה-JAR
edge-custom-policy-java-error.jarהועתק אלjava-error/apiproxy/resources/java. זה המיקום הנדרש לקובצי JAR שרוצים לפרוס באמצעות שרת proxy.
הידור באמצעות javac
אם רוצים להשתמש ב-javac כדי לקמפל את הקוד, אפשר לעשות משהו דומה למה שמופיע בהמשך (מתוך הספרייה java-error). קובצי ה-JAR הנדרשים מסופקים לכם בספרייה java-error/lib.
- cd אל
api-platform-samples/doc-samples/java-error. - חשוב לוודא ש-javac נמצא בנתיב.
javac -version
- מריצים את פקודת ה-javac הבאה:
javac -d . -classpath ./lib/expressions-1.0.0.jar:./lib/message-flow-1.0.0.jar:. callout/src/main/java/JavaProperties.java
- מעתיקים את קובץ ה-JAR לספרייה apiproxy/resources/java. זה המיקום הנדרש לקובצי JAR שרוצים לפרוס באמצעות שרת proxy.
cp com/apigeesample/JavaProperties.class apiproxy/resources/java
פריסה של ה-proxy והתקשרות אליו
סקריפט פריסה מסופק בספרייה ./java-error. אבל לפני שמפעילים פתרונות חכמים, צריך לבצע הגדרה מהירה.
- cd אל
api-platform-samples/doc-samples/java-error - אם עוד לא עשיתם את זה, פותחים את הקובץ
../../setup/setenv.shועורכים אותו לפי ההוראות עם פרטי החשבון שלכם ב-Apigee: שם המשתמש (כתובת האימייל שמשויכת לחשבון), שם הארגון והדומיין שבו אתם משתמשים כדי לבצע קריאות לניהול API. לדוגמה, בדומיין Edge cloud, הדומיין הואhttps://api.enterprise.apigee.com, אבל יכול להיות שהדומיין שלכם יהיה שונה אם אתם משתמשים ב-Edge Private Cloud. - שומרים את קובץ ה-
setenv.sh. - מריצים את סקריפט הפריסה:
./deploy.sh
- אם הפריסה מצליחה, מפעילים את הסקריפט של הפונקציה:
./invoke.sh
סקריפט ההפעלה קורא לפקודת cURL שנראית כך:
curl http://$org-$env.$api_domain/java-error
מכיוון שהקריאה לא כוללת פרמטר שאילתה בשם name, קוד ה-Java מחזיר שגיאת זמן ריצה. ה-Proxy מחזיר את ההודעה והכותרת הבאות:
- הודעת שגיאה:
Please specify a name parameter! - כותרת:
ExceptionClass: java.lang.RuntimeException