פתרון בעיות שקשורות לשגיאות פריסה של המדיניות בנושא ביטויים רגולריים

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

InvalidRegularExpression

הודעת השגיאה

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

Error Deploying Revision revision_number to environment
RegularExpressionProtection policy_name: Invalid Regular Expression com.apigee.steps.regexprotection.RegularExpressionProtectionBean$RegexPattern@f4ecb23, Context Revision:revision_number;APIProxy:RegexThreat;Organization:organization;Environment:environment.

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

Error Deploying Revision 1 to test
RegularExpressionProtection Regular-Expression-Protection-1: Invalid Regular Expression com.apigee.steps.regexprotection.RegularExpressionProtectionBean$RegexPattern@f4ecb23, Context Revision:1;APIProxy:RegexThreat;Organization:myorg;Environment:test.

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

טקסט שגיאה מסוגregularExpression לא תקין

סיבה

אם הביטוי הרגולרי ברכיב <Pattern> של מדיניות regularExpressionProtection לא תקין, הפריסה של שרת ה-proxy ל-API תיכשל.

אבחון

  1. מאתרים את השם של מדיניות RegularExpressionProtection בהודעת השגיאה. לדוגמה, בשגיאה הבאה, השם של מדיניות RegularExpressionProtection הוא Regular-Expression-Protection-1:

    Error Deploying Revision 1 to test
    RegularExpressionProtection Regular-Expression-Protection-1: Invalid Regular Expression com.apigee.steps.regexprotection.RegularExpressionProtectionBean$RegexPattern@f4ecb23, Context Revision:1;APIProxy:RegexThreat;Organization:myorg;Environment:test.
    
  2. בודקים את כל הרכיבים של <Pattern> בקובץ ה-XML של מדיניות ההגנה באמצעות ביטוי רגולרי שנכשל. בודקים אם באחד מהאלמנטים <Pattern> יש ביטוי רגולרי לא חוקי. אם באחד מהרכיבים <Pattern> יש ביטוי רגולרי לא חוקי, זהו הגורם לשגיאה.

    לדוגמה, המדיניות הבאה מציינת את הערך של Pattern> של foo){2}, שנחשב לביטוי רגולרי לא חוקי:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
        <RegularExpressionProtection async="false" continueOnError="false" enabled="true" name="Regular-Expression-Protection-1">
            <DisplayName>Regular Expression Protection-1</DisplayName>
            <Properties/>
            <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
            <URIPath>
                <Pattern>foo){2}</Pattern>
            </URIPath>
            <Source>request</Source>
        </RegularExpressionProtection>
    

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

רזולוציה

יש לוודא שכל רכיב <Pattern> במדיניותregularExpressionProtection מכיל ביטוי רגולרי תקין. אתם יכולים לחפש כלים שונים לביטויים רגולריים (regex) באינטרנט או אופליין כדי לנפות באגים בביטויים הרגולריים. כדי לתקן את המדיניות לדוגמה בנושא הגנה באמצעות ביטוי רגולרי שמוצגת למעלה, מוסיפים את הסוגריים החסרים:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <RegularExpressionProtection async="false" continueOnError="false" enabled="true" name="Regular-Expression-Protection-1">
        <DisplayName>Regular Expression Protection-1</DisplayName>
        <Properties/>
        <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
        <URIPath>
            <Pattern>(foo){2}</Pattern>
        </URIPath>
        <Source>request</Source>
    </RegularExpressionProtection>

XPathCompilationFailed

הודעת השגיאה

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

Error Deploying Revision revision_number to environment
RegularExpressionProtection policy_name: Failed to compile xpath xpath_expression. Context Revision:revision_number;APIProxy:RegexThreat;Organization:organization;Environment:environment.

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

Error Deploying Revision 1 to test
RegularExpressionProtection Regular-Expression-Protection-1: Failed to compile xpath /notapigee:foo/notapigee:bar. Context Revision:1;APIProxy:RegexThreat;Organization:myorg;Environment:test.

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

טקסט השגיאה XPathCompilationFailed

סיבה

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

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

אבחון

  1. מזהים את השם של מדיניות RegularExpressionProtection שבה התרחשה השגיאה ואת ביטוי ה-XPath שנעשה בו שימוש. שני הפריטים האלה מופיעים בהודעת השגיאה.

    לדוגמה, בשגיאה הבאה , שם המדיניות הוא Regular-Expression-Protection-1 וביטוי ה-XPath הוא /notapigee:foo/notapigee:bar:

    Error Deploying Revision 1 to test
    RegularExpressionProtection Regular-Expression-Protection-1: Failed to compile xpath /notapigee:foo/notapigee:bar. Context Revision:1;APIProxy:RegexThreat;Organization:myorg;Environment:test.
    
  2. בקובץ ה-XML של מדיניות ההגנה באמצעות ביטוי רגולרי שנכשל, מוודאים שה-XPath שמוגדר ברכיב Expression תואם ל-XPath שצוין בהודעת השגיאה (שלב 1 למעלה).

    לדוגמה, המדיניות הבאה מציינת את XPath בתור /notapigee:foo/notapigee:bar, שמתאים למה שמופיע בהודעת השגיאה:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <RegularExpressionProtection async="false" continueOnError="false" enabled="true" name="Regular-Expression-Protection-1">
        <DisplayName>Regular Expression Protection-1</DisplayName>
        <Properties/>
        <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
        <Source>request</Source>
         <XMLPayload>
             <Namespaces>
                 <Namespace prefix="apigee">http://www.apigee.com</Namespace>
             </Namespaces>
             <XPath>
                 <Expression>/notapigee:foo/notapigee:bar</Expression>
                 <Type>nodeset</Type>
                 <Pattern>pattern</Pattern>
                 <Pattern>pattern2</Pattern>
             </XPath>
         </XMLPayload>
    </RegularExpressionProtection>
    
  3. בודקים את הרכיבים <Namespaces> ו-<Expression> במדיניות בנושא RegularExpressionProtection. אם ה-<Expression> הספציפי שצוין בהודעת השגיאה משתמש בקידומת או בערך שאינם חלק ממרחבי השמות המוצהרים במדיניות regularExpressionProtection, זו הסיבה לשגיאה.

    שימו לב שבמדיניות RegularExpressionProtection לדוגמה, ה-<XPath> הספציפי משתמש בקידומת notapigee:

    <Expression>/notapigee:foo/notapigee:bar</Expression>

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

רזולוציה

צריך לוודא שכל מרחבי השמות שנמצאים בשימוש ברכיבי <Expression> ברכיבי <XPath> מוצהרים ב-regularExpressionProtection. כדי לתקן את הדוגמה שלמעלה, אפשר להחליף את הקידומת notapigee ל-apigee, המוצהרת במרחבי שמות:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<RegularExpressionProtection async="false" continueOnError="false" enabled="true" name="Regular-Expression-Protection-1">
    <DisplayName>Regular Expression Protection-1</DisplayName>
    <Properties/>
    <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
    <Source>request</Source>
     <XMLPayload>
         <Namespaces>
             <Namespace prefix="apigee">http://www.apigee.com</Namespace>
         </Namespaces>
         <XPath>
             <Expression>/apigee:foo/apigee:bar</Expression>
             <Type>nodeset</Type>
             <Pattern>pattern</Pattern>
             <Pattern>pattern2</Pattern>
         </XPath>
     </XMLPayload>
</RegularExpressionProtection>

CannotBeConvertedToNodeset

הודעת השגיאה

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

Error Deploying Revision revision_number to environment
RegularExpressionProtection policy_name: Result of xpath xpath_expression cannot be converted to nodeset. Context Revision:revision_number;APIProxy:RegexThreat;Organization:organization;Environment:environment.

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

Error Deploying Revision 1 to test
RegularExpressionProtection Regular-Expression-Protection-1: Result of xpath count(//apigee:foo) cannot be converted to nodeset. Context Revision:1;APIProxy:RegexThreat;Organization:myorg;Environment:test.

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

טקסט השגיאה InConversionToNodeset

סיבה

אם במדיניות הביטויים הרגולריים יש ביטוי <XPath> שבו הרכיב <Type> מוגדר כ-nodeset, אבל אי אפשר להמיר את הביטוי ל-nodeset, הפריסה של שרת ה-API proxy נכשלת.

אבחון

  1. מאתרים את המדיניות RegularExpressionProtection שבה אירעה השגיאה ואת ביטוי ה-XPath שאי אפשר להמיר לקבוצת צמתים. שני הפריטים האלה מופיעים בהודעת השגיאה.

    לדוגמה, בשגיאה הבאה , שם המדיניות הוא Regular-Expression-Protection-1 וביטוי ה-XPath הוא count(//apigee:foo):

    Error Deploying Revision 1 to test
    RegularExpressionProtection Regular-Expression-Protection-1: Result of xpath count(//apigee:foo) cannot be converted to nodeset. Context Revision:1;APIProxy:RegexThreat;Organization:myorg;Environment:test.
    
  2. ב-XML של המדיניות בנושא 'הגנה על ביטויים רגולריים' שנכשל, מוודאים שה-XPath שהוגדר ברכיב <Expression> של הרכיב <XPath> תואם ל-XPath שצוין בהודעת השגיאה (שלב 1 למעלה).

    לדוגמה, המדיניות הבאה מציינת את count(//apigee:foo), שמתאים למה שמופיע בהודעת השגיאה:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
        <RegularExpressionProtection async="false" continueOnError="false" enabled="true" name="Regular-Expression-Protection-1">
            <DisplayName>Regular Expression Protection-1</DisplayName>
            <Properties/>
            <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
            <Source>request</Source>
             <XMLPayload>
                 <Namespaces>
                     <Namespace prefix="apigee">http://www.apigee.com</Namespace>
                 </Namespaces>
                 <XPath>
                     <Expression>count(//apigee:foo)</Expression>
                     <Type>nodeset</Type>
                     <Pattern>pattern</Pattern>
                     <Pattern>pattern2</Pattern>
                 </XPath>
             </XMLPayload>
        </RegularExpressionProtection>
    
  3. בודקים את הערך שהוגדר ברכיב <Type> מתחת לרכיב <XPath>. אם הרכיב <Type> הוא nodeset, זה הגורם לשגיאה.

    בדוגמה הזו, ביטוי ה-XPath הוא count()‎, שלא מחזיר צומת אחד או יותר. כתוצאה מכך, הפריסה של ה-Proxy ל-API נכשלת.

רזולוציה

אם הרכיב <Type> מוגדר כ-nodeset, צריך לוודא שהתוצאה של הרכיב <Expression> שמוגדר ב-<XPath> היא צומת אחד או יותר. לחלופין, אפשר לשנות את הרכיב <Type> לערך מתאים יותר בהתאם לתרחיש לדוגמה.

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

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<RegularExpressionProtection async="false" continueOnError="false" enabled="true" name="Regular-Expression-Protection-1">
    <DisplayName>Regular Expression Protection-1</DisplayName>
    <Properties/>
    <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
    <Source>request</Source>
     <XMLPayload>
         <Namespaces>
             <Namespace prefix="apigee">http://www.apigee.com</Namespace>
         </Namespaces>
         <XPath>
             <Expression>/apigee:foo/apigee:bar</Expression>
             <Type>nodeset</Type>
             <Pattern>pattern</Pattern>
             <Pattern>pattern2</Pattern>
         </XPath>
     </XMLPayload>
</RegularExpressionProtection>

JSONPathCompilationFailed

הודעת השגיאה

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

Error Deploying Revision revision_number to environment
RegularExpressionProtection policy_name: Failed to compile jsonpath jsonpath_expression Context Revision:revision_number;APIProxy:RegexThreat;Organization:organization;Environment:environment.

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

Error Deploying Revision 1 to test
RegularExpressionProtection Regular-Expression-Protection-1: Failed to compile jsonpath $.store.book[*.author. Context Revision:1;APIProxy:RegexThreat;Organization:myorg;Environment:test.

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

טקסט השגיאה JSONPathCompilationFailed

סיבה

אם הרכיב <Expression> שמתחת לרכיב <JSONPath> במדיניות של הגנה באמצעות ביטוי רגולרי מוגדר לביטוי JSONPath לא תקין, הפריסה של שרת ה-API העקיף נכשלת.

אבחון

  1. מזהים את השם של מדיניותregularExpressionProtection שבה אירעה השגיאה ונעשה שימוש ב-JSONPath Expression הלא חוקי. שני הפריטים האלה מופיעים בהודעת השגיאה.

    לדוגמה, בשגיאה הבאה , שם המדיניות הוא Regular-Expression-Protection-1 והביטוי של JSONPath הוא $.store.book[*.author:

    Error Deploying Revision 1 to test
    RegularExpressionProtection Regular-Expression-Protection-1: Failed to compile jsonpath $.store.book[*.author. Context Revision:1;APIProxy:RegexThreat;Organization:myorg;Environment:test.
    
  2. בקובץ ה-XML של מדיניות ההגנה באמצעות ביטוי רגולרי שנכשל, מוודאים שה-JSONPath שמוגדר ברכיב Expression תואם ל-JSONPath שצוין בהודעת השגיאה (שלב 1 למעלה).

    לדוגמה, המדיניות הבאה מציינת את הרכיב Expression ברכיב <JSONPath> בתור $.store.book[*.author, בהתאם למה שמופיע בהודעת השגיאה:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
        <RegularExpressionProtection async="false" continueOnError="false" enabled="true" name="Regular-Expression-Protection-1">
            <DisplayName>Regular Expression Protection-1</DisplayName>
            <Properties/>
            <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
            <Source>request</Source>
            <JSONPayload>
                 <JSONPath>
                     <Expression>$.store.book[*.author</Expression>
                     <Pattern>REGEX PATTERN</Pattern>
                     <Pattern>REGEX PATTERN</Pattern>
                 </JSONPath>
                </JSONPayload>
        </RegularExpressionProtection>
    
  3. צריך לבדוק רכיב <Expression> מתחת לרכיב <JSONPath> במדיניות. אם הוא לא תואם לתחביר של JSONPath, זו הסיבה לשגיאה. בדוגמה שלמעלה, סוגרת המרובעת הסגורה חסרה, ולכן הביטוי לא תקין.

    הביטוי של נתיב ה-JSON לא תקין, ולכן הפריסה של שרת ה-proxy ל-API נכשלת.

רזולוציה

מוודאים שהערך של הרכיב <Expression> בתוך הרכיב <JSONPath> במדיניות של הגנה באמצעות ביטוי רגולרי הוא ביטוי JSONPath תקין.

כדי לתקן את הדוגמה שמוצגת למעלה, אפשר להוסיף את סוגריים המרובעים הסגורים החסרים לערך הרכיב <Expression>:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<RegularExpressionProtection async="false" continueOnError="false" enabled="true" name="Regular-Expression-Protection-1">
    <DisplayName>Regular Expression Protection-1</DisplayName>
    <Properties/>
    <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
    <Source>request</Source>
    <JSONPayload>
         <JSONPath>
             <Expression>$.store.book[*].author</Expression>
             <Pattern>REGEX PATTERN</Pattern>
             <Pattern>REGEX PATTERN</Pattern>
         </JSONPath>
        </JSONPayload>
</RegularExpressionProtection>

NothingToEnforce

הודעת השגיאה

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

Error Saving Revision revision_number
RegularExpressionProtection policy_name: at least one of URIPath, QueryParam, Header, FormParam, XMLPayload, JSONPayload is mandatory.

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

Error Saving Revision 1
RegularExpressionProtection Regular-Expression-Protection-1: at least one of URIPath, QueryParam, Header, FormParam, XMLPayload, JSONPayload is mandatory.

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

טקסט השגיאה NothingToEnforce

סיבה

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

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

אבחון

  1. בודקים מהו השם של מדיניות RegularExpressionProtection שבה התרחשה השגיאה. הוא מופיע בהודעת השגיאה. לדוגמה, בשגיאה הבאה שם המדיניות הוא Regular-Expression-Protection-1:

    RegularExpressionProtection Regular-Expression-Protection-1: at least one of URIPath, QueryParam, Header, FormParam, XMLPayload, JSONPayload is mandatory.
    
  2. בודקים את המדיניות של הגנה באמצעות ביטוי רגולרי שנכשלה (שזוהתה בשלב 1 למעלה). אם המדיניות לא מכילה אפילו אחד מהרכיבים הבאים: <URIPath>,‏ <QueryParam>,‏ <Header>,‏ <FormParam>,‏ <XMLPayload> או <JSONPayload>, זו הסיבה לשגיאה.

    לדוגמה, מדיניות ההגנה באמצעות ביטוי רגולרי הבאה לא כוללת אף אחד מהאלמנטים שצוינו למעלה:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
        <RegularExpressionProtection async="false" continueOnError="false" enabled="true" name="Regular-Expression-Protection-1">
            <DisplayName>Regular Expression Protection-1</DisplayName>
            <Properties/>
            <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
            <Source>request</Source>
        </RegularExpressionProtection>
    

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

רזולוציה

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

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<RegularExpressionProtection async="false" continueOnError="false" enabled="true" name="Regular-Expression-Protection-1">
    <DisplayName>Regular Expression Protection-1</DisplayName>
    <Properties/>
    <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
    <Source>request</Source>
    <JSONPayload>
        <JSONPath>
            <Expression>$.store.book[*].author</Expression>
            <Pattern>REGEX PATTERN</Pattern>
            <Pattern>REGEX PATTERN</Pattern>
        </JSONPath>
    </JSONPayload>
</RegularExpressionProtection>

NoPatternsToEnforce

הודעת השגיאה

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

Error Saving Revision revision_number
RegularExpressionProtection policy_name: No patterns to enforce in payload_name.

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

Error Saving Revision 1
RegularExpressionProtection Regular-Expression-Protection-1: No patterns to enforce in XPath.

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

טקסט השגיאה NoPatternsToEnforce

סיבה

אם לאחד מהרכיבים ברמה העליונה (<URIPath>,‏ <QueryParam>,‏ <Header>,‏ <FormParam>,‏ <XMLPayload> או <JSONPayload>) אין רכיב <Pattern> שמוגדר במדיניות RegularExpressionProtection, הפריסה של שרת ה-API העקיף נכשלת.

אבחון

  1. מאתרים את השם של מדיניות RegularExpressionProtection שבה התרחשה השגיאה ואת רכיב הצאצא שאין בו את האלמנט <Pattern>. שני הפריטים האלה מופיעים בהודעת השגיאה.

    לדוגמה, בשגיאה הבאה, שם המדיניות הוא Regular-Expression-Protection-1 והרכיב הצאצא הוא XPath:

    RegularExpressionProtection Regular-Expression-Protection-1: No patterns to enforce in XPath.
    
  2. בודקים את המדיניות של הגנה באמצעות ביטוי רגולרי שנכשלה, ומוודאים שלרכיב הצאצא שזוהה בשלב 1 אין את הרכיב <Pattern>. אם הרכיב <Pattern> לא קיים בו, זה הגורם לשגיאה.

    לדוגמה, במדיניות הבאה אין רכיב <Pattern> בתוך <XPath>:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
        <RegularExpressionProtection async="false" continueOnError="false" enabled="true" name="Regular-Expression-Protection-1">
          <DisplayName>Regular Expression Protection-1</DisplayName>
          <Properties/>
          <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
          <Source>request</Source>
          <XMLPayload>
            <Namespaces>
              <Namespace prefix="apigee">http://www.apigee.com</Namespace>
            </Namespaces>
            <XPath>
              <Expression>/apigee:Greeting/apigee:User</Expression>
              <Type>string</Type>
            </XPath>
          </XMLPayload>
        </RegularExpressionProtection>
    

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

רזולוציה

חשוב לוודא שלכל אחד מהרכיבים <URIPath>,‏ <QueryParam>,‏ <Header>,‏ <FormParam>,‏ <XMLPayload> או <JSONPayload> צוין לפחות <Pattern> אחד. מידע על אופן ציון הרכיב בצורה נכונה זמין במדיניות בנושא RegularExpressionProtection.

כדי לתקן את הדוגמה שלמעלה, אפשר פשוט להוסיף את הרכיב <Pattern> לרכיב <XPath> מתחת ל-<XMLPayload>:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<RegularExpressionProtection async="false" continueOnError="false" enabled="true" name="Regular-Expression-Protection-1">
  <DisplayName>Regular Expression Protection-1</DisplayName>
  <Properties/>
  <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
  <Source>request</Source>
  <XMLPayload>
    <Namespaces>
      <Namespace prefix="apigee">http://www.apigee.com</Namespace>
    </Namespaces>
    <XPath>
      <Expression>/apigee:Greeting/apigee:User</Expression>
      <Type>string</Type>
      <Pattern>REGEX PATTERN</Pattern>
    </XPath>
  </XMLPayload>
</RegularExpressionProtection>

NONEmptyPrefixMappedToEmptyURI

הודעת השגיאה

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

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

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

Error Saving Revision 1
RegularExpressionProtection Regular-Expression-Protection-1: Non-empty prefix apigee cannot be mapped to empty uri.

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

טקסט השגיאה NONEmptyPrefixMappedToEmptyURI

סיבה

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

אבחון

  1. מאתרים את המדיניות של RegularExpressionProtection שבה התרחשה השגיאה ואת שם הקידומת שלא ממופה ל-URI. שני הפריטים האלה מופיעים בהודעת השגיאה.

    לדוגמה, בשגיאה הבאה, שם המדיניות הוא Regular Expression Protection-1 והתחילית היא apigee:

    RegularExpressionProtection Regular-Expression-Protection-1: 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"?>
        <RegularExpressionProtection async="false" continueOnError="false" enabled="true" name="Regular-Expression-Protection-1">
          <DisplayName>Regular Expression Protection-1</DisplayName>
          <Properties/>
          <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
          <Source>request</Source>
          <XMLPayload>
            <Namespaces>
              <Namespace prefix="apigee"/>
              <Namespace prefix="gmail">http://mail.google.com</Namespace>
            </Namespaces>
            <XPath>
              <Expression>/apigee:Greeting/apigee:User</Expression>
              <Type>string</Type>
              <Pattern>REGEX PATTERN</Pattern>
            </XPath>
          </XMLPayload>
        </RegularExpressionProtection>
    
  3. בודקים אם לרכיב <Namespace> עם הקידומת הספציפית שזוהתה בשלב 2 יש URI תקין. אם כתובת ה-URI חסרה, זו הסיבה לשגיאה.

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

    Non-empty prefix apigee cannot be mapped to empty uri.

רזולוציה

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

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<RegularExpressionProtection async="false" continueOnError="false" enabled="true" name="Regular-Expression-Protection-1">
  <DisplayName>Regular Expression Protection-1</DisplayName>
  <Properties/>
  <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
  <Source>request</Source>
  <XMLPayload>
    <Namespaces>
      <Namespace prefix="apigee">http://www.apigee.com</Namespace>
      <Namespace prefix="gmail">http://mail.google.com</Namespace>
    </Namespaces>
    <XPath>
      <Expression>/apigee:Greeting/apigee:User</Expression>
      <Type>string</Type>
      <Pattern>REGEX PATTERN</Pattern>
    </XPath>
  </XMLPayload>
</RegularExpressionProtection>

DuplicatePrefix

הודעת השגיאה

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

Error Saving Revision revision_number
RegularExpressionProtection policy_name: Duplicate prefix prefix_name.

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

Error Saving Revision 1
RegularExpressionProtection Regular-Expression-Protection-1: Duplicate prefix apigee.

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

טקסט השגיאה DuplicatePrefix

סיבה

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

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

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

אבחון

  1. מאתרים את מדיניות RegularExpressionProtection שבה התרחשה השגיאה ואת שם הקידומת. שני הפריטים האלה מופיעים בהודעת השגיאה.

    לדוגמה, בשגיאה הבאה, שם המדיניות הוא Regular Expression Protection-1 והתחילית היא apigee:

    RegularExpressionProtection Regular-Expression-Protection-1: Duplicate prefix apigee.
    
  2. ב-XML של המדיניות בנושא 'הגנה על ביטויים רגולריים' שנכשל, מוודאים ששם הקידומת שמוגדרת ברכיב <Namespace> ברכיב <XMLPayload> תואם לשם הקידומת שצוינה בהודעת השגיאה (שלב 1 למעלה).

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

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
        <RegularExpressionProtection async="false" continueOnError="false" enabled="true" name="Regular-Expression-Protection-1">
          <DisplayName>Regular Expression Protection-1</DisplayName>
          <Properties/>
          <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
          <Source>request</Source>
          <XMLPayload>
            <Namespaces>
              <Namespace prefix="apigee">http://www.apigee.com</Namespace>
              <Namespace prefix="apigee">http://www.apigee.com</Namespace>
            </Namespaces>
            <XPath>
              <Expression>/apigee:Greeting/apigee:User</Expression>
              <Type>string</Type>
              <Pattern>REGEX PATTERN</Pattern>
            </XPath>
          </XMLPayload>
        </RegularExpressionProtection>
    
  3. בודקים אם הרכיב <Namespace> עם הקידומת הספציפית שזוהתה בשלב 2 הוגדר יותר מפעם אחת. אם הוא מוגדר יותר מפעם אחת, זו הסיבה לשגיאה.

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

    Duplicate prefix apigee.
    

רזולוציה

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

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <RegularExpressionProtection async="false" continueOnError="false" enabled="true" name="Regular-Expression-Protection-1">
      <DisplayName>Regular Expression Protection-1</DisplayName>
      <Properties/>
      <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
      <Source>request</Source>
      <XMLPayload>
        <Namespaces>
          <Namespace prefix="apigee">http://www.apigee.com</Namespace>
        </Namespaces>
        <XPath>
          <Expression>/apigee:Greeting/apigee:User</Expression>
          <Type>string</Type>
          <Pattern>REGEX PATTERN</Pattern>
        </XPath>
      </XMLPayload>
    </RegularExpressionProtection>

EmptyXPathExpression

הודעת השגיאה

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

Error Saving Revision revision_number
RegularExpressionProtection policy_name: Empty XPath expression.

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

Error Saving Revision 1
RegularExpressionProtection Regular-Expression-Protection-1: Empty XPath expression.

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

טקסט השגיאה EmptyXPathExpression

סיבה

אם במדיניות RegularExpressionProtection לא מוגדר רכיב <Expression> בתוך הרכיב <XPath>, הפריסה של שרת ה-API העקיף נכשלת.

אבחון

  1. מזהים את מדיניות ההגנה באמצעות ביטוי רגולרי שנכשלה בהודעת השגיאה. לדוגמה, בשגיאה הבאה שם המדיניות הוא Regular-Expression-Protection-1:

    RegularExpressionProtection Regular-Expression-Protection-1: Empty XPath expression.
    
  2. ב-XML של המדיניות בנושא הגנה על ביטויים רגולריים שנכשלו, יש לקבוע אם יש רכיב <XMLPayload> עם רכיב צאצא <XPath> שלא מוגדר בו רכיב <Expression>, או אם הרכיב <Expression> לא מוגדר לערך כלשהו. אם כן, זו הסיבה לשגיאה.

    לדוגמה, הנה מדיניות הגנה על ביטוי רגולרי עם רכיב <XMLPayload>:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <RegularExpressionProtection async="false" continueOnError="false" enabled="true" name="Regular-Expression-Protection-1">
      <DisplayName>Regular Expression Protection-1</DisplayName>
      <Properties/>
      <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
      <Source>request</Source>
      <XMLPayload>
        <Namespaces>
          <Namespace prefix="apigee">http://www.apigee.com</Namespace>
        </Namespaces>
        <XPath>
          <Expression></Expression>
          <Type>string</Type>
          <Pattern>REGEX PATTERN</Pattern>
        </XPath>
      </XMLPayload>
    </RegularExpressionProtection>
    

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

רזולוציה

יש לוודא ש-regularExpressionProtection כולל רכיב <Expression> לא ריק וחוקי שמוגדר ברכיב <XPath>. לדוגמה:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<RegularExpressionProtection async="false" continueOnError="false" enabled="true" name="Regular-Expression-Protection-1">
  <DisplayName>Regular Expression Protection-1</DisplayName>
  <Properties/>
  <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
  <Source>request</Source>
  <XMLPayload>
    <Namespaces>
      <Namespace prefix="apigee">http://www.apigee.com</Namespace>
    </Namespaces>
    <XPath>
      <Expression>/apigee:Greeting/apigee:User</Expression>
      <Type>string</Type>
      <Pattern>REGEX PATTERN</Pattern>
    </XPath>
  </XMLPayload>
</RegularExpressionProtection>

EmptyJSONPathExpression

הודעת השגיאה

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

Error Saving Revision revision_number
RegularExpressionProtection policy_name: Empty JSONPath expression.

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

Error Saving Revision 1
RegularExpressionProtection Regular-Expression-Protection-1: Empty JSONPath expression.

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

טקסט השגיאה EmptyJSONPathExpression

סיבה

אם למדיניותregularExpressionProtection לא מוגדר רכיב <Expression> בתוך הרכיב <JSONPath>, הפריסה של שרת ה-proxy ל-API תיכשל.

אבחון

  1. מזהים את מדיניות ההגנה באמצעות ביטוי רגולרי שנכשלה בהודעת השגיאה. לדוגמה, בשגיאה הבאה, שם המדיניות הוא regular-Expression-Protection-1:

    Error Saving Revision 1
    RegularExpressionProtection Regular-Expression-Protection-1: Empty JSONPath expression.
    
  2. בקובץ ה-XML של המדיניות שנכשלה להגנה באמצעות ביטוי רגולרי, קובעים אם יש אלמנט <JSONPayload> עם אלמנט צאצא <JSONPath> שאין בו הגדרה של אלמנט <Expression>, או שהאלמנט <Expression> לא מוגדר לערך כלשהו. אם כן, זו הסיבה לשגיאה.

    לדוגמה, זוהי מדיניות בנושא 'הגנה על ביטוי רגולרי' שמכילה רכיב <JSONPayload>:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
        <RegularExpressionProtection async="false" continueOnError="false" enabled="true" name="Regular-Expression-Protection-1">
          <DisplayName>Regular Expression Protection-1</DisplayName>
          <Properties/>
          <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
          <Source>request</Source>
          <JSONPayload>
            <JSONPath>
              <Expression></Expression>
              <Pattern>REGEX PATTERN</Pattern>
              <Pattern>REGEX PATTERN</Pattern>
            </JSONPath>
          </JSONPayload>
        </RegularExpressionProtection>
    

    מכיוון שיש אלמנט <Expression> ריק בתוך האלמנט <JSONPath>, הפריסה של שרת ה-API proxy נכשלת.

רזולוציה

מוודאים שלמדיניות RegularExpressionProtection יש רכיב <Expression> תקין ולא ריק שמוגדר מתחת לרכיב <JSONPath>. לדוגמה:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<RegularExpressionProtection async="false" continueOnError="false" enabled="true" name="Regular-Expression-Protection-1">
  <DisplayName>Regular Expression Protection-1</DisplayName>
  <Properties/>
  <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
  <Source>request</Source>
  <JSONPayload>
    <JSONPath>
      <Expression>$.store.book[*].author</Expression>
      <Pattern>REGEX PATTERN</Pattern>
      <Pattern>REGEX PATTERN</Pattern>
    </JSONPath>
  </JSONPayload>
</RegularExpressionProtection>