פתרון בעיות בפריסת המדיניות בנושא 'חילוץ משתנים'

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

NothingToExtract

הודעת שגיאה

כשפורסים את שרת ה-proxy ל-API דרך ממשק המשתמש של Edge או Edge management API, מופיעה הודעת השגיאה הבאה:

Error Saving Revision [revision_number]
ExtractVariables [policy_name]: at least one of URIPath, QueryParam, Header, FormParam, XMLPayload, JSONPayload is mandatory. Revision:[revision_number]; APIProxy:[proxy_name]; Organization:[org_name]; Environment:[env_name].

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

Error Saving Revision 2
ExtractVariables EV-XML-Age: at least one of URIPath, QueryParam, Header, FormParam, XMLPayload, JSONPayload is mandatory.

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

סיבה

אם המדיניות בנושא חילוץ משתנים לא כוללת את הרכיבים URIPath, QueryParam, Header, FormParam, XMLPayload או JSONPayload, הפריסה של שרת ה-proxy של ה-API תיכשל כי אין נתונים לחלץ.

כפי שמצוין בהודעת השגיאה, מדיניות חילוץ המשתנים חייבת לכלול לפחות אחד מהרכיבים הבאים בתוך המדיניות: URIPath, QueryParam, Header, FormParam, XMLPayload או JSONPayload.

אבחון

צריך לבדוק את המדיניות בנושא חילוץ משתנים שמצוינת בהודעת השגיאה. אם המדיניות לא כוללת אפילו אחד מהרכיבים הבאים: URIPath, QueryParam, Header, FormParam, XMLPayload או JSONPayload, זו הסיבה לשגיאה. לדוגמה, המדיניות הבאה בנושא משתני חילוץ לא מכילה אף אחד מהרכיבים שצוינו למעלה:

<ExtractVariables async="false" continueOnError="false" enabled="true" name="EV-XML-Age">
    <DisplayName>EV-XML-Age</DisplayName>
    <Properties/>
</ExtractVariables>

מאחר שאף אחד מהאלמנטים שחובה להוסיף לא קיים במדיניות חילוץ משתנים, הפריסה של שרת ה-proxy ל-API נכשלת.

רזולוציה

יש לוודא שמדיניות חילוץ משתנים כוללת לפחות אחד מהאלמנטים הבאים: URIPath, QueryParam, Header, FormParam, XMLPayload, JSONPayload. לדוגמה:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ExtractVariables async="false" continueOnError="false" enabled="true" name="EV-XML-Age">
  <DisplayName>EV-XML-Age</DisplayName>
  <Properties/>
  <Source>request</Source>
  <XMLPayload>
    <Namespaces/>
      <Variable name="age" type="integer">
          <XPath>/age</XPath>
      </Variable>
  </XMLPayload>
</ExtractVariables>

NONEmptyPrefixMappedToEmptyURI

הודעת שגיאה

כשפורסים את שרת ה-proxy ל-API דרך ממשק המשתמש של Edge או Edge management API, מופיעה הודעת השגיאה הבאה:

Error Saving Revision [revision_number]
ExtractVariables [policy_name]: Non-empty prefix [prefix_name] cannot be mapped to empty uri.

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

Error Saving Revision 3
ExtractVariables EV-XML-Age: Non-empty prefix apigee cannot be mapped to empty uri.

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

סיבה

שגיאה זו מתרחשת אם למדיניות חילוץ משתנים יש קידומת שמוגדרת ברכיב <Namespace> ברכיב <XMLPayload>, אבל לא מוגדר URI.

אבחון

  1. מאתרים את המדיניות בנושא חילוץ משתנים שבה אירעה השגיאה, ואת שם הקידומת. שני הפריטים האלה מופיעים בהודעת השגיאה. לדוגמה, בשגיאה הבאה , שם המדיניות הוא EV-XML-Age והקידומת היא apigee:

    ExtractVariables EV-XML-Age: Non-empty prefix apigee cannot be mapped to empty uri.
    
  2. ב-XML של המדיניות בנושא חילוץ משתנים שנכשלו, מוודאים ששם הקידומת המוגדרת ברכיב <Namespace> ברכיב <XMLPayload> תואם לשם הקידומת שצוינה בהודעת השגיאה (שלב 1 למעלה). לדוגמה, המדיניות הבאה מציינת קידומת בשם apigee ברכיב <Namespace> , שתואמת למה שמופיע בהודעת השגיאה:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <ExtractVariables async="false" continueOnError="false" enabled="true" name="EV-XML-Age">
        <DisplayName>EV-XML-Age</DisplayName>
        <Source clearPayload="false">request</Source>
        <XMLPayload stopPayloadProcessing="false">
          <Namespaces>
            <Namespace prefix="apigee"></Namespace>
            <Namespace prefix="gmail">http://mail.google.com</Namespace>
          </Namespaces>
        <Variable name="legName" type="string">
        <XPath>/apigee:Directions/apigee:route/apigee:leg/apigee:name</Xpath>
            </Variable>
        </XMLPayload>
    </ExtractVariables>
    
  3. בודקים אם לרכיב <Namespace> עם הקידומת הספציפית שזוהתה בשלב 2 יש URI תקין. אם ה-URI חסר, זו הסיבה לשגיאה.

    במדיניות לדוגמה בנושא חילוץ משתנים, מוצגת למעלה, שימו לב שאין URI שתואם לרכיב <Namespace> עם הקידומת apigee; ולכן מקבלים את השגיאה:

    ExtractVariables EV-XML-Age: Non-empty prefix apigee cannot be mapped to empty uri.
    
    

רזולוציה

חשוב לוודא שלכל רכיבי <Namespace> שמוגדרים עם קידומת יש URI תואם במדיניות חילוץ משתנים. לדוגמה:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ExtractVariables async="false" continueOnError="false" enabled="true" name="EV-XML-Age">
    <DisplayName>EV-XML-Age</DisplayName>
    <Source clearPayload="false">request</Source>
    <XMLPayload stopPayloadProcessing="false">
    <Namespaces>
        <Namespace prefix="apigee">http://www.apigee.com</Namespace>
        <Namespace prefix="gmail">http://mail.google.com</Namespace>
     </Namespaces>
    <Variable name="legName" type="string">
        <XPath>/apigee:Directions/apigee:route/apigee:leg/apigee:name</Xpath>
    </Variable>
    </XMLPayload>
</ExtractVariables>

DuplicatePrefix

הודעת שגיאה

כשפורסים את שרת ה-proxy ל-API דרך ממשק המשתמש של Edge או Edge management API, מופיעה הודעת השגיאה הבאה:

Error Saving Revision [revision_number]
ExtractVariables [policy_name]: Duplicate prefix [prefix_name].

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

Error Saving Revision 2
ExtractVariables EV-XML-Age: Duplicate prefix apigee.

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

סיבה

השגיאה הזו מתקבלת אם למדיניות חילוץ משתנים מוגדרת אותה קידומת יותר מפעם אחת ברכיב <Namespace> ברכיב <XMLPayload>.

לדוגמה, השגיאה הזו מתרחשת מכיוון שהקידומת apigee מוגדרת פעמיים כפי שמוצג בהמשך:

<Namespace prefix="apigee">http://www.apigee.com</Namespace>
<Namespace prefix="apigee">http://www.apigee.com</Namespace>

אבחון

  1. מאתרים את המדיניות בנושא חילוץ משתנים שבה אירעה השגיאה, ואת שם הקידומת. שני הפריטים האלה מופיעים בהודעת השגיאה. לדוגמה, בשגיאה הבאה, שם המדיניות הוא EV-XML-Age והקידומת היא apigee:

    ExtractVariables EV-XML-Age: Duplicate prefix apigee.
    
  2. ב-XML של המדיניות בנושא חילוץ משתנים שנכשלו, מוודאים ששם הקידומת המוגדרת ברכיב <Namespace> ברכיב <XMLPayload> תואם לשם הקידומת שצוינה בהודעת השגיאה (שלב 1 למעלה). לדוגמה, המדיניות הבאה מציינת קידומת בשם apigee ברכיב <Namespace> , שתואמת למה שמופיע בהודעת השגיאה:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <ExtractVariables async="false" continueOnError="false" enabled="true" name="EV-XML-Age">
        <DisplayName>EV-XML-Age</DisplayName>
        <Source clearPayload="false">request</Source>
        <XMLPayload stopPayloadProcessing="false">
          <Namespaces>
              <Namespace prefix="gmail">http://mail.google.com</Namespace>
              <Namespace prefix="apigee">http://www.apigee.com</Namespace>
              <Namespace prefix="apigee">http://www.apigee.com</Namespace>
          </Namespaces>
          <Variable name="legName" type="string
              <XPath>/apigee:Directions/apigee:route/apigee:leg/apigee:name</XPath>
          </Variable>
        </XMLPayload>
      </ExtractVariables>
    
  3. בודקים אם הרכיב <Namespace> עם הקידומת הספציפית שזוהתה בשלב 2 הוגדר יותר מפעם אחת. אם הוא מוגדר יותר מפעם אחת, זו הסיבה לשגיאה.

    במדיניות לדוגמה בנושא חילוץ משתנים, מוצגת למעלה, שימו לב שהרכיב <Namespace> עם הקידומת apigee הוגדר פעמיים; ולכן מקבלים את השגיאה:

    ExtractVariables EV-XML-Age: Duplicate prefix apigee.
    
    

רזולוציה

חשוב לוודא שיש רק הגדרה אחת לכל קידומת ברכיבי <Namespace> במדיניות חילוץ משתנים. לדוגמה:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ExtractVariables async="false" continueOnError="false" enabled="true" name="EV-XML-Age">
    <DisplayName>EV-XML-Age</DisplayName>
    <Source clearPayload="false">request</Source>
    <XMLPayload stopPayloadProcessing="false">
      <Namespaces>
          <Namespace prefix="apigee">http://www.apigee.com</Namespace>
          <Namespace prefix="gmail">http://mail.google.com</Namespace>
      </Namespaces>
      <Variable name="legName" type="string">
          <XPath>/apigee:Directions/apigee:route/apigee:leg/apigee:name</Xpath>
      </Variable>
    </XMLPayload>
</ExtractVariables>

NoXPathsToEvaluate

הודעת שגיאה

כשפורסים את שרת ה-proxy ל-API דרך ממשק המשתמש של Edge או Edge management API, מופיעה הודעת השגיאה הבאה:

Error Saving Revision [revision_number]
ExtractVariables [policy_name]:no xpaths to evaluate in variable name.

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

Error Saving Revision 4
ExtractVariables Extract-Variables-1: no xpaths to evaluate in variable name.

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

סיבה

אם המדיניות בנושא חילוץ משתנים לא כוללת את הרכיב <XPath> בתוך הרכיב <XMLPayload>, הפריסה של שרת ה-proxy ל-API תיכשל ותוצג השגיאה שמוצגת למעלה.

אבחון

  1. מאתרים את המדיניות בנושא חילוץ משתנים שנכשלה מהודעת השגיאה. לדוגמה, בשגיאה הבאה, שם המדיניות הוא Extract-Variables-1:

    ExtractVariables Extract-Variables-1: no xpaths to evaluate in variable name.
    
  2. ב-XML של המדיניות בנושא חילוץ משתנים שנכשלו, בודקים אם יש רכיב <XMLPayload> ללא רכיב הצאצא <XPath>. אם כן, זו הסיבה לשגיאה.

    לדוגמה, הנה מדיניות חילוץ משתני חילוץ שמכילה רכיב <XMLPayload>:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <ExtractVariables async="false" continueOnError="false" enabled="true" name="Extract-Variables-1">
        <DisplayName>Extract Variables-1</DisplayName>
        <Properties/>
        <Source clearPayload="false">request</Source>
        <VariablePrefix>apigee</VariablePrefix>
        <XMLPayload stopPayloadProcessing="false">
            <Namespaces/>
            <Variable name="HostReachable" type="boolean">
            </Variable>
        </XMLPayload>
    </ExtractVariables>
    

    בגלל שאין רכיב <XPath>, הפריסה של שרת ה-proxy ל-API נכשלת.

רזולוציה

יש לוודא שמדיניות חילוץ משתנים כוללת רכיב <XPath> המוגדר ברכיב <XMLPayload>. לדוגמה:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ExtractVariables async="false" continueOnError="false" enabled="true" name="Extract-Variables-1">
    <DisplayName>Extract Variables-1</DisplayName>
    <Properties/>
    <Source clearPayload="false">request</Source>
    <VariablePrefix>apigee</VariablePrefix>
    <XMLPayload stopPayloadProcessing="false">
        <Namespaces/>
        <Variable name="HostReachable" type="boolean">
            <XPath>/isReachable</XPath>
        </Variable>
    </XMLPayload>
</ExtractVariables>

EmptyXPathExpression

הודעת שגיאה

כשפורסים את שרת ה-proxy ל-API דרך ממשק המשתמש של Edge או Edge management API, מופיעה הודעת השגיאה הבאה:

Error Saving Revision [revision_number]
ExtractVariables [policy_name]: XPath expression is empty in variable name.

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

Error Saving Revision 6
ExtractVariables Extract-Variables-1: XPath expression is empty in variable name.

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

סיבה

אם המדיניות לחילוץ משתנים כוללת ביטוי <XPath> ריק בתוך הרכיב <XMLPayload>, הפריסה של שרת ה-proxy ל-API תיכשל.

אבחון

  1. מאתרים את המדיניות בנושא חילוץ משתנים שנכשלה מהודעת השגיאה. לדוגמה, בשגיאה הבאה, שם המדיניות הוא Extract-Variables-1:

    ExtractVariables Extract-Variables-1: no xpaths to evaluate in variable name.
    
  2. ב-XML של מדיניות חילוץ משתנים שנכשלו, קובעים אם יש רכיב <XMLPayload> עם רכיב צאצא ריק מסוג <XPath>. אם כן, זו הסיבה לשגיאה.

    לדוגמה, הנה מדיניות חילוץ משתני חילוץ שמכילה רכיב <XMLPayload>:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <ExtractVariables async="false" continueOnError="false" enabled="true" name="Extract-Variables-1">
        <DisplayName>Extract Variables-1</DisplayName>
        <Properties/>
        <Source clearPayload="false">request</Source>
        <VariablePrefix>apigee</VariablePrefix>
        <XMLPayload stopPayloadProcessing="false">
            <Namespaces/>
            <Variable name="address" type="string">
                <XPath></XPath>
            </Variable>
        </XMLPayload>
    </ExtractVariables>
    

    יש רכיב <XPath> ריק ברכיב <XMLPayload>, ולכן הפריסה של שרת ה-proxy ל-API נכשלת.

רזולוציה

צריך לוודא שמדיניות חילוץ משתנים כוללת רכיב <XPath> חוקי ולא ריק שמוגדר ברכיב <XMLPayload>. לדוגמה:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ExtractVariables async="false" continueOnError="false" enabled="true" name="Extract-Variables-1">
    <DisplayName>Extract Variables-1</DisplayName>
    <Properties/>
    <Source clearPayload="false">request</Source>
    <VariablePrefix>apigee</VariablePrefix>
    <XMLPayload stopPayloadProcessing="false">
        <Namespaces/>
        <Variable name="address" type="string">
            <XPath>/address</XPath>
        </Variable>
    </XMLPayload>
</ExtractVariables>

NoJSONPathsToEvaluate

הודעת שגיאה

כשפורסים את שרת ה-proxy ל-API דרך ממשק המשתמש של Edge או Edge management API, מופיעה הודעת השגיאה הבאה:

Error Saving Revision [revision_number]
ExtractVariables [policy_name]:no jsonpaths to evaluate in variable name.

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

Error Saving Revision 6
ExtractVariables Extract-Variables-1: no jsonpaths to evaluate in variable name.

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

סיבה

אם המדיניות בנושא חילוץ משתנים לא כוללת את הרכיב <JSONPath> בתוך הרכיב <JSONPayload>, הפריסה של שרת ה-proxy ל-API תיכשל ותוצג השגיאה שמוצגת למעלה.

אבחון

  1. מאתרים את המדיניות בנושא חילוץ משתנים שנכשלה מהודעת השגיאה. לדוגמה, בשגיאה הבאה, שם המדיניות הוא Extract-Variables-1:

    ExtractVariables Extract-Variables-1: no jsonpaths to evaluate in variable name.
    
  2. ב-XML של המדיניות בנושא חילוץ משתנים שנכשלו, קובעים אם יש רכיב <JSONPayload> ללא רכיב הצאצא <JSONPath> הנדרש. אם כן, זו הסיבה לשגיאה.

    לדוגמה, זאת מדיניות חילוץ משתנים שמכילה רכיב <JSONPayload>:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <ExtractVariables async="false" continueOnError="false" enabled="true" name="Extract-Variables-1">
        <DisplayName>Extract Variables-1</DisplayName>
        <Properties/>
        <JSONPayload>
            <Variable name="title">
            </Variable>
        </JSONPayload>
        <Source clearPayload="false">request</Source>
        <VariablePrefix>apigee</VariablePrefix>
    </ExtractVariables>
    

    מאחר שאין רכיב צאצא <JSONPath> מוגדר ברכיב <JSONPayload>, הפריסה של שרת ה-proxy ל-API נכשלת.

רזולוציה

יש לוודא שמדיניות חילוץ משתנים כוללת רכיב <JSONPath> המוגדר ברכיב <JSONPayload>. לדוגמה:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ExtractVariables async="false" continueOnError="false" enabled="true" name="Extract-Variables-1">
    <DisplayName>Extract Variables-1</DisplayName>
    <Properties/>
    <JSONPayload>
        <Variable name="title">
            <JSONPath>$.book.title</JSONPath>
        </Variable>
    </JSONPayload>
    <Source clearPayload="false">request</Source>
    <VariablePrefix>apigee</VariablePrefix>
</ExtractVariables>

EmptyJSONPathExpression

הודעת שגיאה

כשפורסים את שרת ה-proxy ל-API דרך ממשק המשתמש של Edge או Edge management API, מופיעה הודעת השגיאה הבאה:

Error Saving Revision [revision_number]
ExtractVariables [policy_name]: JSONPath expression is empty in variable name.

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

Error Saving Revision 6
ExtractVariables Extract-Variables-1: JSONPath expression is empty in variable name.

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

סיבה

אם המדיניות לחילוץ משתנים כוללת ביטוי <JSONPath> ריק בתוך הרכיב <JSONPayload>, הפריסה של שרת ה-proxy ל-API תיכשל.

אבחון

  1. מאתרים את המדיניות בנושא חילוץ משתנים שנכשלה מהודעת השגיאה. לדוגמה, בשגיאה הבאה, שם המדיניות הוא Extract-Variables-1:

    ExtractVariables Extract-Variables-1: JSONPath expression is empty in variable name.
    
  2. ב-XML של המדיניות בנושא חילוץ משתנים שנכשלו, צריך לוודא שיש רכיב <JSONPayload> עם רכיב צאצא ריק מסוג <JSONPath>. אם כן, זו הסיבה לשגיאה.

    לדוגמה, זאת מדיניות חילוץ משתנים שמכילה רכיב <JSONPayload>:

        <ExtractVariables async="false" continueOnError="false" enabled="true" name="Extract-Variables-1">
            <DisplayName>Extract Variables-1</DisplayName>
            <Properties/>
            <JSONPayload>
                <Variable name="account_number" type="integer">
                    <JSONPath></JSONPath>
                </Variable>
            </JSONPayload>
            <Source clearPayload="false">request</Source>
            <VariablePrefix>apigee</VariablePrefix>
        </ExtractVariables>
    

    יש רכיב <JSONPath> ריק ברכיב <JSONPayload>, ולכן הפריסה של שרת ה-proxy ל-API נכשלת.

רזולוציה

צריך לוודא שמדיניות חילוץ משתנים כוללת רכיב <JSONPath> חוקי ולא ריק שמוגדר ברכיב <JSONPayload>. לדוגמה:

<ExtractVariables async="false" continueOnError="false" enabled="true" name="Extract-Variables-1">
    <DisplayName>Extract Variables-1</DisplayName>
    <Properties/>
    <JSONPayload>
        <Variable name="account_number" type="integer">
           <JSONPath>$.account.number</JSONPath>
        </Variable>
    </JSONPayload>
    <Source clearPayload="false">request</Source>
    <VariablePrefix>apigee</VariablePrefix>
</ExtractVariables>

MissingName

הודעת שגיאה

כשפורסים את שרת ה-proxy ל-API דרך ממשק המשתמש של Edge או Edge management API, מופיעה הודעת השגיאה הבאה:

Error Saving Revision [revision_number]
Error occurred while validation of bean [policy_name].xml Reason: - Required attribute name is missing in [element_name]

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

Error Saving Revision 6
Error occurred while validation of bean Extract-Variables-1.xml. Reason: - Required attribute name is missing in Variable

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

סיבה

אם המדיניות לחילוץ משתנים לא כוללת את המאפיין name באף אחד מרכיבי המדיניות, כמו QueryParam, Header, FormParam או Variable שבהם הוא נדרש, הפריסה של שרת ה-proxy של ה-API תיכשל.

לדוגמה, השגיאה הזו מתקבלת אם המאפיין name חסר ברכיב Variable.

אבחון

  1. מאתרים את שם המדיניות בנושא משתני חילוץ שבה אירעה השגיאה, ואת הרכיב שבו חסר המאפיין name. תוכלו למצוא את הפריטים האלה בהודעת השגיאה. לדוגמה, בשגיאה הבאה, שם המדיניות הוא Extract-Variables-1 ושם הרכיב הוא Variable:

    Error occurred while validation of bean Extract-Variables-1.xml. Reason: - Required attribute name is missing in Variable
    
  2. ב-XML של המדיניות בנושא חילוץ משתנים שנכשלו, צריך לוודא שלכל הרכיבים ששמם נקבע בשלב 1 שלמעלה יש מאפיין name. אם יש רכיב כלשהו שבו מאפיין השם חסר, זו הסיבה לשגיאה.

    לדוגמה, במדיניות הבאה של חילוץ משתנים מוגדר הרכיב <Variable>:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <ExtractVariables async="false" continueOnError="false" enabled="true" name="Extract-Variables-1">
        <DisplayName>Extract Variables-1</DisplayName>
        <Properties/>
        <Variable type="boolean">
            <Pattern>{isAccountActive}</Pattern>
        </Variable>
    </ExtractVariables>
    

    שימו לב שהמאפיין name חסר ברכיב Variable, לכן הפריסה של שרת ה-proxy ל-API נכשלה.

רזולוציה

צריך לוודא שהמדיניות בנושא חילוץ משתני כוללת את מאפיין החובה name, לרכיבים QueryParam, Header, FormParam או Variable. לדוגמה:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ExtractVariables async="false" continueOnError="false" enabled="true" name="Extract-Variables-1">
    <DisplayName>Extract Variables-1</DisplayName>
    <Properties/>
    <Variable name="account_active" type="boolean">
        <Pattern>{isAccountActive}</Pattern>
    </Variable>
</ExtractVariables>

PatternWithoutVariable

הודעת שגיאה

כשפורסים את שרת ה-proxy ל-API דרך ממשק המשתמש של Edge או Edge management API, מופיעה הודעת השגיאה הבאה:

Error Saving Revision [revision_number]
Pattern [pattern] should have at least one variable in ExtractVariables stepDefinition [policy_name]

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

Error Saving Revision 7
Pattern /a/b/ should have at least one variable in ExtractVariables stepDefinition ExtractVariables-1.

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

סיבה

אם במדיניות בנושא חילוץ משתנים לא צוין משתנה בתוך הרכיב <Pattern>, הפריסה של שרת ה-proxy ל-API תיכשל. הרכיב <Pattern> דורש את שם המשתנה שבו יאוחסנו הנתונים שחולצו.

אבחון

  1. מאתרים את השם של מדיניות חילוץ המשתנים שבה אירעה השגיאה ואת הדפוס שעבורו המשתנה חסר. תוכלו למצוא את הפריטים האלה בהודעת השגיאה. לדוגמה, בשגיאה הבאה, שם המדיניות הוא Extract-Variables-1 ושם הרכיב הוא /a/b:

    Pattern /a/b/ should have at least one variable in ExtractVariables stepDefinition ExtractVariables-1.
    
  2. ב-XML של מדיניות חילוץ משתנים שנכשלו, מוודאים שהדפוס שהוגדר ברכיב <Pattern> תואם לדפוס שזוהה בהודעת השגיאה (שלב 1 למעלה). לדוגמה, המדיניות הבאה מציינת דפוס /a/b, שתואם את מה שמופיע בהודעת השגיאה:

    לדוגמה, זאת מדיניות חילוץ משתנים שמכילה שלושה רכיבי <Pattern>:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <ExtractVariables name="ExtractVariables-1">
       <Source>request</Source>
       <URIPath>
          <Pattern ignoreCase="true">/a/{pathSeg}</Pattern>
          <Pattern ignoreCase="true">/a/b/</Pattern>
          <Pattern ignoreCase="true">/a/b/c/{pathSeg}</Pattern>
       </URIPath>
       <VariablePrefix>urirequest</VariablePrefix>
    </ExtractVariables>
    
  3. בודקים אם לרכיב <Pattern> שזוהה בשלב 2 אין משתנה. משתנים צריך להיות מוקף בסוגריים מסולסלים. אם לדפוס אין משתנה, אז שהוא הגורם לשגיאה.

    הרכיב <Pattern> שמכיל את הדפוס /a/b לא כולל משתנה; לכן, הפריסה של שרת ה-proxy ל-API נכשלת

    <Pattern ignoreCase="true">/a/b/</Pattern>
    
    

רזולוציה

חשוב לוודא שרכיבי <Pattern> כוללים משתנה (שם מתולתל) סוגריים מסולסלים). לדוגמה:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ExtractVariables name="ExtractVariables-1">
   <Source>request</Source>
   <URIPath>
      <Pattern ignoreCase="true">/a/{pathSeg}</Pattern>
      <Pattern ignoreCase="true">/a/b/{pathSeg}</Pattern>
      <Pattern ignoreCase="true">/a/b/c/{pathSeg}</Pattern>
   </URIPath>
   <VariablePrefix>urirequest</VariablePrefix>
</ExtractVariables>

CannotBeConvertedToNodeset

הודעת שגיאה

כשפורסים את שרת ה-proxy ל-API דרך ממשק המשתמש של Edge או Edge management API, מופיעה הודעת השגיאה הבאה:

Error Deploying Revision [revision_number]
ExtractVariables [policy_name]: Result of xpath [policy_name] cannot be converted to nodeset. Context Revision:[revision_number]; APIProxy:[proxy_name]; Organization:[org_name]; Environment:[env_name].

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

Error Deploying Revision 4 to test
ExtractVariables Extract-Variables-1: Result of xpath 123 cannot be converted to nodeset. Context Revision:4;APIProxy:EV-XML;Organization:aprabhashankar-eval;Environment:test.

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

סיבה

אם המדיניות לחילוץ משתנים כוללת ביטוי <XPath> שבו הסוג <Variable> מוגדר כ-nodeset, אך לא ניתן להמיר את הביטוי לקבוצת צמתים, הפריסה של שרת ה-proxy של ה-API תיכשל.

אבחון

  1. מאתרים את המדיניות בנושא חילוץ משתנים שבה אירעה השגיאה ואת ה-XPath שלא ניתן להמיר ל-Nodeset. שני הפריטים האלה מופיעים בהודעת השגיאה. לדוגמה, בשגיאה הבאה , שם המדיניות הוא Extract-Variables-1 וה-XPath הוא 123.

    ExtractVariables Extract-Variables-1: Result of xpath 123 cannot be converted to nodeset. Context Revision:4;APIProxy:EV-XML;Organization:aprabhashankar-eval;Environment:test.
    
  2. ב-XML של המדיניות בנושא חילוץ משתנים שנכשלו, צריך לוודא שה-XPath שהוגדר ברכיב <XPath> תואם ל-XPath שצוין בהודעת השגיאה (שלב 1 למעלה). לדוגמה, המדיניות הבאה מציינת את הערך כ-123, שתואם את תוכן הודעת השגיאה:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <ExtractVariables async="false" continueOnError="false" enabled="true" name="Extract-Variables-1">
        <DisplayName>Extract Variables-1</DisplayName>
        <Properties/>
        <Source clearPayload="false">request</Source>
        <VariablePrefix>visitor</VariablePrefix>
        <XMLPayload stopPayloadProcessing="false">
            <Namespaces/>
            <Variable name="age" type="nodeset">
                <XPath>123</XPath>
            </Variable>
        </XMLPayload>
    </ExtractVariables>
    
  3. צריך לבדוק את סוג הרכיב <Variable> שתואם ל-<XPath> שזוהה בשלב 2 למעלה. אם הסוג <Variable> הוא nodeset, זו הסיבה לשגיאה.

    שימו לב שהביטוי <XPath> הוא 123 במדיניות לדוגמה בנושא חילוץ משתנים.

    <XPath>123</XPath>
    

    לא ניתן להמיר את הביטוי 123 ל-Nodeset. כתוצאה מכך, הפריסה של שרת ה-proxy ל-API נכשלת.

רזולוציה

צריך לוודא שאפשר להמיר את הביטויים <XPath> שנעשה בהם שימוש במדיניות 'חילוץ משתנים' לצומת צמתים אם הסוג <Variable> מוגדר כ-Nodeset. לדוגמה:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ExtractVariables async="false" continueOnError="false" enabled="true" name="Extract-Variables-1">
    <DisplayName>Extract Variables-1</DisplayName>
    <Properties/>
    <Source clearPayload="false">request</Source>
    <VariablePrefix>visitor</VariablePrefix>
    <XMLPayload stopPayloadProcessing="false">
        <Namespaces/>
        <Variable name="age" type="nodeset">
            <XPath>/visitor/age</XPath>
        </Variable>
    </XMLPayload>
</ExtractVariables>

InvalidPattern

הודעת שגיאה

כשפורסים את שרת ה-proxy ל-API דרך ממשק המשתמש של Edge או Edge management API, מופיעה הודעת השגיאה הבאה:

Error Deploying Revision [revision_number]
Pattern [pattern] is invalid in ExtractVariables stepDefinition [policy_name]

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

Error Deploying Revision 18 to test
Pattern {*} is invalid in ExtractVariables stepDefinition ExtractVariables-2.

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

סיבה

אם הגדרת הרכיב <Pattern> לא חוקית באחד מהרכיבים כמו URIPath, QueryParam, Header, FormParam, XMLPayload או JSONPayload במדיניות בנושא משתני חילוץ, הפריסה של שרת ה-proxy של ה-API תיכשל.

אבחון

  1. מאתרים את מדיניות חילוץ משתני החילוץ הנכשלה מהודעת השגיאה. לדוגמה, בשגיאה הבאה, שם המדיניות הוא Extract-Variables-2:

    Pattern {*} is invalid in ExtractVariables stepDefinition ExtractVariables-2.
    
  2. ב-XML של המדיניות בנושא חילוץ משתנים שנכשלו, בודקים אם אחד מהאלמנטים האלה קיים וכולל רכיב <Pattern>.: URIPath, QueryParam, Header, FormParam, XMLPayload או JSONPayload.

    זאת דוגמה למדיניות של חילוץ משתנים עם רכיב <Pattern> בתוך הרכיב <QueryParam>:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <ExtractVariables name="ExtractVariables-2">
        <DisplayName>ExtractVariables-2</DisplayName>
        <Source>request</Source>
        <QueryParam name="code">
            <Pattern ignoreCase="true">{*}</Pattern>
        </QueryParam>
        <VariablePrefix>queryinfo</VariablePrefix>
    </ExtractVariables>
    
  3. צריך לבדוק את ההגדרה של כל אחד מהרכיבים <Pattern>. אם יש רכיב <Pattern> עם הגדרה לא תקינה, זו הסיבה לשגיאה.

    במדיניות לדוגמה בנושא חילוץ משתנים שמוצגת למעלה, שימו לב שההגדרה <Pattern> בתוך הרכיב <QueryParam> לא חוקית. לכן, הפריסה של שרת ה-proxy ל-API נכשלת. עוד באותו הקשר מידע על התאמה ויצירת משתנים

    <Pattern ignoreCase="true">{*}</Pattern>
    
    

רזולוציה

חשוב לוודא שהגדרת הרכיב <Pattern> ברכיבים URIPath, QueryParam, Header, FormParam, XMLPayload או JSONPayload במדיניות של חילוץ משתנים היא חוקית. לדוגמה:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ExtractVariables name="ExtractVariables-2">
    <DisplayName>Extract a value from a query parameter</DisplayName>
    <Source>request</Source>
    <QueryParam name="code">
        <Pattern ignoreCase="true">{code}</Pattern>
    </QueryParam>
    <VariablePrefix>queryinfo</VariablePrefix>
</ExtractVariables>

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

XPathCompilationFailed

הודעת שגיאה

נכשלה הפריסה של שרת ה-proxy ל-API דרך ממשק המשתמש של Edge או Edge Management API עם הודעת השגיאה הזו:

Error Deploying Revision [revision_number]
ExtractVariables [policy_name]: Failed to compile xpath [xpath] Context Revision:[revision_number]; APIProxy:[proxy_name]; Organization:[org_name]; Environment:[env_name].

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

Error Deploying Revision 1 to test
ExtractVariables EV-XML-Age: Failed to compile xpath /apigee:Directions/apigee:route/apigee:leg/apigee:name. Context Revision:1;APIProxy:EV-XML;Organization:aprabhashankar-eval;Environment:test.

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

סיבה

אם הקידומת או הערך שנעשה בהם שימוש ברכיב <XPath> אינם חלק ממרחבי השמות שהוצהרו במדיניות בנושא חילוץ משתנים, הפריסה של שרת ה-proxy ל-API תיכשל.

מידע נוסף על מרחבי שמות, XPath וקידומת זמין במאמר מרחבי שמות של XML והאופן שבו הם משפיעים על XPath ו-XX.

אבחון

  1. מאתרים את המדיניות בנושא חילוץ משתנים שבה אירעה השגיאה ואת ה-XPath שלא ניתן היה להדר. שני הפריטים האלה מופיעים בהודעת השגיאה. לדוגמה, בשגיאה הבאה , שם המדיניות הוא EV-XML-Age וה-xpath הוא /apigee:Directions/apigee:route/apigee:leg/apigee:name.

    ExtractVariables EV-XML-Age: Failed to compile xpath /apigee:Directions/apigee:route/apigee:leg/apigee:name. Context Revision:1;APIProxy:EV-XML;Organization:aprabhashankar-eval;Environment:test.
    
  2. ב-XML של המדיניות בנושא חילוץ משתנים שנכשלו, צריך לוודא שה-XPath שהוגדר ברכיב <XPath> תואם ל-XPath שצוין בהודעת השגיאה (שלב 1 למעלה). לדוגמה, המדיניות הבאה מציינת את הערך כ-/apigee:Directions/apigee:route/apigee:leg/apigee:name, שתואם את תוכן הודעת השגיאה:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <ExtractVariables async="false" continueOnError="false" enabled="true" name="EV-XML-Age">
      <DisplayName>EV-XML-Age</DisplayName>
      <Source clearPayload="false">request</Source>
      <XMLPayload stopPayloadProcessing="false">
        <Namespaces>
            <Namespace prefix="gmail">http://mail.google.com</Namespace>
        </Namespaces>
        <Variable name="legName" type="string">
        <XPath>/apigee:Directions/apigee:route/apigee:leg/apigee:name</XPath>
            </Variable>
      </XMLPayload>
    </ExtractVariables>
    
  3. צריך לבדוק את הרכיבים <Namespaces> ו-<XPath> במדיניות חילוץ משתנים. אם ה-<XPath> הספציפי שצוין בהודעת השגיאה משתמש בקידומת או בערך שאינם חלק ממרחבי השמות המוצהרים במדיניות חילוץ משתנים, זו הסיבה לשגיאה.

    חשוב לשים לב שהשדה <XPath> הספציפי משתמש בקידומת apigee במדיניות לדוגמה בנושא חילוץ משתנים.

    <XPath>/apigee:Directions/apigee:route/apigee:leg/apigee:name</XPath>
    

    עם זאת, התחילית apigee לא מוגדרת באף אחד מהרכיבי <Namespace>; לכן הידור של <XPath> נכשל שמוביל לכשל בפריסה.

רזולוציה

צריך לוודא שכל מרחבי השמות שנעשה בהם שימוש ברכיבי <XPath> מוצהרים במדיניות חילוץ משתנים. לדוגמה:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ExtractVariables async="false" continueOnError="false" enabled="true" name="EV-XML-Age">
  <DisplayName>EV-XML-Age</DisplayName>
  <Source clearPayload="false">request</Source>
  <XMLPayload stopPayloadProcessing="false">
    <Namespaces>
        <Namespace prefix="apigee">http://www.apigee.com</Namespace>
        <Namespace prefix="gmail">http://mail.google.com</Namespace>
    </Namespaces>
    <Variable name="legName" type="string">
        <XPath>/apigee:Directions/apigee:route/apigee:leg/apigee:name</XPath>
    </Variable>
  </XMLPayload>
</ExtractVariables>