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

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

InvalidResourceType

הודעת השגיאה

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

Error Deploying Revision revision_number to environment
MessageValidation soap_message_validation_policy: Invalid Resource Type resource_type. It should be xsd or wsdl. Context Revision:revision_number;APIProxy:apiproxy_name;Organization:organization;Environment:environment.

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

Error Deploying Revision 1 to test
MessageValidation SOAP-Message-Validation-1: Invalid Resource Type py.
It should be xsd or wsdl. Context Revision:1;APIProxy:soapmessagevalidation;
Organization:gsc-hipaa;Environment:test.

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

סיבה

השגיאה הזו מתרחשת אם האלמנט <ResourceURL> במדיניות SOAPMessageValidation מוגדר לסוג משאב שאינו נתמך במדיניות. סוגי המשאבים הנתמכים הם xsd ו-wsdl.

אבחון

  1. מזהים את שם המדיניות SOAPMessageValidation ואת סוג המשאב הלא חוקי שנעשה בו שימוש ברכיב <ResourceURL> של המדיניות. שני הפריטים האלה מופיעים בהודעת השגיאה. לדוגמה, בשגיאה הבאה שם המדיניות SOAPMessageValidation הוא SOAP-Message-Validation-1 וסוג המשאב הוא py.

    Error Deploying Revision 1 to test
    MessageValidation SOAP-Message-Validation-1: Invalid Resource Type py. It should
    be xsd or wsdl. Context Revision:1;APIProxy:soapmessagevalidation;Organization:gsc-
    hipaa;Environment:test.
    
  2. בודקים את קובץ ה-XML של מדיניות SOAPMessageValidation שנכשלה. אם סוג המשאב שצוין לרכיב <ResourceURL> תואם לסוג המשאב הלא חוקי שזוהה בשלב 1 שלמעלה, זהו הגורם לשגיאה.

    לדוגמה, במדיניות הבאה מצוין סוג המשאב כ-py, בהתאם למה שמופיע בהודעת השגיאה:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <MessageValidation async="false" continueOnError="false" enabled="true"
        name="SOAP-Message-Validation-1">
        <DisplayName>SOAP Message Validation-1</DisplayName>
        <Properties/>
        <Element namespace="http://sample.com"> sampleObject</Element>
        <SOAPMessage/>
        <Source>request</Source>
        <ResourceURL>py://Script-1.py</ResourceURL>
    </MessageValidation>
    

    מכיוון שסוג המשאב ב-<ResourceURL> הוא לא xsd או wsdl, הפריסה תיכשל עם השגיאה שמוצגת למעלה.

רזולוציה

מוודאים שסוג המשאב שצוין ברכיב <ResourceURL> של מדיניות SOAPMessageValidation מוגדר כ-xsd או כ-wsdl, ושקובץ המשאב נעשה בו שימוש בפורמט הנכון.

כדי לתקן את המדיניות לדוגמה בנושא SOAPMessageValidation שמוצגת למעלה, אפשר לשנות את סוג המשאב ל-xsd או ל-wsdl:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<MessageValidation async="false" continueOnError="false" enabled="true"
name="SOAP-Message-Validation-1">
    <DisplayName>SOAP Message Validation-1</DisplayName>
    <Properties/>
    <Element namespace="http://sample.com"> sampleObject</Element>
    <SOAPMessage/>
    <Source>request</Source>
<ResourceURL>wsdl://SOAP-Message-Validation-1.wsdl</ResourceURL>
</MessageValidation>

ResourceCompileFailed

הודעת השגיאה

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

Error Deploying Revision revision_number to environment
MessageValidation soap_message_validation_policy: Failed to compile resource resource. Context Revision:revision_number;APIProxy:apiproxy_name;Organization:organization;Environment:environment.

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

Error Deploying Revision 1 to test
MessageValidation SOAP-Message-Validation-1: Failed to compile resource SOAP-Message-Validation-1.wsdl. Context Revision:1;APIProxy:soapmessagevalidation;Organization:gsc-hipaa;Environment:test.

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

סיבה

השגיאה הזו מתרחשת אם סקריפט המשאב שמופיע ברכיב <ResourceURL> של מדיניות SOAPMessageValidation מכיל שגיאה שמונעת את הידור הסקריפט במהלך הפריסה.

אבחון

  1. מזהים את שם המדיניות SOAPMessageValidation ואת סקריפט המשאבים שנעשה בו שימוש במדיניות. שני הפריטים האלה מופיעים בהודעת השגיאה. לדוגמה, בשגיאה הבאה שם המדיניות SOAPMessageValidation הוא SOAP-Message-Validation-1 והסקריפט של המשאב הוא SOAP-Message-Validation-1.wsdl.

    Error Deploying Revision 1 to test
    MessageValidation SOAP-Message-Validation-1: Failed to compile resource
    SOAP-Message-Validation-1.wsdl. Context
    Revision:1;APIProxy:soapmessagevalidation;Organization:gsc-hipaa;
    Environment:test.
    
  2. בודקים את קובץ ה-XML של מדיניות SOAPMessageValidation שנכשלה, ומוודאים שסקריפט המשאב שצוין לרכיב <ResourceURL> תואם למה שמופיע בהודעת השגיאה.

    לדוגמה, המדיניות הבאה מציינת את הרכיב <ResourceURL> בתור SOAP-Message-Validation-1.wsdl, שתואם לתוכן שמופיע בהודעת השגיאה:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <MessageValidation async="false" continueOnError="false" enabled="true"
    name="SOAP-Message-Validation-1">
        <DisplayName>SOAP Message Validation-1</DisplayName>
        <Properties/>
        <Element namespace="http://sample.com"> sampleObject</Element>
        <SOAPMessage/>
        <Source>request</Source>
        <ResourceURL>wsdl://SOAP-Message-Validation-1.wsdl</ResourceURL>
    </MessageValidation>
    
  3. בודקים את קובץ הסקריפט של המשאב שצוין בשלב 1 כדי לראות אם יש בו בעיות פוטנציאליות שעלולות לגרום לשגיאות בהדרכה.

    דוגמה לקובץ סקריפט של משאב:

    <?xml version="1.0" encoding="ISO-8859-1"?>
    <wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsd/">
        <wsdl:types>
            <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
                <xs:element name="request" type="xs:string"/>
            </xs:schema>
        </wsdl:types>
    </wsdl:definitions>
    

    מכיוון ש-xmlns:wsdl מפנה לכתובת URL לא חוקית, הפריסה תיכשל עם השגיאה שמוצגת למעלה.

רזולוציה

מוודאים שבסקריפט המשאב שצוין באלמנט <ResourceURL> של המדיניות SOAPMessageValidation אין בעיות שמונעות את הידור הסקריפט.

כדי לתקן את הסקריפט SOAP-Message-Validation-1.wsdl שמוצג למעלה, אפשר לשנות את xmlns:wsdl כך שיצביע לכתובת URL תקינה:

<?xml version="1.0" encoding="ISO-8859-1"?>
<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
    <wsdl:types>
        <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
            <xs:element name="request" type="xs:string"/>
        </xs:schema>
    </wsdl:types>
</wsdl:definitions>

RootElementNameUnspecified

הודעת השגיאה

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

Error Saving Revision revision_number
MessageValidation soap_message_validation_policy:
RootElement name is not specified.

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

Error Saving Revision 2
MessageValidation SOAP-Message-Validation-1: RootElement name is not specified.

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

סיבה

השגיאה הזו מתקבלת אם הרכיב <Element> במדיניות SOAPMessageValidation לא מכיל את השם של רכיב הבסיס.

אבחון

  1. מזהים את שם המדיניות SOAPMessageValidation שבו אירעה השגיאה. לדוגמה, בשגיאה הבאה, שם המדיניות SOAPMessageValidation הוא SOAP-Message-Validation-1:

    Error Saving Revision 2
    MessageValidation SOAP-Message-Validation-1: RootElement name is not specified.
    
  2. בודקים את קובץ ה-XML של מדיניות SOAPMessageValidation שנכשלה. אם השם של רכיב הבסיס המשמש לאימות לא מצוין ברכיב <Element>, זו הסיבה לשגיאה.

    לדוגמה, במדיניות הבאה לא צוין שם רכיב הבסיס:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <MessageValidation async="false" continueOnError="false" enabled="true"
    name="SOAP-Message-Validation-1">
        <DisplayName>SOAP Message Validation-1</DisplayName>
        <Properties/>
        <Element namespace="http://schemas.xmlsoap.org/soap/prices"/>
        <SOAPMessage/>
        <Source>request</Source>
        <ResourceURL>xsd://Script-1.xsd</ResourceURL>
    </MessageValidation>
    

    מאחר שלא צוין שם של רכיב הבסיס, הפריסה תיכשל ותוצג השגיאה שמוצגת למעלה.

רזולוציה

מוודאים שרכיב <Element> במדיניות SOAPMessageValidation מכיל את רכיב הבסיס הנכון.

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

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<MessageValidation async="false" continueOnError="false" enabled="true"
name="SOAP-Message-Validation-1">
    <DisplayName>SOAP Message Validation-1</DisplayName>
    <Properties/>
    <Element namespace="http://schemas.xmlsoap.org/soap/prices">GetPriceResponse</Element>
    <SOAPMessage/>
    <Source>request</Source>
    <ResourceURL>xsd://Script-1.xsd</ResourceURL>
</MessageValidation>

InvalidRootElementName

הודעת השגיאה

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

Error Saving Revision revision_number
MessageValidation soap_message_validation_policy: RootElement name root_element_name is invalid.

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

Error Saving Revision 2
MessageValidation SOAP-Message-Validation-1: RootElement name 1GetPriceResponse
is invalid.

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

סיבה

השגיאה הזו מתרחשת אם רכיב <Element> במדיניות SOAPMessageValidation מכיל שם של רכיב בסיס שלא עומד בכללי XML למתן שמות לרכיבים תקינים.

אבחון

  1. מזהים את שם המדיניות SOAPMessageValidation שבה התרחשה השגיאה. לדוגמה, בשגיאה הבאה, שם המדיניות SOAPMessageValidation הוא SOAP-Message-Validation-1:

    Error Saving Revision 2
    MessageValidation SOAP-Message-Validation-1: RootElement name 1GetPriceResponse
    is invalid.
    
  2. בודקים את קובץ ה-XML של מדיניות SOAPMessageValidation שנכשלה. אם שם רכיב הבסיס שצוין באלמנט <Element> לא תואם לקריטריונים של שם אלמנט XML תקין, זו הסיבה לשגיאה.

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

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <MessageValidation async="false" continueOnError="false" enabled="true"
    name="SOAP-Message-Validation-1">
        <DisplayName>SOAP Message Validation-1</DisplayName>
        <Properties/>
         <Element namespace="http://schemas.xmlsoap.org/soap/prices">1GetPriceResponse</Element>
        <SOAPMessage/>
        <Source>request</Source>
        <ResourceURL>xsd://Script-1.xsd</ResourceURL>
    </MessageValidation>
    

רזולוציה

מוודאים שהרכיב <Element> של המדיניות SOAPMessageValidation מכיל שם תקין של רכיב בסיס.

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

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<MessageValidation async="false" continueOnError="false" enabled="true" name="SOAP-Message-Validation-1">
    <DisplayName>SOAP Message Validation-1</DisplayName>
    <Properties/>
    <Element namespace="http://schemas.xmlsoap.org/soap/prices">GetPriceResponse</Element>
    <SOAPMessage/>
    <Source>request</Source>
    <ResourceURL>xsd://Script-1.xsd</ResourceURL>
</MessageValidation>

NoElements

הודעת השגיאה

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

Error Deploying Revision revision_number
Resource "resource_url" has no element definitions.

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

Error Deploying Revision 2 to test
Resource "xsd://Script-1.xsd" has no element definitions.

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

סיבה

השגיאה הזו מתרחשת אם קובץ המשאב שצוין ברכיב <Resource> של המדיניות SOAPMessageValidation לא מכיל רכיבים שאפשר להשתמש בהם לאימות.

אבחון

  1. מאתרים את קובץ המשאב שבו חסרות הגדרות הרכיבים בהודעת השגיאה. לדוגמה, בשגיאה הבאה, קובץ המשאב שבו נעשה שימוש ב-xsd://Script-1.xsd הוא:

    Error Deploying Revision 2 to test
    Resource "xsd://Script-1.xsd" has no element definitions.
    
  2. בודקים את קובץ המשאב שזוהה בשלב 1. אם לא מוגדרים אלמנטים, זו הסיבה לשגיאה.

    לדוגמה, קובץ המשאבים Script-1.xsd לא מכיל רכיבים:

    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    </xsd:schema>
    

    מכיוון שקובץ המשאב לא מכיל רכיבים, הפריסה תיכשל ותוצג השגיאה שמוצגת למעלה.

רזולוציה

ודאו שקובץ המשאבים שנעשה בו שימוש במדיניות SOAPMessageValidation מכיל את הגדרות הרכיבים הרלוונטיות.

כדי לתקן את קובץ המשאב לדוגמה שמוצג למעלה, אפשר לשנות את הקובץ xsd ולהוסיף את התוכן הבא:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="shipOrder" type="order"/>
<xsd:complexType name="order">
<xsd:sequence>
<xsd:element name="shipTo" type="shipAddress"/>
<xsd:element name="items" type="cdItems"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="shipAddress">
<xsd:sequence>
<xsd:element name="name" type="xsd:string"/>
<xsd:element name="street" type="xsd:string"/>
<xsd:element name="address" type="xsd:string"/>
<xsd:element name="country" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="cdItems">
<xsd:sequence>
<xsd:element name="item" type="cdItem" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="cdItem">
<xsd:sequence>
<xsd:element name="title" type="xsd:string"/>
<xsd:element name="quantity" type="xsd:integer"/>
<xsd:element name="price" type="xsd:decimal"/>
</xsd:sequence>
</xsd:complexType>
</xsd:schema>