אתם צופים במסמכי העזרה של Apigee Edge.
כניסה למסמכי העזרה של Apigee X. info
SourceUnavailable
קוד שגיאה
steps.json2xml.SourceUnavailable
גוף התשובה לשגיאה
{ "fault": { "faultstring": "JSONToXML[policy_name]: Source [source_variable] is not available", "detail": { "errorcode": "steps.json2xml.SourceUnavailable" } } }
שגיאה לדוגמה
{
"fault": {
"faultstring": "JSONToXML[Convert-JSONToXML]: Source response is not available",
"detail": {
"errorcode": "steps.json2xml.SourceUnavailable"
}
}
}
סיבה
השגיאה הזו מתרחשת אם המשתנה message שצוין ברכיב <Source>
של המדיניות להמרת JSON ל-XML הוא:
- לא בהיקף (לא זמין בתהליך הספציפי שבו המדיניות מופעלת) או
- לא ניתן לפתור (לא מוגדר)
לדוגמה, השגיאה הזו מתרחשת אם המדיניות של המרת JSON ל-XML אמורה להתבצע בתהליך הבקשה, אבל הרכיב <Source>
מוגדר למשתנה response
, שלא קיים בתהליך הבקשה.
אבחון
מאתרים את המדיניות של המרת JSON ל-XML שבה אירעה השגיאה ואת שם המשתנה שאינו זמין. אפשר למצוא את שני הפריטים האלה ברכיב
faultstring
של תגובת השגיאה. לדוגמה, בfaultstring
הבא, שם המדיניות הואConvert-JSONToXML
והמשתנה הואresponse
:"faultstring": "JSONToXML[Convert-JSONToXML]: Source response is not available"
בקובץ ה-XML של המדיניות להמרת JSON ל-XML שנכשלה, מוודאים ששם המשתנה שהוגדר באלמנט
<Source>
תואם לשם המשתנה שזוהה במחרוזת השגיאה (שלב 1 למעלה). לדוגמה, המדיניות הבאה של המרת JSON ל-XML מציינת משתנה בשםresponse
ברכיב<Source>
, שמתאים למה שמופיע ב-faultstring
:<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <JSONToXML async="false" continueOnError="false" enabled="true" name="Convert-JSONToXML"> <DisplayName>Convert-JSONToXML</DisplayName> <Properties/> <Options> <NullValue>NULL</NullValue> <NamespaceBlockName>#namespaces</NamespaceBlockName> <DefaultNamespaceNodeName>$default</DefaultNamespaceNodeName> <NamespaceSeparator>:</NamespaceSeparator> <TextNodeName>#text</TextNodeName> <AttributeBlockName>#attrs</AttributeBlockName> <AttributePrefix>@</AttributePrefix> <InvalidCharsReplacement>_</InvalidCharsReplacement> <ObjectRootElementName>Root</ObjectRootElementName> <ArrayRootElementName>Array</ArrayRootElementName> <ArrayItemElementName>Item</ArrayItemElementName> </Options> <OutputVariable>request</OutputVariable> <Source>response</Source> </JSONToXML>
קובעים אם המשתנה שמשמש ברכיב
<Source>
מוגדר וזמין בתהליך שבו המדיניות של המרת JSON ל-XML מתבצעת.אם המשתנה הוא:
- מחוץ להיקף (לא זמין בתהליך הספציפי שבו המדיניות מתבצעת) או
- לא ניתן לפתור (לא מוגדר)
זאת הסיבה לשגיאה.
לדוגמה, נניח שמדיניות JSON ל-XML שמוצגת למעלה אמורה להתבצע בתהליך הבקשה. חשוב לזכור שהמשתנה
response
משמש ברכיב<Source>
של המדיניות להמרת JSON ל-XML. משתנה התגובה זמין רק בתהליך התגובה.מאחר שהמשתנה
response
לא קיים בתהליך הבקשה, מופיע קוד השגיאה:steps.json2xml.SourceUnavailable
רזולוציה
מוודאים שהמשתנה שהוגדר ברכיב <Source>
של המדיניות שנכשלה להמרת JSON ל-XML מוגדר וקיים בתהליך שבו המדיניות מופעלת.
כדי לתקן את מדיניות ההמרה לדוגמה מ-JSON ל-XML שמוצגת למעלה, אפשר לשנות את האלמנט <Source>
כך שישתמש במשתנה request
, כי הוא קיים בתהליך הבקשה:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<JSONToXML async="false" continueOnError="false" enabled="true" name="Convert-JSONToXML">
<DisplayName>Convert-JSONToXML</DisplayName>
<Properties/>
<Options>
<NullValue>NULL</NullValue>
<NamespaceBlockName>#namespaces</NamespaceBlockName>
<DefaultNamespaceNodeName>$default</DefaultNamespaceNodeName>
<NamespaceSeparator>:</NamespaceSeparator>
<TextNodeName>#text</TextNodeName>
<AttributeBlockName>#attrs</AttributeBlockName>
<AttributePrefix>@</AttributePrefix>
<InvalidCharsReplacement>_</InvalidCharsReplacement>
<ObjectRootElementName>Root</ObjectRootElementName>
<ArrayRootElementName>Array</ArrayRootElementName>
<ArrayItemElementName>Item</ArrayItemElementName>
</Options>
<OutputVariable>request</OutputVariable>
<Source>request</Source>
</JSONToXML>
ExecutionFailed
קוד שגיאה
steps.json2xml.ExecutionFailed
גוף התגובה לשגיאה
{ "fault": { "faultstring": "JSONToXML[policy_name]: Execution failed due to reason: Expecting { or [ at line 1", "detail": { "errorcode": "steps.json2xml.ExecutionFailed" } } }
גורמים אפשריים
הסיבות האפשריות לשגיאה הזו:
הסיבה | תיאור |
חסר עומס נתונים להזנה | המטען הייעודי (JSON) של הקלט ריק. |
קלט לא חוקי או עם מבנה שגוי | הקלט (JSON) שהוענק למדיניות של המרת JSON ל-XML לא תקין או שהוא בפורמט שגוי. |
סיבה: חסר מטען ייעודי (payload) בקלט
במדיניות ההמרה מ-JSON ל-XML, אם התוכן (המטען הייעודי) של המשתנה שצוין ברכיב <Source>
ריק, מתרחשת השגיאה הזו.
לדוגמה, אם הרכיב <Source>
במדיניות JSON ל-XML מוגדר כמשתנה request
או response
, והוא אמור להכיל מטען ייעודי (payload) של JSON, אבל אם המטען הייעודי (Payload) ריק, השגיאה מתרחשת.
אבחון
מאתרים את המדיניות של המרת JSON ל-XML שבה השגיאה התרחשה. המידע הזה מופיע ברכיב
faultstring
של תגובת השגיאה. לדוגמה, ב-faultstring
הבא, שם המדיניות הואConvert-JSONToXML
:"faultstring": "JSONToXML[Convert-JSONToXML]: Execution failed due to reason: Expecting { or [ at line 1"
צריך לבדוק את הרכיב
<Source>
ב-XML של מדיניות JSON ל-XML שנכשל ולקבוע את המשתנה שצוין. לדוגמה, במדיניות הבאה של המרת JSON ל-XML, האלמנט<Source>
מוגדר כ-request
:<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <JSONToXML async="false" continueOnError="false" enabled="true" name="Convert-JSONToXML"> <DisplayName>Convert-JSONToXML</DisplayName> <Properties/> <Options> <NullValue>NULL</NullValue> <NamespaceBlockName>#namespaces</NamespaceBlockName> <DefaultNamespaceNodeName>$default</DefaultNamespaceNodeName> <NamespaceSeparator>:</NamespaceSeparator> <TextNodeName>#text</TextNodeName> <AttributeBlockName>#attrs</AttributeBlockName> <AttributePrefix>@</AttributePrefix> <InvalidCharsReplacement>_</InvalidCharsReplacement> <ObjectRootElementName>Root</ObjectRootElementName> <ArrayRootElementName>Array</ArrayRootElementName> <ArrayItemElementName>Item</ArrayItemElementName> </Options> <OutputVariable>request</OutputVariable> <Source>request</Source> </JSONToXML>
בודקים אם המשתנה שצוין לרכיב
<Source>
במדיניות ריק. אם הוא ריק, זו הסיבה לשגיאה.בדוגמה של מדיניות ההמרה מ-JSON ל-XML שמוצגת למעלה, מטען הנתונים הייעודי (payload) של הבקשה (כלומר גוף הבקשה) שנשלח על ידי הלקוח ריק.
לדוגמה:
curl -v "http://<org>-<env>.apigee.net/v1/testjsontoxml" -H "Content-Type: application/json"
מכיוון שמטען הייעודי (payload) של תגובת ה-JSON ריק, מופיע קוד השגיאה:
steps.json2xml.ExecutionFailed
השגיאה הזו יכולה להתרחש גם אם האלמנט
<Source>
מוגדר בתור response, אבל השרת לקצה העורפי מעביר עומס שימושי ריק.
רזולוציה
צריך לוודא שהקלט שמועבר למדיניות JSON ל-XML ברכיב <Source>
הוא מטען ייעודי (payload) תקין של JSON ולא ריק.
כדי לפתור את הבעיה במדיניות לדוגמה של המרת JSON ל-XML, צריך להעביר מטען ייעודי (payload) חוקי של JSON. לדוגמה:
יוצרים קובץ בשם
city.json
עם התוכן הבא:{ "Name":"Apigee", "City":"Bengaluru", "Pincode":"560016" }
מריצים את קריאת ה-API באמצעות פקודת cURL באופן הבא:
curl -v "http://<org>-<env>.apigee.net/v1/testxmltojson" -H "Content-Type: application/json" -X POST -d @company.json
סיבה: קלט לא תקין או קלט בפורמט שגוי
אם המדיניות מ-JSON ל-XML מנתחת קלט לא חוקי או לא תקין, תתקבל השגיאה הזו.
לדוגמה, אם קובץ ה-JSON הלא חוקי הבא מסופק כקלט במדיניות JSON ל-XML,
[
"args": ["name" : "Google" ]
]
תופיע השגיאה הבאה:
"faultstring": "JSONToXML[Convert-JSONToXML]: Execution failed due to reason: Expecting { or [ at line 1"
אבחון
צריך לזהות את המדיניות מ-JSON ל-XML שבה אירעה השגיאה. המידע הזה מופיע באלמנט
faultstring
בתשובה לשגיאה. לדוגמה, ב-faultstring
הבא, שם המדיניות הואConvert-JSONToXML
:"faultstring": "JSONToXML[Convert-JSONToXML]: Execution failed due to reason: Expecting { or [ at line 1"
בודקים את הרכיב
<Source>
שצוין בקובץ ה-XML של המדיניות להמרת JSON ל-XML שנכשל. לדוגמה, במדיניות הקוד הבאה של המרת JSON ל-XML, האלמנט<Source>
מוגדר למשתנהrequest
:<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <JSONToXML async="false" continueOnError="false" enabled="true" name="Convert-JSONToXML"> <DisplayName>Convert-JSONToXML</DisplayName> <Properties/> <Options> <NullValue>NULL</NullValue> <NamespaceBlockName>#namespaces</NamespaceBlockName> <DefaultNamespaceNodeName>$default</DefaultNamespaceNodeName> <NamespaceSeparator>:</NamespaceSeparator> <TextNodeName>#text</TextNodeName> <AttributeBlockName>#attrs</AttributeBlockName> <AttributePrefix>@</AttributePrefix> <InvalidCharsReplacement>_</InvalidCharsReplacement> <ObjectRootElementName>Root</ObjectRootElementName> <ArrayRootElementName>Array</ArrayRootElementName> <ArrayItemElementName>Item</ArrayItemElementName> </Options> <OutputVariable>request</OutputVariable> <Source>request</Source> </JSONToXML>
צריך לבדוק אם הקלט שצוין ברכיב
<Source>
הוא מטען ייעודי (payload) חוקי של JSON. אם הקלט לא תקין או שהפורמט שלו שגוי, זו הסיבה לשגיאה.נניח שה-JSON הלא תקין הבא הועבר למדיניות
[ "args": ["name" : "Google" ] ]
זוהי קריאת ה-API לדוגמה שמראה איך הבקשה הועברה:
curl -v "http://<org>-<env>.apigee.net/v1/testjsontoxml" -H "Content-Type: application/json" -X POST -d '[ "args" : ["name" : "Google" ]]'
מטען הייעודי (payload) של ה-JSON שהתקבל בבקשה לא תקין כי אובייקט ה-JSON מתחיל ומסתיים בסוגריים מרובעים ([ ]). לכן, מוצג קוד השגיאה:
steps.json2xml.ExecutionFailed
השגיאה הזו יכולה להתרחש גם אם רכיב
<Source>
הוגדר לתגובה, אבל עומס העבודה בתגובת ה-JSON לא תקין או לא בפורמט תקין.
רזולוציה
מוודאים שהקלט שמוענק למדיניות של המרת JSON ל-XML ברכיב <Source>
תקין ולא פגום.
כדי לפתור את הבעיה במדיניות לדוגמה של המרת JSON ל-XML שצוינה למעלה, מעבירים בקשה תקינה של מטען ייעודי (payload) של JSON באופן הבא:
{
"args" : {
"name" : "Google"
}
}
OutputVariableIsNotAvailable
קוד שגיאה
steps.json2xml.OutputVariableIsNotAvailable
גוף התשובה לשגיאה
{ "fault": { "faultstring": "JSONToXML[policy_name]: Output variable is not available.", "detail": { "errorcode": "steps.json2xml.OutputVariableIsNotAvailable" } } }
שגיאה לדוגמה
{
"fault": {
"faultstring": "JSONToXML[Check-JSONToXML]: Output variable is not available.",
"detail": {
"errorcode": "steps.json2xml.OutputVariableIsNotAvailable"
}
}
}
סיבה
השגיאה הזו מתרחשת אם המשתנה שצוין ברכיב <Source>
של המדיניות להמרת JSON ל-XML הוא מסוג מחרוזת והרכיב <OutputVariable>
לא מוגדר. הרכיב <OutputVariable>
הוא חובה כשהמשתנה שמוגדר ברכיב <Source>
הוא מסוג מחרוזת.
אבחון
מאתרים את המדיניות של המרת JSON ל-XML שבה השגיאה התרחשה. אפשר למצוא אותו ברכיב
faultstring
בתשובה לשגיאה. לדוגמה, ב-faultstring
הבא, שם המדיניות הואCheck-JSONToXML
:"faultstring": "JSONToXML[Check-JSONToXML]: Output variable is not available."
במדיניות של JSON ל-XML שנכשלה, צריך לבדוק אם השדה
<OutputVariable>
חסר.במדיניות לדוגמה הבאה של JSONToXML חסר רכיב
<OutputVariable>
:<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <JSONToXML async="false" continueOnError="false" enabled="true" name="JSONToXML"> <DisplayName>Check-JSONToXML</DisplayName> <Properties/> <Options> <NullValue>NULL</NullValue> <NamespaceBlockName>#namespaces</NamespaceBlockName> <DefaultNamespaceNodeName>$default</DefaultNamespaceNodeName> <NamespaceSeparator>:</NamespaceSeparator> <TextNodeName>#text</TextNodeName> <AttributeBlockName>#attrs</AttributeBlockName> <AttributePrefix>@</AttributePrefix> <InvalidCharsReplacement>_</InvalidCharsReplacement> <ObjectRootElementName>Root</ObjectRootElementName> <ArrayRootElementName>Array</ArrayRootElementName> <ArrayItemElementName>Item</ArrayItemElementName> </Options> <Source>PostalCode</Source> </JSONToXML>
קובעים את סוג המשתנה שצוין ברכיב
<Source>
:- מאתרים את הקוד ב-API Proxy שבו המשתנה הוגדר לראשונה.
- אחרי שמוצאים את המדיניות שבה המשתנה מוגדר ומאוכלס קודם, צריך לקבוע את סוג המשתנה באופן הבא:
- בודקים את הערך של מאפיין הסוג (אם קיים).
- אם מאפיין הסוג לא קיים, המשתנה נחשב למחרוזת.
- אם הסוג של המשתנה הוא מחרוזת, זהו הגורם לשגיאה. מידע על משתנים נפוצים ועל הסוגים שלהם זמין במאמר העזרה בנושא משתנים.
לדוגמה, אפשר להסתכל על המשתנה
PostalCode
במדיניות שלמעלה להמרת JSON ל-XML.לדוגמה, נניח שמדיניות Assign Message משמשת להקצאת ערך למשתנה שנקרא
PostalCode
, כפי שמוצג בהמשך:<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <AssignMessage async="false" continueOnError="false" enabled="true" name="Assign_PostalCode"> <DisplayName>Assign_PostalCode</DisplayName> <Properties/> <AssignVariable> <Name>PostalCode</Name> <Value>{"value":"56008"}</Value> <Ref/> </AssignVariable> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
הערה: סוג המשתנה שמוגדר ב-
<AssignVariable>
הוא מחרוזת. לכן המשתנהPostalCode
הוא מסוג string.עכשיו, חשוב לזכור שהמשתנה
PostalCode
משמש ברכיב<Source>
של המדיניות JSONToXML:<Source>PostalCode</Source>
מכיוון ש-
PostalCode
הוא מסוג מחרוזת והרכיב<OutputVariable>
חסר, מופיע קוד השגיאה:steps.json2xml.OutputVariableIsNotAvailable
רזולוציה
אם המשתנה שצוין ברכיב <Source>
של המדיניות JSONToXML הוא מסוג מחרוזת, צריך לוודא שהרכיב <OutputVariable>
מוגדר במדיניות.
כדי לתקן את המדיניות של JSONToXML שצוינה למעלה, צריך לכלול את הרכיב <OutputVariable>
כפי שמוצג בהמשך.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<JSONToXML async="false" continueOnError="false" enabled="true" name="JSONToXML">
<DisplayName>Check-JSONToXML</DisplayName>
<Properties/>
<Options>
<NullValue>NULL</NullValue>
<NamespaceBlockName>#namespaces</NamespaceBlockName>
<DefaultNamespaceNodeName>$default</DefaultNamespaceNodeName>
<NamespaceSeparator>:</NamespaceSeparator>
<TextNodeName>#text</TextNodeName>
<AttributeBlockName>#attrs</AttributeBlockName>
<AttributePrefix>@</AttributePrefix>
<InvalidCharsReplacement>_</InvalidCharsReplacement>
<ObjectRootElementName>Root</ObjectRootElementName>
<ArrayRootElementName>Array</ArrayRootElementName>
<ArrayItemElementName>Item</ArrayItemElementName>
</Options>
<OutputVariable>response</OutputVariable>
<Source>PostalCode</Source>
</JSONToXML>
InCompatibleTypes
קוד שגיאה
steps.json2xml.InCompatibleTypes
גוף התשובה לשגיאה
{ "fault": { "faultstring": "JSONToXML[policy_name]: String can not be assigned to message type.", "detail": { "errorcode": "steps.json2xml.InCompatibleTypes" } } }
שגיאה לדוגמה
{
"fault": {
"faultstring": "JSONToXML[JSONToXML_checktype]: String can not be assigned to message type.",
"detail": {
"errorcode": "steps.json2xml.InCompatibleTypes"
}
}
}
סיבה
השגיאה הזו מתרחשת אם הסוג של המשתנה שמוגדר ברכיב <Source>
שונה מהסוג של המשתנה שמוגדר ברכיב <OutputVariable>
. חובה שהסוג של המשתנים שמופיעים ברכיב <Source>
וברכיב <OutputVariable>
יהיה זהה.
הסוגים החוקיים הם message
ו-string
.
אבחון
מאתרים את המדיניות של המרת JSON ל-XML שבה השגיאה התרחשה. אפשר למצוא אותו ברכיב
faultstring
בתשובה לשגיאה. לדוגמה, ב-faultstring
הבא, שם המדיניות הואJSONToXML_checktype
:"faultstring": "JSONToXML[JSONToXML_checktype]: String can not be assigned to message type."
במדיניות הקוד של JSON ל-XML שנכשלה, שימו לב לערכים שצוינו ב-
<OutputVariable>
וב-<Source>
.הנה דוגמה למדיניות:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <JSONToXML async="false" continueOnError="false" enabled="true" name="JSONToXML_checktype"> <DisplayName>JSONToXML_checktype</DisplayName> <Properties/> <Options> <NullValue>NULL</NullValue> <NamespaceBlockName>#namespaces</NamespaceBlockName> <DefaultNamespaceNodeName>$default</DefaultNamespaceNodeName> <NamespaceSeparator>:</NamespaceSeparator> <TextNodeName>#text</TextNodeName> <AttributeBlockName>#attrs</AttributeBlockName> <AttributePrefix>@</AttributePrefix> <InvalidCharsReplacement>_</InvalidCharsReplacement> <ObjectRootElementName>Root</ObjectRootElementName> <ArrayRootElementName>Array</ArrayRootElementName> <ArrayItemElementName>Item</ArrayItemElementName> </Options> <OutputVariable>response</OutputVariable> <Source>PostalCode</Source> </JSONToXML>
קובעים את סוג המשתנה שצוין ברכיבים
<Source>
ו-<OutputVariable>
:- מאתרים את הקוד ב-API Proxy שבו כל אחד מהמשתנים האלה הוגדר לראשונה.
- אחרי שמוצאים את המדיניות שבה המשתנה מוגדר ומאוכלס קודם, צריך לקבוע את סוג המשתנה באופן הבא:
- בודקים את הערך של מאפיין הסוג (אם קיים).
- אם מאפיין הסוג לא קיים, המשתנה נחשב למחרוזת.
- אם סוג המשתנה שמצוין ב-
<Source>
הוא מחרוזת וסוג<OutputVariable>
הוא הודעה או להיפך, זו הסיבה לשגיאה. מידע נוסף על משתנים נפוצים והסוגים שלהם זמין בחומר העזר בנושא משתנים.
לדוגמה, נניח שמדיניות Assign Message משמשת להקצאת ערך למשתנה שנקרא
PostalCode
, כפי שמוצג בהמשך:<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <AssignMessage async="false" continueOnError="false" enabled="true" name="Assign_PostalCode"> <DisplayName>Assign_PostalCode</DisplayName> <Properties/> <AssignVariable> <Name>PostalCode</Name> <Value>{"value":"56008"}</Value> <Ref/> </AssignVariable> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
חשוב לשים לב שסוג המשתנה שמוגדר ב-
<AssignVariable>
הוא מחרוזת, ולכן, המשתנהPostalCode
הוא מסוג מחרוזת.עכשיו, חשוב לזכור שהמשתנה
PostalCode
משמש ברכיב<Source>
של המדיניות JSONToXML:<Source>PostalCode</Source>
באופן דומה, צריך לזכור שהמשתנה
response
נמצא בשימוש ברכיב<OutputVariable>
של מדיניות JSONToXML:<OutputVariable>response</OutputVariable>
מכיוון ש-
PostalCode
הוא מסוג מחרוזת ומשתנהresponse
הוא מסוג הודעה, מדובר בסוגים לא תואמים ולכן מופיע קוד השגיאה:steps.json2xml.InCompatibleTypes
השגיאה שלמעלה יכולה להתרחש גם אם המשתנה ברכיב
<Source>
הוא מסוגmessage
אבל המשתנה ברכיב<OutputVariable>
הוא מסוג מחרוזת.
רזולוציה
חשוב לוודא שהסוג של המשתנה שמוגדר ברכיב <Source>
וברכיב <OutputVariable>
תמיד זהה. חובה שהסוג של המשתנים שמופיעים ברכיב <Source>
וברכיב <OutputVariable>
יהיה זהה. כלומר, צריך לוודא שהסוג של <Source>
ושל האלמנטים <OutputVariable>
הוא מחרוזת או סוג הודעה.
כדי לתקן את המדיניות של המרת JSON ל-XML שצוינה למעלה, אפשר להצהיר על משתנה PostalCode_output
נוסף מסוג מחרוזת באמצעות המדיניות Assign Message, ולהשתמש במשתנה הזה ברכיב <OutputVariable>
של המדיניות של המרת JSON ל-XML.
שינוי במדיניות 'הקצאת הודעות':
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AssignMessage async="false" continueOnError="false" enabled="true" name="Assign_PostalCode">
<DisplayName>Assign_PostalCode</DisplayName>
<Properties/>
<AssignVariable>
<Name>PostalCode</Name>
<Value>{"value":"56008"}</Value>
<Ref/>
</AssignVariable>
<AssignVariable>
<Name>PostalCode_output</Name>
<Ref/>
</AssignVariable>
<IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
<AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>
מדיניות JSONToXML ששונתה:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<JSONToXML async="false" continueOnError="false" enabled="true" name="JSONToXML">
<DisplayName>JSONToXML_checktype</DisplayName>
<Properties/>
<Options>
<NullValue>NULL</NullValue>
<NamespaceBlockName>#namespaces</NamespaceBlockName>
<DefaultNamespaceNodeName>$default</DefaultNamespaceNodeName>
<NamespaceSeparator>:</NamespaceSeparator>
<TextNodeName>#text</TextNodeName>
<AttributeBlockName>#attrs</AttributeBlockName>
<AttributePrefix>@</AttributePrefix>
<InvalidCharsReplacement>_</InvalidCharsReplacement>
<ObjectRootElementName>Root</ObjectRootElementName>
<ArrayRootElementName>Array</ArrayRootElementName>
<ArrayItemElementName>Item</ArrayItemElementName>
</Options>
<OutputVariable>PostalCode_output</OutputVariable>
<Source>PostalCode</Source>
</JSONToXML>
InvalidSourceType
קוד שגיאה
steps.json2xml.InvalidSourceType
גוף התשובה לשגיאה
{ "fault": { "faultstring": "JSONToXML[class invalid_class]: Invalid source type class invalid_class. Valid source types are [message, string].", "detail": { "errorcode": "steps.json2xml.InvalidSourceType" } } }
שגיאה לדוגמה
{
"fault": {
"faultstring": "JSONToXML[class java.lang.Integer]: Invalid source type class java.lang.Integer. Valid source types are [message, string].",
"detail": {
"errorcode": "steps.json2xml.InvalidSourceType"
}
}
}
סיבה
שגיאה זו מתרחשת אם סוג המשתנה המשמש להגדרת הרכיב <Source>
אינו חוקי.סוגי המשתנים החוקיים הם message
ו-string
.
אבחון
מזהים את סוג המקור הלא תקין שנעשה בו שימוש במדיניות ההמרה מ-JSON ל-XML. המידע הזה מופיע בהודעת השגיאה. לדוגמה, בשגיאה הבאה, הסוג הלא תקין הוא 'מספר שלם'.
"faultstring": "JSONToXML[class java.lang.Integer]: Invalid source type class java.lang.Integer. Valid source types are [message, string]."
בודקים את כל כללי המדיניות להמרת JSON ל-XML בשרת ה-API הספציפי שבו אירעה התקלה. במדיניות ההמרה הכושלת מ-JSON ל-XML, כותבים את שם המשתנה שצוין ב-
<Source>
.זוהי מדיניות לדוגמה שבה המשתנה EmployeeID מצוין ברכיב
<Source>
:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<JSONToXML async="false" continueOnError="false" enabled="true" name="JSONToXML">
<DisplayName>Check_SourceType</DisplayName>
<Properties/>
<Options>
<NullValue>NULL</NullValue>
<NamespaceBlockName>#namespaces</NamespaceBlockName>
<DefaultNamespaceNodeName>$default</DefaultNamespaceNodeName>
<NamespaceSeparator>:</NamespaceSeparator>
<TextNodeName>#text</TextNodeName>
<AttributeBlockName>#attrs</AttributeBlockName>
<AttributePrefix>@</AttributePrefix>
<InvalidCharsReplacement>_</InvalidCharsReplacement>
<ObjectRootElementName>Root</ObjectRootElementName>
<ArrayRootElementName>Array</ArrayRootElementName>
<ArrayItemElementName>Item</ArrayItemElementName>
</Options>
<OutputVariable>request</OutputVariable>
<Source>EmployeeID</Source>
</JSONToXML>
קובעים את סוג המשתנה שצוין ברכיב
<Source>
:- מאתרים את הקוד ב-API Proxy שבו המשתנה הזה הוגדר לראשונה.
- אחרי שמבינים קודם את המדיניות שבה המשתנה מוגדר ומאוכלס, צריך לקבוע את סוג המשתנה באופן הבא:
- בודקים את הערך של מאפיין הסוג (אם קיים).
- אם מאפיין הסוג לא קיים, המשתנה נחשב למחרוזת.
- אם הסוג של המשתנה שצוין ב-
<Source>
הוא לא סוג של הודעת שגיאה או מחרוזת, זו הסיבה לשגיאה. מידע על משתנים נפוצים ועל הסוגים שלהם זמין במאמר העזרה בנושא משתנים.
לדוגמה, נניח שמדיניות ExtractVariables משמשת לחילוץ הערך ממטען ייעודי (payload) של JSON ולהגדרת הערך למשתנה
EmployeeID
מסוג מספר שלם, כפי שמוצג בהמשך:<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <ExtractVariables name="ExtractJSONVariables"> <Source>request</Source> <JSONPayload> <Variable name="EmployeeID" type="integer"> <JSONPath>$.ID</JSONPath> </Variable> </JSONPayload> </ExtractVariables>
עכשיו, חשוב לזכור שהמשתנה
EmployeeID
משמש ברכיב<Source>
של המדיניות JSONToXML:<Source>EmployeeID</Source>
מכיוון שהסוג של המשתנה הזה הוא
Integer
, שהוא לא סוג תקין של<Source>
, שרת ה-proxy של ה-API נכשל עם השגיאה:steps.json2xml.InvalidSourceType
רזולוציה
חשוב לוודא שהסוג של המשתנה שמשמש לציון הרכיב <Source>
הוא תקין. סוגי <Source>
חוקיים הם message
ו-string
.
כדי להימנע מהשגיאה שלמעלה במדיניות JSONToXML, אפשר להשתמש במשתנה הבקשה שהוא מסוג message או בכל מחרוזת אחרת שהיא עומס עבודה תקין של JSON.