מוצג המסמך של Apigee Edge.
עוברים אל
מסמכי תיעוד של Apigee X. מידע
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) של הקלט (JSON) ריק. |
קלט לא חוקי או פגום | הקלט (JSON) שהוענק למדיניות של JSON ל-XML לא תקין או שהוא בפורמט שגוי. |
הסיבה: חסר מטען ייעודי (payload) של קלט
במדיניות מ-JSON ל-XML אם התוכן (המטען הייעודי (Payload) של המשתנה שצוין ברכיב <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>
מוגדר לתגובה, אבל מטען ייעודי (payload) ריק מועבר על ידי שרת הקצה העורפי.
רזולוציה
צריך לוודא שהקלט שמועבר למדיניות 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>
הוגדר לתגובה, אבל המטען הייעודי (payload) של תגובת ה-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>
:- מחפשים את הקוד בשרת ה-proxy ל-API שבו המשתנה הוגדר קודם.
- אחרי שהבנתם את המדיניות שבה המשתנה מוגדר ואכלס קודם, צריך לקבוע את סוג המשתנה באופן הבא:
- בודקים את הערך של מאפיין הסוג (אם קיים).
- אם מאפיין הסוג לא קיים, המשתנה נחשב למחרוזת.
- אם סוג המשתנה הוא מחרוזת, אז זו הסיבה לשגיאה. מידע נוסף על משתנים נפוצים והסוגים שלהם זמין בחומר העזר בנושא משתנים.
לדוגמה, עליכם לבחון את המשתנה
PostalCode
במדיניות שלמעלה מ-JSON ל-XML.לדוגמה, שימו לב שהמדיניות 'הקצאת הודעה' משמשת להקצאת ערך למשתנה בשם
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>
:- מחפשים את הקוד בשרת ה-proxy ל-API שבו כל אחד מהמשתנים הוגדר ראשון.
- אחרי שמזהים את המדיניות שבה המשתנה מוגדר ומאוכלס קודם, צריך לקבוע את סוג המשתנה באופן הבא:
- בודקים את הערך של מאפיין הסוג (אם קיים).
- אם מאפיין הסוג לא קיים, המשתנה נחשב למחרוזת.
- אם סוג המשתנה שמצוין ב-
<Source>
הוא מחרוזת וסוג<OutputVariable>
הוא הודעה או להיפך, זו הסיבה לשגיאה. מידע על משתנים נפוצים ועל הסוגים שלהם זמין במאמר העזרה בנושא משתנים.
לדוגמה, נבחן מדיניות 'הקצאת הודעה' שמשמשת להקצאת ערך למשתנה בשם
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. המידע הזה מופיע בהודעת השגיאה. לדוגמה, בשגיאה הבאה, הסוג הלא תקין הוא 'מספר שלם'.
"faultstring": "JSONToXML[class java.lang.Integer]: Invalid source type class java.lang.Integer. Valid source types are [message, string]."
לבדוק את כל כללי המדיניות מ-JSON ל-XML בשרת ה-proxy הספציפי ל-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>
:- מחפשים את הקוד בשרת ה-proxy ל-API שבו המשתנה הוגדר ראשון.
- אחרי שמבינים קודם את המדיניות שבה המשתנה מוגדר ומאוכלס, צריך לקבוע את סוג המשתנה באופן הבא:
- בודקים את הערך של מאפיין הסוג (אם קיים).
- אם מאפיין הסוג לא קיים, המשתנה נחשב למחרוזת.
- אם סוג המשתנה שצוין ב-
<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 או כל מחרוזת אחרת שהיא מטען ייעודי (payload) תקין של JSON.