הדף הזה רלוונטי ל-Apigee ול-Apigee Hybrid.
לעיון במסמכי התיעוד של Apigee Edge
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" } } }
סיבות אפשריות
הסיבות האפשריות לשגיאה הזו:
| הסיבה | תיאור |
| מטען ייעודי (payload) של קלט חסר | המטען הייעודי (payload) של הקלט (JSON) ריק. |
| קלט לא תקין או לא מעוצב | הקלט (JSON) שהועבר למדיניות JSON to XML לא תקין או פגום. |
הסיבה: חסר מטען ייעודי (payload) של קלט
השגיאה הזו מתרחשת במדיניות JSON ל-XML אם התוכן (payload) של המשתנה שצוין באלמנט <Source> ריק.
לדוגמה, אם הרכיב <Source> במדיניות JSON ל-XML מוגדר כמשתנה request או response, והוא אמור להכיל מטען ייעודי (payload) בפורמט JSON, אבל המטען הייעודי ריק, השגיאה תתרחש.
אבחון
מזהים את מדיניות ה-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 שמוצגת למעלה, מטען הבקשה (כלומר, גוף הבקשה) שנשלח על ידי הלקוח ריק.
לדוגמה:
curl -v "http://your_host_alias/v1/testjsontoxml" -H "Content-Type: application/json"
your_host_alias הוא דומיין שפונה לציבור ומשמש לגישה לממשקי ה-API, כפי שהוגדר במאפיין
virtualhosts.hostAliasesבקובץ ההחלפות. מידע נוסף זמין במאמר בנושא ציון החלפות של הגדרות.מכיוון שהמטען הייעודי (payload) של תגובת ה-JSON ריק, מתקבל קוד השגיאה:
steps.json2xml.ExecutionFailedהשגיאה הזו יכולה להופיע גם אם רכיב
<Source>מוגדר כ-response, אבל השרת העורפי מעביר מטען ייעודי ריק.
רזולוציה
מוודאים שהקלט שמועבר למדיניות JSON to XML ברכיב <Source> הוא מטען ייעודי (payload) תקין של JSON ולא ריק.
כדי לפתור את הבעיה במדיניות לדוגמה של JSON ל-XML, צריך להעביר מטען ייעודי (payload) תקין של JSON. לדוגמה:
יוצרים קובץ בשם
city.jsonעם התוכן הבא:{ "Name":"Apigee", "City":"Bengaluru", "Pincode":"560016" }מבצעים את הקריאה ל-API באמצעות פקודת curl באופן הבא:
curl -v "http://your_host_alias/v1/testxmltojson" -H "Content-Type: application/json" -X POST -d @company.json
your_host_alias הוא דומיין שפונה לציבור ומשמש לגישה לממשקי ה-API, כפי שהוגדר במאפיין
virtualhosts.hostAliasesבקובץ ההחלפות. מידע נוסף זמין במאמר בנושא ציון החלפות של הגדרות.
הסיבה: קלט לא תקין או בפורמט שגוי
אם המדיניות של 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://your_host_alias/v1/testjsontoxml" -H "Content-Type: application/json" -X POST -d '[ "args" : ["name" : "Google" ]]'
your_host_alias הוא דומיין שפונה לציבור ומשמש לגישה לממשקי ה-API, כפי שהוגדר במאפיין
virtualhosts.hostAliasesבקובץ ההחלפות. מידע נוסף זמין במאמר בנושא ציון החלפות של הגדרות.מטען ה-JSON הייעודי (payload) שהועבר בבקשה לא תקין כי אובייקט ה-JSON מתחיל ומסתיים בסוגריים מרובעים ([ ]). לכן, מתקבל קוד השגיאה:
steps.json2xml.ExecutionFailedהשגיאה הזו יכולה להופיע גם אם רכיב
<Source>הוגדר כ-response, אבל מטען הנתונים של תגובת ה-JSON לא תקין או לא בפורמט הנכון.
פתרון
מוודאים שהקלט שמועבר למדיניות JSON to 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 שנכשל, צריך לבדוק אם התג
<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הוא מסוג מחרוזת.עכשיו נזכרים שהמשתנה
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 מסוג מחרוזת באמצעות מדיניות הקצאת ההודעה, ולהשתמש במשתנה הזה ברכיב <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. אפשר למצוא את המידע הזה בהודעת השגיאה. לדוגמה, בשגיאה הבאה, הסוג הלא תקין הוא Integer.
"faultstring": "JSONToXML[class java.lang.Integer]: Invalid source type class java.lang.Integer. Valid source types are [message, string]."בודקים את כל כללי המדיניות של JSON ל-XML ב-API Proxy הספציפי שבו התרחשה הכשל. בכלל המדיניות של 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מסוג integer, כמו שמוצג בהמשך:<?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>תקין, ה-API Proxy נכשל עם השגיאה:steps.json2xml.InvalidSourceType
רזולוציה
מוודאים שסוג המשתנה שמשמש לציון הרכיב <Source> הוא תקין. הסוגים התקינים של <Source> הם message ו-string.
כדי להימנע מהשגיאה שלמעלה במדיניות JSONToXML, אפשר להשתמש במשתנה request שהוא מסוג message או בכל מחרוזת אחרת שהיא מטען ייעודי (payload) חוקי של JSON.