פתרון בעיות בהטמעה של מדיניות JavaCallout

הדף הזה רלוונטי ל-Apigee ול-Apigee Hybrid.

לעיון במסמכי התיעוד של Apigee Edge

ResourceDoesNotExist

הודעת השגיאה

פריסת ה-proxy ל-API דרך ממשק המשתמש או ה-API של Apigee נכשלת ומוצגת הודעת השגיאה הבאה:

Error Deploying Revision <var>revision_number</var> to <var>environment</var>
Resource with name <var>ResourceURL</var> and type java does not exist.

הודעת שגיאה לדוגמה

Error Deploying Revision 1 to test
Resource with name myresource.jar and type java does not exist.

דוגמה לצילום מסך של שגיאה

שגיאה בפריסת גרסה 1 לבדיקה.

מטרה

אם המשאב שצוין ברכיב <ResourceURL> במדיניות JavaCallout לא קיים ברמת proxy ל-API או ברמת הסביבה, הפריסה של proxy ל-API תיכשל.

אבחון

  1. מזהים את הסביבה ואת שם המשאב. המידע הזה מופיע בהודעת השגיאה. לדוגמה, בשגיאה הבאה הסביבה היא test ושם המשאב שמופיע ברכיב <ResourceURL> הוא myresource.jar.

    Error Deploying Revision 1 to test
    Resource with name myresource.jar and type java does not exist.
    
  2. מזהים את מדיניות JavaCallout שמשתמשת במשאב שזוהה בשלב 1 למעלה.

    לדוגמה, במדיניות הבאה הערך של <ResourceURL> הוא myresource.jar, שזהה לערך בהודעת השגיאה:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <JavaCallout name="hello-java">
        <ClassName>com.apigeesample.HelloJava</ClassName>
        <ResourceURL>java://myresource.jar</ResourceURL>
    </JavaCallout>
    
  3. בודקים אם המשאב הוא חלק מ-proxy ל-API שנכשל או שהוא הועלה ברמת הסביבה. אם לא, זו הסיבה לשגיאה.

    • עוברים לכרטיסייה Resources (משאבים) בחלונית Navigator (ניווט) של עורך ה-proxy ל-API כדי לראות את כל המשאבים שהועלו ברמת ה-proxy ל-API. בדוגמה הזו, לא הועלו משאבים ל-proxy ל-API.

      הכרטיסייה Resources (משאבים) בכלי לעריכת proxy ל-API בחלונית Navigator (ניווט).

    • משאבים יכולים להיות זמינים ברמת הסביבה. מידע נוסף זמין במאמר בנושא קובצי משאבים.

      • כדי לבדוק אם המשאב קיים ברמת הסביבה, מריצים את קריאה ל-API הבאה באמצעות curl:

        curl \
        "https://apigee.googleapis.com/v1/organizations/$ORG/environments/$ENV/resourcefiles/java/myresource.jar" \
        -H "Authorization: Bearer $TOKEN"

        $TOKEN מוגדר כאסימון הגישה מסוג OAuth 2.0, כפי שמתואר במאמר איך מקבלים אסימון גישה מסוג OAuth 2.0. מידע על האפשרויות curl שבהן נעשה שימוש בדוגמה הזו מופיע במאמר שימוש ב-curl. תיאור של משתני הסביבה שבהם אפשר להשתמש מופיע במאמר בנושא הגדרת משתני סביבה לבקשות API של Apigee.

      אם מקבלים קוד סטטוס 404 כתגובה לממשקי ה-API האלה, סימן שהמשאב חסר ברמת הסביבה.

    אם המשאב לא זמין ברמת ה-proxy ל-API וברמת הסביבה, תוחזר שגיאת הפריסה:

    Resource with name myresource.jar and type java does not exist.
     ```
    

רזולוציה

מוודאים שהמשאב שצוין ברכיב <ResourceURL> קיים ברמת ה-proxy ל-API או הסביבה. מידע נוסף זמין במאמר ניהול משאבים.

כדי לתקן את מדיניות JavaCallout שמוצגת למעלה, מעלים את קובץ ה-JAR ברמה המתאימה (proxy ל-API או רמת הסביבה).

NoResourceForURL

הודעת השגיאה

פריסת ה-proxy ל-API דרך ממשק המשתמש או ה-API של Apigee נכשלת ומוצגת הודעת השגיאה הבאה:

Error in deployment for environment <var>environment</var>
The revision is deployed, but traffic cannot flow. Could not locate a resource with URL <var>ResourceURL</var>

הודעת שגיאה לדוגמה

Error in deployment for environment test
The revision is deployed, but traffic cannot flow. Could not locate a resource with URL java://myresource.jar

דוגמה לצילום מסך של שגיאה

שגיאה בפריסה של סביבת הבדיקה.

מטרה

השגיאה הזו יכולה להופיע אם קובץ המשאבים פגום או שההעלאה שלו לא הושלמה, גם אם נראה שהוא קיים ברמת ה-proxy ל-API או הסביבה.

אבחון

  1. מזהים את הסביבה ואת שם המשאב. המידע הזה מופיע בהודעת השגיאה. לדוגמה, בשגיאה הבאה, שם הסביבה הוא test ושם המשאב שמשמש ברכיב <ResourceURL> הוא myresource.jar.

    Error in deployment for environment test
    The revision is deployed, but traffic cannot flow. Could not locate a resource with URL java://myresource.jar
    
  2. מוודאים שהמשאב הועלה ברמת ה-proxy ל-API או הסביבה. בדוגמה שלמטה אפשר לראות שהמשאב myresource.jar מועלה ברמת ה-proxy ל-API.

    משאבים של proxy ל-API.

    משאבים יכולים להיות זמינים ברמת הסביבה. מידע נוסף זמין במאמר בנושא קובצי משאבים.

    כדי לבדוק אם המשאב קיים ברמת הסביבה, מריצים את קריאה ל-API הבאה באמצעות curl:

    curl \
    "https://apigee.googleapis.com/v1/organizations/$ORG/environments/$ENV/resourcefiles/java/myresource.jar" \
    -H "Authorization: Bearer $TOKEN"

    $TOKEN מוגדר לאסימון הגישה שלכם ב-OAuth 2.0, כמו שמתואר במאמר קבלת אסימון גישה מסוג OAuth 2.0. למידע על האפשרויות curl שמשמשות בדוגמה הזו, אפשר לעיין במאמר שימוש ב-curl.

    אם מקבלים קוד סטטוס 404 כתגובה לממשקי ה-API האלה, סימן שהמשאב חסר ברמת הסביבה.

רזולוציה

  1. אם קובעים שהמשאב קיים ברמת שרת ה-proxy של ה-API או ברמת הסביבה, צריך למחוק את המשאב ולהעלות אותו מחדש, כמו שמתואר בשלב 2. אם לא, מדלגים לשלב 3.
  2. כדי למחוק את המשאב ברמת ה-proxy ל-API, עוברים לכרטיסייה Resources (משאבים) בחלונית Navigator (ניווט) של הכלי לעריכת proxy ל-API ולוחצים על הלחצן X לצד המשאב, כמו שמוצג בהמשך.

    כדי למחוק את המשאב ברמת ה-proxy ל-API, לוחצים על Delete (מחיקה).

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

    curl -X DELETE \
    "https://apigee.googleapis.com/v1/organizations/$ORG/environments/$ENV/resourcefiles/java/myresource.jar" \
    -H "Authorization: Bearer $TOKEN"

    $TOKEN מוגדר לאסימון הגישה שלכם ב-OAuth 2.0, כמו שמתואר במאמר קבלת אסימון גישה מסוג OAuth 2.0. למידע על האפשרויות curl שמשמשות בדוגמה הזו, אפשר לעיין במאמר שימוש ב-curl.

  3. מעלים את קובץ ה-JAR) ברמה המתאימה (proxy ל-API או רמת הסביבה).

  4. אם העלאה מחדש של המשאב לא עוזרת, אפשר לפנות אל התמיכה של Apigee.

JavaCalloutInstantiationFailed

הודעת השגיאה

פריסת ה-proxy ל-API דרך ממשק המשתמש או ה-API של Apigee נכשלת ומוצגת הודעת השגיאה הבאה:

Error in deployment for environment <var>environment</var>
The revision is deployed, but traffic cannot flow. Failed to instantiate the JavaCallout Class <var>class_name</var>

או

Error in deployment for environment <var>environment</var>.
The revision is deployed and traffic can flow, but flow may be impaired. Failed to instantiate the JavaCallout Class <var>class_name</var>

הודעת שגיאה לדוגמה

Error in deployment for environment test
The revision is deployed, but traffic cannot flow. Failed to instantiate the JavaCallout Class my.class

דוגמה לצילום מסך של שגיאה

שגיאה בפריסה של סביבת הבדיקה.

מטרה

אלה הסיבות האופייניות לשגיאה הזו

הסיבה תיאור
חסר קובץ JAR קובץ ה-JAR שמכיל את מחלקת Java שזוהתה בשגיאה לא הועלה.
קובץ JAR פגום קובץ ה-JAR שמכיל את מחלקת ה-Java שזוהתה בשגיאה פגום או שההעלאה שלו לא הושלמה.
חסר קובץ Class קובץ המחלקה של Java שזוהה בשגיאה לא נכלל בקובץ ה-JAR שצוין ב->ResourceURL< או בקובצי JAR תלויים.
בעיה בקוד Java יש שגיאה בקוד, כמו בנאי חסר, בעיה בתלות בקוד או בעיה אחרת.

שלב אבחון נפוץ

  1. מזהים את שם הסביבה ואת שם הכיתה שלא הצליחו לייבא. לדוגמה, בהודעת השגיאה הבאה, שם הסביבה הוא test ושם הכיתה הוא my.class:

    Error in deployment for environment test
    The revision is deployed, but traffic cannot flow. Failed to instantiate the JavaCallout Class my.class
    
    

הסיבה: חסר קובץ JAR

אבחון

  1. מזהים את קובץ ה-JAR שאמור להכיל את המחלקה (שזוהתה בשלב 1 למעלה) ושלא ניתן ליצור ממנו מופע.
  2. בודקים אם קובץ ה-JAR הספציפי הועלה ברמת ה-proxy ל-API או ברמת הסביבה. אם קובץ ה-JAR לא הועלה לאף אחת מהרמות, צריך לעבור אל 'פתרון'.
  3. אם קובץ ה-JAR הועלה, צריך לעבור אל הסיבה: קובץ JAR פגום.

רזולוציה

  1. אם קובץ ה-JAR פגום או הועלה באופן חלקי, צריך לבנות מחדש את ה-JAR ולהעלות את קובץ ה-JAR ברמה המתאימה (proxy ל-API או רמת הסביבה).
  2. פורסים מחדש את proxy ל-API.

הגורם: קובץ JAR פגום

אבחון

  1. מזהים את קובץ ה-JAR שאמור להכיל את המחלקה (שזוהתה בשלב 1 למעלה) שלא ניתן ליצור ממנה מופע.
  2. בודקים אם קובץ ה-JAR הספציפי פגום. לדוגמה, אם אי אפשר לבטל את ה-JAR של הקובץ כי הוא פגום או שההעלאה שלו לא הושלמה. אם הוא פגום, עוברים אל 'פתרון'.
  3. אם קובץ ה-JAR לא פגום, עוברים אל הסיבה: קובץ Class חסר.

רזולוציה

  1. בונים מחדש את קובצי ה-JAR הפגומים ומעלים את קובץ ה-JAR ברמה המתאימה (proxy ל-API או רמת הסביבה).
  2. פורסים מחדש את proxy ל-API.

הסיבה: קובץ כיתה חסר

אבחון

  1. בודקים אם קובץ המחלקה הספציפי של Java (שזוהה בשלב 1 למעלה) הוא חלק מקובץ ה-JAR שצוין ב->ResourceURL< או מקובצי JAR תלויים כלשהם.
  2. אם קובץ הכיתה לא קיים באף אחד מקובצי ה-JAR, מצאתם את הסיבה לשגיאה. עוברים אל 'רזולוציה'.
  3. אם קובץ המחלקה קיים באחד מקובצי ה-JAR שצוינו במדיניות JavaCallout, כנראה שיש בעיה בקוד Java או במחלקה התלויה שגורמת לשגיאה הזו. לקבלת עזרה, אפשר לפנות אל התמיכה של Apigee.

רזולוציה

  1. צריך לבנות מחדש את קובץ ה-JAR עם קובצי המחלקה החסרים ולהעלות את קובץ ה-JAR ברמה המתאימה (proxy ל-API או רמת הסביבה).
  2. פורסים מחדש את ה-API Proxy.

העלאת קובץ JAR

מוודאים שרכיב המשאב עם כל המחלקות הנדרשות קיים ברמת ה-API Proxy או הסביבה. מידע נוסף זמין במאמר בנושא קובצי משאבים.

  1. כדי להעלות משאב ברמת ה-API proxy, לוחצים על + (סימן הפלוס) בכרטיסייה Resources, בוחרים באפשרות Import file ומעלים קובץ מהמחשב המקומי. שם הקובץ צריך להיות זהה לרכיב >ResourceURL<, אבל ללא התחילית java://.

    בכרטיסייה &#39;משאבים&#39;, בוחרים באפשרות &#39;ייבוא קובץ&#39;.

  2. אם רוצים שמשאב יהיה זמין ליותר מ-proxy ל-API אחד באותה סביבה, צריך להעלות את המשאב לסביבה. תצטרכו להשתמש ב-Apigee API, כמו שמתואר במאמר קובצי משאבים.

    לדוגמה, מזינים את הקריאה הבאה ל-API מהמחשב המקומי כדי להעלות את הקובץ שצוין ברמת הסביבה:

    curl -H "Content-Type: application/octet-stream" \
    -X POST  -H "Authorization: Bearer $TOKEN" --data-binary @{classes.jar} \
    "https://apigee.googleapis.com/v1/organizations/$ORG/environments/$ENV/resourcefiles?name=myresouce.jar&type=java"

    $TOKEN מוגדר לאסימון הגישה שלכם ב-OAuth 2.0, כמו שמתואר במאמר קבלת אסימון גישה מסוג OAuth 2.0. למידע על האפשרויות curl שמשמשות בדוגמה הזו, אפשר לעיין במאמר שימוש ב-curl.

    מבצעים את הקריאה ל-API מאותה ספרייה שבה נמצא הקובץ.

  3. כדי להפוך את הקובץ לזמין לכל ה-API proxy בכל הסביבות בארגון, אפשר להשמיט את פרטי הסביבה בנתיב הבסיסי. לדוגמה:

    curl -H "Content-Type: application/octet-stream" \
    -X POST  -H "Authorization: Bearer $TOKEN" --data-binary @{classes.jar} \
    "https://apigee.googleapis.com/v1/organizations/$ORG/resourcefiles?name=myresouce.jar&type=java"

    $TOKEN מוגדר לאסימון הגישה שלכם ב-OAuth 2.0, כמו שמתואר במאמר קבלת אסימון גישה מסוג OAuth 2.0. למידע על האפשרויות curl שמשמשות בדוגמה הזו, אפשר לעיין במאמר שימוש ב-curl.