הדף הזה רלוונטי ל-Apigee ול-Apigee Hybrid.
לעיון במסמכי התיעוד של
Apigee Edge
מהי קריאה ל-Java?
אם אתם חדשים ב-JavaCallout, מומלץ להתחיל עם איך יוצרים Java callout.
טיפול בשגיאות במדיניות JavaCallout
כשכותבים מדיניות JavaCallout, יכול להיות שתרצו לבצע טיפול בשגיאות בהתאמה אישית בקוד Java. לדוגמה, יכול להיות שתרצו להחזיר הודעות שגיאה וכותרות בהתאמה אישית, ו/או להגדיר משתני זרימה עם פרטי שגיאה בזרימת ה-proxy ב-Apigee.
נציג דוגמה פשוטה למדיניות JavaCallout שממחישה דפוסי טיפול בסיסיים בשגיאות בהתאמה אישית. הדוגמה מחזירה הודעת שגיאה מותאמת אישית כשמתרחש חריג. הוא גם מציב את ה-stacktrace של השגיאה במשתנה של זרימת העבודה, וזו יכולה להיות טכניקה שימושית לניפוי באגים.
הורדת הפרויקט
כדי לפשט את התהליך, אפשר להוריד את הפרויקט הזה ממאגר api-platform-samples של Apigee ב-GitHub.
- מורידים או משכפלים את api-platform-samples למערכת.
- במסוף או בכלי לעריכת קוד לפי בחירתכם, עוברים לפרויקט
api-platform-samples/doc-samples/java-error.
קוד Java לדוגמה
התבניות לטיפול בשגיאות הן פשוטות. אפשר להגדיר משתני flow בהקשר הנוכחי של ה-flow ב-Apigee באמצעות השיטה 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.
פריסה של ה-proxy והתקשרות אליו
סקריפט פריסה מסופק בספרייה ./java-error. אבל לפני שמפעילים פתרונות חכמים, צריך לבצע הגדרה מהירה.
- cd אל
api-platform-samples/doc-samples/java-error - הדרך הכי פשוטה לפרוס את ה-proxy היא לארוז אותו בקובץ ZIP ולהעלות את חבילת ה-proxy לסביבה בארגון Apigee. מידע נוסף זמין במאמר בנושא יצירת proxy ל-API. חשוב להשתמש באפשרות העלאת חבילת שרת proxy. אפשר לעיין גם ב טיפים וטריקים להעלאת proxy ל-API בחבילת proxy בקהילת Apigee.
- אחרי שפורסים את ה-proxy, מנסים להתקשר אליו:
curl https://$HOSTNAME/java-error
מכיוון שהקריאה לא כוללת פרמטר שאילתה בשם name, קוד ה-Java מחזיר שגיאת זמן ריצה. ה-Proxy מחזיר את ההודעה והכותרת הבאות:
- הודעת שגיאה:
Please specify a name parameter! - כותרת:
ExceptionClass: java.lang.RuntimeException