מוצג המסמך של Apigee Edge.
עוברים אל
מסמכי תיעוד של Apigee X. מידע
מה
המדיניות הזו ממירה הודעות מהפורמט של שפת סימון ניתנת להרחבה (XML) ל-JavaScript Object Notation (JSON), נותן לך כמה אפשרויות לשליטה באופן בו הודעות שהומר.
בהנחה שהכוונה היא להמיר תשובה בפורמט XML לפורמט JSON תגובה, המדיניות תצורף לתהליך התגובה (לדוגמה, Response / ProxyEndpoint / PostFlow).
מידע כללי
בתרחיש אופייני של תהליך בחירת הרשת, מדיניות מ-JSON ל-XML בתהליך הבקשה הנכנסת הוא מותאם למדיניות XML ל-JSON בתהליך התגובה היוצאת. על ידי שילוב של כללי מדיניות בדרך הזו, ניתן לחשוף API בפורמט JSON לשירותים לקצה העורפי שתומכים במקור ב-XML בלבד.
בתרחישים שבהם אפליקציות לקוח מגוונות משתמשות בממשקי API, שעשויות לדרוש JSON או XML, אפשר להגדיר באופן דינמי את פורמט התגובה על ידי הגדרת JSON ל-XML ו-XML ל-JSON למדיניות להפעלה מותנית. מידע נוסף זמין בקטע תנאים ומשתנים של זרימה לצורך הטמעה של התרחיש הזה.
דוגמאות
דיון מפורט על המרה בין JSON ל-XML זמין בכתובת http://community.apigee.com/articles/1839/converting-between-xml-and-json-what-you-need-to-k.html.
התשובה ממירה
<XMLToJSON name="ConvertToJSON"> <Options> </Options> <OutputVariable>response</OutputVariable> <Source>response</Source> </XMLToJSON>
התצורה הזו היא ההגדרה המינימלית שנדרשת כדי להמיר XML
JSON – לוקח הודעת תגובה בפורמט XML בתור המקור, ואז יוצר
הודעה בפורמט JSON שמאוכלסת ב-OutputVariable response
. קצה
המערכת תשתמש באופן אוטומטי בתוכן של המשתנה הזה כהודעה לשלב העיבוד הבא.
הפניה לרכיב
בהמשך מפורטים הרכיבים והמאפיינים שאפשר להגדיר במדיניות הזו.
<XMLToJSON async="false" continueOnError="false" enabled="true" name="XML-to-JSON-1"> <DisplayName>XML to JSON 1</DisplayName> <Source>response</Source> <OutputVariable>response</OutputVariable> <Options> <RecognizeNumber>true</RecognizeNumber> <RecognizeBoolean>true</RecognizeBoolean> <RecognizeNull>true</RecognizeNull> <NullValue>NULL</NullValue> <NamespaceBlockName>#namespaces</NamespaceBlockName> <DefaultNamespaceNodeName>&</DefaultNamespaceNodeName> <NamespaceSeparator>***</NamespaceSeparator> <TextAlwaysAsProperty>true</TextAlwaysAsProperty> <TextNodeName>TEXT</TextNodeName> <AttributeBlockName>FOO_BLOCK</AttributeBlockName> <AttributePrefix>BAR_</AttributePrefix> <OutputPrefix>PREFIX_</OutputPrefix> <OutputSuffix>_SUFFIX</OutputSuffix> <StripLevels>2</StripLevels> <TreatAsArray> <Path unwrap="true">teachers/teacher/studentnames/name</Path> </TreatAsArray> </Options> <!-- Use Options or Format, not both --> <Format>yahoo</Format> </XMLToJSON>
<XMLtoJSON> מאפיינים
<XMLtoJSON async="false" continueOnError="false" enabled="true" name="XML-to-JSON-1">
בטבלה הבאה מתוארים מאפיינים שמשותפים לכל רכיבי ההורה של המדיניות:
מאפיין | תיאור | ברירת מחדל | נוכחות |
---|---|---|---|
name |
השם הפנימי של המדיניות. הערך של המאפיין אפשר להשתמש ברכיב |
לא רלוונטי | חובה |
continueOnError |
צריך להגדיר את הערך יש להגדיר ל- |
false | אופציונלי |
enabled |
צריך להגדיר את הערך צריך להגדיר את הערך |
true | אופציונלי |
async |
המאפיין הזה הוצא משימוש. |
false | הוצא משימוש |
<DisplayName> רכיב
צריך להשתמש בנוסף למאפיין name
כדי להוסיף תווית למדיניות
עורך proxy של ממשק משתמש לניהול עם שם אחר בשפה טבעית.
<DisplayName>Policy Display Name</DisplayName>
ברירת מחדל |
לא רלוונטי אם משמיטים את הרכיב הזה, הערך של המאפיין |
---|---|
נוכחות | אופציונלי |
סוג | מחרוזת |
<Source> רכיב
המשתנה, הבקשה או התגובה, שמכילים את הודעת ה-XML שאליה רוצים להמיר את ההודעה. JSON.
יש להגדיר את הכותרת HTTP מסוג Content-type של הודעת המקור בתור
application/xml
, אחרת המדיניות לא נאכפת.
אם לא מוגדר <Source>
, המערכת תתייחס אליו כאל הודעה (שמסתיימת
בקשה כשהמדיניות מצורפת לתהליך הבקשה, או תגובה כשהמדיניות מצורפת
בתהליך התשובה).
אם לא ניתן לפענח את משתנה המקור או אם הוא משתנה לסוג שאינו הודעה, המדיניות יקפיץ הודעת שגיאה.
<Source>response</Source>
ברירת מחדל | בקשה או תגובה, שנקבעים לפי המקום שבו המדיניות מתווספת לתהליך ה-proxy של ה-API |
נוכחות | אופציונלי |
סוג | הודעה |
<OutputVariable> רכיב
אחסון הפלט של ה-XML להמרה לפורמט JSON. בדרך כלל זה אותו ערך כמו מקור, כלומר בדרך כלל תגובת XML מומרת לתגובת JSON.
המטען הייעודי (Payload) של הודעת ה-XML מנותח ומומר ל-JSON, וגם את סוג התוכן של HTTP
הכותרת של ההודעה בפורמט XML מוגדרת ל-application/json
.
אם אין הגדרה של OutputVariable
, הפונקציה source
נחשבת
OutputVariable
לדוגמה, אם הערך של source
הוא response
,
ואז OutputVariable
מוגדר כברירת מחדל כ-response
.
<OutputVariable>response</OutputVariable>
ברירת מחדל | בקשה או תגובה, שנקבעים לפי המקום שבו המדיניות מתווספת לתהליך ה-proxy של ה-API |
נוכחות | הרכיב הזה הוא חובה כשהמשתנה שמוגדר ברכיב <Source> הוא מסוג מחרוזת. |
סוג | הודעה |
<Options>
אפשרויות מאפשרות לכם לשלוט בהמרה מ-XML ל-JSON. אפשר להשתמש באחד משני הסוגים
<Options>
, שמאפשרת להוסיף הגדרות ספציפיות של המרות, או
<Format>
, שמאפשר להפנות לתבנית של
לאפשרויות מוגדרות מראש. לא ניתן להשתמש גם ב-<Options>
וגם
<Format>
.
השדה <Options>
נדרש אם לא משתמשים ב-<Format>
.
<Options>/<RecognizeNumber> רכיב
אם הערך הוא True, שדות המספרים במטען הייעודי (payload) של XML נשמרים בפורמט המקורי שלהם.
<RecognizeNumber>true</RecognizeNumber>
למשל, שימו לב ל-XML בדוגמה הבאה:
<a> <b>100</b> <c>value</c> </a>
אם הערך שלו הוא true
, הפונקציה ממירה לערך:
{ "a": { "b": 100, "c": "value" } }
אם הערך שלו הוא false
, הפונקציה ממירה לערך:
{ "a": { "b": "100", "c": "value" } }
ברירת מחדל | false |
נוכחות | אופציונלי |
סוג | בוליאני |
<Options>/<RecognizeBoolean> רכיב
מאפשרת להמרה לשמור על ערכי True/False בוליאניים במקום להפוך את הערכים מחרוזות.
<RecognizeBoolean>true</RecognizeBoolean>
בדוגמת ה-XML הבאה:
<a> <b>true</b> <c>value</c> </a>
אם הערך שלו הוא true
, הפונקציה ממירה לערך:
{ "a": { "b": true, "c": "value" } }
אם הערך שלו הוא false
, הפונקציה ממירה לערך:
{ "a": { "b": "true", "c": "value" } }
ברירת מחדל | false |
נוכחות | אופציונלי |
סוג | בוליאני |
<Options>/<RecognizeNull> רכיב
מאפשרת להמיר ערכים ריקים לערכי null.
<RecognizeNull>true</RecognizeNull>
בפורמט ה-XML הבא:
<a> <b></b> <c>value</c> </a>
אם הערך שלו הוא true
, הפונקציה ממירה לערך:
{ "a": { "b": null, "c": "value" } }
אם הערך שלו הוא false
, הפונקציה ממירה לערך:
{ "a": { "b": {}, "c": "value" } }
ברירת מחדל | false |
נוכחות | אופציונלי |
סוג | בוליאני |
<Options>/<NullValue> רכיב
מציין את הערך שעבורו ערכי ה-null שזוהו בהודעת המקור צריכים להיות.
שהומר. כברירת מחדל, הערך הוא null
. האפשרות הזו שימושית רק
אם הערך של RecognizeNull
הוא True.
<NullValue>not-present</NullValue>
ברירת מחדל | null |
נוכחות | אופציונלי |
סוג | מחרוזת |
<Options>/<NamespaceBlockName>
<Options>/<DefaultNamespaceNodeName>
<Options>/<NamespaceSeparator> רכיבים
השתמשו באלמנטים האלה יחד.
<NamespaceBlockName>#namespaces</NamespaceBlockName> <DefaultNamespaceNodeName>&</DefaultNamespaceNodeName> <NamespaceSeparator>***</NamespaceSeparator>
למשל, שימו לב ל-XML בדוגמה הבאה:
<a xmlns="http://ns.com" xmlns:ns1="http://ns1.com"> <ns1:b>value</ns1:b> </a>
אם לא צוין NamespaceSeparator
, המבנה הבא של JSON
נוצר:
{ "a": { "b": "value" } }
אם הרכיבים NamespaceBlockName
, DefaultNamespaceNodeName
ו-
NamespaceSeparator
מוגדרים כ-#namespaces
, &
,
ו-***
, בהתאמה, נוצר מבנה JSON הבא:
{ "a": { "#namespaces": { "&": "http://ns.com", "ns1": "http://ns1.com" }, "ns1***b": "value" } }
ברירת מחדל | ראו דוגמאות למעלה. |
נוכחות | אופציונלי אבל אם מציינים את הערך <NamespaceBlockName> , צריך לציין גם את
שני אלמנטים אחרים. |
סוג | מחרוזת |
<Options>/<TextAlwaysAsProperty>
<Options>/<TextNodeName> רכיבים
השתמשו באלמנטים האלה יחד.
אם מוגדר הערך true
, התוכן של רכיב ה-XML מומר למחרוזת
לנכס.
<TextAlwaysAsProperty>true</TextAlwaysAsProperty> <TextNodeName>TEXT</TextNodeName>
בפורמט ה-XML הבא:
<a> <b>value1</b> <c>value2<d>value3</d>value4</c> </a>
אם המדיניות TextAlwaysAsProperty
מוגדרת לערך true
ולערך TextNodeName
שצוין בתור TEXT
, נוצר מבנה JSON הבא:
{ "a": { "b": { "TEXT": "value1" }, "c": { "TEXT": [ "value2", "value4" ], "d": { "TEXT": "value3" } } } }
אם המדיניות TextAlwaysAsProperty
מוגדרת לערך false
וגם
TextNodeName
צוין כ-TEXT
, המבנה הבא של JSON הוא
נוצר:
{ "a": { "b": "value1", "c": { "TEXT": [ "value2", "value4" ], { "d": "value3", } } }
ברירת מחדל | <TextAlwaysAsProperty> : לא נכון<TextNodeName> : לא רלוונטי |
נוכחות | אופציונלי |
סוג | <TextAlwaysAsProperty> : ערך בוליאני<TextNodeName> : מחרוזת |
<Options>/<AttributeBlockName>
<Options>/<AttributePrefix> רכיבים
השתמשו באלמנטים האלה יחד.
מאפשרת לקבץ ערכים לבלוק של JSON ולהוסיף קידומות לשמות המאפיינים.
<AttributeBlockName>FOO_BLOCK</AttributeBlockName> <AttributePrefix>BAR_</AttributePrefix>
למשל, שימו לב ל-XML בדוגמה הבאה:
<a attrib1="value1" attrib2="value2"/>
אם שני המאפיינים (AttributeBlockName
וגם AttributePrefix
)
כפי שמוגדר בדוגמה של XML ל-JSON, נוצר המבנה הבא של JSON:
{ "a": { "FOO_BLOCK": { "BAR_attrib1": "value1", "BAR_attrib2": "value2" } } }
אם מציינים רק AttributeBlockName
, המבנה הבא של JSON
נוצר:
{ "a": { "FOO_BLOCK": { "attrib1": "value1", "attrib2": "value2" } } }
אם מציינים רק AttributePrefix
, המבנה הבא של JSON
נוצר:
{ "a": { "BAR_attrib1": "value1", "BAR_attrib2": "value2" } }
אם לא מציינים אף אחד מהם, נוצר מבנה JSON הבא:
{ "a": { "attrib1": "value1", "attrib2": "value2" } }
ברירת מחדל | ראו דוגמאות למעלה. |
נוכחות | אופציונלי |
סוג | מחרוזת |
<Options>/<OutputPrefix>
<Options>/<OutputSuffix> רכיבים
השתמשו באלמנטים האלה יחד.
<OutputPrefix>PREFIX_</OutputPrefix> <OutputSuffix>_SUFFIX</OutputSuffix>
למשל, שימו לב ל-XML בדוגמה הבאה:
<a>value</a>
אם ציינת את שני המאפיינים (OutputPrefix
וגם OutputSuffix
)
כפי שמוגדר בדוגמה של XML ל-JSON, נוצר המבנה הבא של JSON:
PREFIX_{ "a": "value" }_SUFFIX
אם מציינים רק את הערך OutputPrefix
, נוצר המבנה הבא של JSON:
PREFIX_{ "a" : "value" }
אם מציינים רק את הערך OutputSuffix
, נוצר המבנה הבא של JSON:
{ "a" : "value" }_SUFFIX
אם לא ציינת OutputPrefix
וגם לא OutputSuffix
, הערך הבא
המערכת יוצרת את המבנה של קובץ JSON:
{ "a": "value" }
ברירת מחדל | אפשר לעיין בדוגמאות למעלה. |
נוכחות | אופציונלי |
סוג | מחרוזת |
<Options>/<StripLevels> רכיב
<Options> <StripLevels>4</StripLevels> </Options>
לפעמים למטענים ייעודיים (payloads) של XML, כמו SOAP, יש רמות הורה רבות שאסור לכלול. בפורמט JSON. דוגמה לתגובת SOAP שכוללת רמות רבות:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/Schemata-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <soap:Body> <GetCityWeatherByZIPResponse xmlns="http://ws.cdyne.com/WeatherWS/"> <GetCityWeatherByZIPResult> <State>CO</State> <City>Denver</City> <Description>Sunny</Description> <Temperature>62</Temperature> </GetCityWeatherByZIPResult> </GetCityWeatherByZIPResponse> </soap:Body> </soap:Envelope>
יש 4 רמות לפני שמגיעים לרמת המדינה (State), העיר, התיאור והטמפרטורה.
בלי להשתמש ב-<StripLevels>
, תגובת ה-JSON שהומרה תיראה כך
הזה:
{ "Envelope" : { "Body" : { "GetCityWeatherByZIPResponse" : { "GetCityWeatherByZIPResult" : { "State" : "CO", "City" : "Denver", "Description" : "Sunny", "Temperature" : "62" } } } } }
אם רוצים להסיר את 4 הרמות הראשונות בתגובת JSON, צריך להגדיר
<StripLevels>4</StripLevels>
, שיתקבל
JSON:
{ "State" : "CO", "City" : "Denver", "Description" : "Sunny", "Temperature" : "62" }
אפשר להסיר רמות עד לרכיב הראשון שמכיל כמה צאצאים. מה עושה כלומר? נבחן דוגמה מורכבת יותר של JSON:
{ "Envelope" : { "Body" : { "GetCityForecastByZIPResponse" : { "GetCityForecastByZIPResult" : { "ResponseText" : "City Found", "ForecastResult" : { "Forecast" : [ { "ProbabilityOfPrecipiation" : { "Nighttime" : "00", "Daytime" : 10 } ...
רמה 3 בדוגמה הזו היא GetCityForecastByZIPResponse
, שכוללת רק רמה אחת
לילדים. לכן, אם ברצונך להשתמש ב-<StripLevels>3</StripLevels>
(הסירו את
שלוש הרמות הראשונות), ה-JSON ייראה כך:
{ "GetCityForecastByZIPResult" : { "ResponseText" : "City Found", "ForecastResult" : { "Forecast" : [ { "ProbabilityOfPrecipiation" : { "Nighttime" : "00", "Daytime" : 10 } ...
לתשומת ליבך, בחשבון של GetCityForecastByZIPResult
יש כמה ילדים. מאחר שזאת
הרכיב הראשון שמכיל מספר צאצאים, אפשר להסיר את הרמה האחרונה באמצעות
<StripLevels>4</StripLevels>
, שיספק את האפשרויות הבאות
JSON:
{ "ResponseText" : "City Found", "ForecastResult" : { "Forecast" : [ { "ProbabilityOfPrecipiation" : { "Nighttime" : "00", "Daytime" : 10 } ...
רמה 4 היא הרמה הראשונה שיש בה כמה ילדים, ולכן אי אפשר להסיר אף רמה נמוכה מהערך הזה. אם תגדיר את רמת השורה ל-5, 6, 7 וכן הלאה, תמשיך לקבל את תשובה למעלה.
ברירת מחדל | 0 (ללא הסרת שלבים) |
נוכחות | אופציונלי |
סוג | מספר שלם |
<Options>/<TreatAsArray>/<Path> רכיב
<Options> <TreatAsArray> <Path unwrap="true">teachers/teacher/studentnames/name</Path> </TreatAsArray> </Options>
שילוב הרכיבים הזה מאפשר לוודא שערכים ממסמך XML נמצאים בקובץ JSON
מערך. האפשרות הזו שימושית, לדוגמה, כאשר מספר רכיבי הצאצא עשוי להשתנות (מאחד ל-
מרובות), וברצונך לוודא שהערכים תמיד נמצאים במערך. כך תוכלו לשמור על
את הקוד יציב, כי אפשר לקבל נתונים מהמערך באותה הדרך בכל פעם. עבור
דוגמה: $.teachers.teacher.studentnames[0]
מקבל את הערך של שם התלמיד הראשון
במערך, ללא קשר למספר הערכים במערך.
בואו נסתכל שוב על התנהגות ברירת המחדל של XML ל-JSON, ולאחר מכן נראה איך
לשלוט בפלט באמצעות <TreatAsArray>/<Path>
.
כשמסמך XML מכיל רכיב עם כמה ערכי צאצא (בדרך כלל על סמך סכימה).
כאשר maxOccurs='unbounded'
של הרכיב, מדיניות XML ל-JSON באופן אוטומטי
שמה את הערכים האלה במערך. לדוגמה, בלוק ה-XML הבא
<teacher> <name>teacherA</name> <studentnames> <name>student1</name> <name>student2</name> </studentnames> </teacher>
...מומר אוטומטית לקובץ JSON הבא ללא מדיניות מיוחדת תצורה:
{ "teachers" : { "teacher" : { "name" : "teacherA", "studentnames" : { "name" : [ "student1", "student2" ]} } } }
שימו לב ששני שמות התלמידים מוכנסים למערך.
עם זאת, אם רק תלמיד אחד מופיע במסמך ה-XML, המדיניות מ-XML ל-JSON אוטומטית מופיעה בו. מתייחסת לערך כמחרוזת יחידה, ולא כמערך מחרוזות, כפי שמתואר דוגמה:
{ "teachers" : { "teacher" : { "name" : "teacherA", "studentnames" : { "name" : "student1" } } } }
בדוגמאות הקודמות, נתונים דומים הומרו באופן שונה, פעם אחת כמערך,
מחרוזת יחידה. כאן הרכיב <TreatAsArray>/<Path>
מאפשר
אתם שולטים בפלט. אפשר, למשל, לוודא ששמות התלמידים תמיד מזינים.
מערך, גם אם יש רק ערך אחד. יש לך אפשרות להגדיר זאת על ידי זיהוי הנתיב אל
את הערכים שאת הערכים שלו רוצים להכניס למערך. למשל:
<Options> <TreatAsArray> <Path>teachers/teacher/studentnames/name</Path> </TreatAsArray> </Options>
ההגדרות שלמעלה ייכתבו את ה-JSON כך:
{ "teachers" : { "teacher" : { "name" : "teacherA", "studentnames" : { "name" : ["student1"] } ] } } }
שימו לב ש-תלמיד1 נמצא עכשיו במערך. עכשיו, בין אם יש מודל אחד או יותר
אפשר לאחזר אותם ממערך JSON בקוד באמצעות JSONPath הבא:
$.teachers.teacher.studentnames.name[0]
לרכיב <Path>
יש גם מאפיין unwrap
, שמוסבר ב
בקטע הבא.
ברירת מחדל | לא רלוונטי |
נוכחות | אופציונלי |
סוג | מחרוזת |
מאפיינים
<Options> <TreatAsArray> <Path unwrap="true">teachers/teacher/studentnames/name</Path> </TreatAsArray> </Options>
מאפיין | תיאור | נוכחות | סוג |
---|---|---|---|
לפתוח את האריזה |
ברירת מחדל: false הסרת הרכיב מפלט ה-JSON. אפשר להשתמש בפרמטר הזה כדי לייעל או לשטח ("לבטל אריזה")
את ה-JSON, שגם מקצר את ה-JSONPath שנדרש כדי לאחזר ערכים. לדוגמה,
במקום דוגמה לקובץ JSON: { "teachers" : { "teacher" : { "name" : "teacherA", "studentnames" : { "name" : [ "student1", "student2" ]}... בדוגמה הזו, אפשר לטעון שהרכיב <TreatAsArray> <Path unwrap="true">teachers/teacher</Path> <Path unwrap="true">teachers/teacher/studentnames/name</Path> </TreatAsArray> המאפיין { "teachers" : [{ "name" : "teacherA", "studentnames" : ["student1","student2"] }]... חשוב לשים לב שבגלל שהרכיב |
אופציונלי | בוליאני |
דוגמאות נוספות והדרכה מפורטת על התכונה אפשר למצוא במאמר הזה של קהילת Apigee: https://community.apigee.com/content/kbentry/33374/new-edge-minifeature-the-treatasarray-option-in-th.html.
<Format>
פורמט מאפשר לכם לשלוט בהמרה מ-XML ל-JSON. יש להזין שם של מודל מוגדר מראש
תבנית שמכילה שילוב ספציפי של רכיבי אפשרויות שמתוארים בנושא הזה.
פורמטים מוגדרים מראש כוללים: xml.com
, yahoo
, google
,
badgerFish
אפשר להשתמש ברכיב <Format>
או בקבוצה <Options>
. אין לך אפשרות להשתמש
גם <Format>
וגם <Options>
.
בהמשך מוצגות הגדרות הפורמט של כל תבנית מוגדרת מראש.
xml.com
<RecognizeNull>true</RecognizeNull> <TextNodeName>#text</TextNodeName> <AttributePrefix>@</AttributePrefix>
yahoo, יאהו
<RecognizeNumber>true</RecognizeNumber> <TextNodeName>content</TextNodeName>
<TextNodeName>$t</TextNodeName> <NamespaceSeparator>$</NamespaceSeparator> <TextAlwaysAsProperty>true</TextAlwaysAsProperty>
badgerFish
<TextNodeName>$</TextNodeName> <TextAlwaysAsProperty>true</TextAlwaysAsProperty> <AttributePrefix>@</AttributePrefix> <NamespaceSeparator>:</NamespaceSeparator> <NamespaceBlockName>@xmlns</NamespaceBlockName> <DefaultNamespaceNodeName>$</DefaultNamespaceNodeName>
תחביר רכיבים:
<Format>yahoo</Format>
ברירת מחדל | יש להזין שם של פורמט זמין:xml.com , yahoo , google , badgerFish |
נוכחות | שדה חובה אם לא נעשה שימוש ב-<Options> . |
סוג | מחרוזת |
סכימות
התייחסות לשגיאות
This section describes the fault codes and error messages that are returned and fault variables that are set by Edge when this policy triggers an error. This information is important to know if you are developing fault rules to handle faults. To learn more, see What you need to know about policy errors and Handling faults.
Runtime errors
These errors can occur when the policy executes.
Fault code | HTTP status | Cause | Fix |
---|---|---|---|
steps.xmltojson.ExecutionFailed |
500 | This error occurs when the input payload (XML) is empty or the input XML is invalid or malformed. | build |
steps.xmltojson.InCompatibleType |
500 | This error occurs if the type of the variable defined in the <Source> element and the
<OutputVariable> element are not the same. It is mandatory that the type of the variables
contained within the <Source> element and the <OutputVariable> element matches.
|
build |
steps.xmltojson.InvalidSourceType |
500 | This error occurs if the type of the variable used to define the <Source> element is
invalid.The valid types of variable are message and string. |
build |
steps.xmltojson.OutputVariableIsNotAvailable |
500 | This error occurs if the variable specified in the <Source> element of the XML to
JSON policy is of type string and the <OutputVariable> element is not defined.
The <OutputVariable> element is mandatory when the variable defined in the <Source>
element is of type string. |
build |
steps.xmltojson.SourceUnavailable |
500 |
This error occurs if the message
variable specified in the <Source> element of the XML to JSON policy is either:
|
build |
Deployment errors
These errors can occur when you deploy a proxy containing this policy.
Error name | Cause | Fix |
---|---|---|
EitherOptionOrFormat |
If one of the elements <Options> or <Format> is not
declared in the XML to JSON Policy, then the deployment of the API proxy fails.
|
build |
UnknownFormat |
If the <Format> element within the XML to JSON policy has an unknown
format defined, then the deployment of the API proxy fails. Predefined formats include:
xml.com , yahoo , google , and badgerFish .
|
build |
Fault variables
These variables are set when a runtime error occurs. For more information, see What you need to know about policy errors.
Variables | Where | Example |
---|---|---|
fault.name="fault_name" |
fault_name is the name of the fault, as listed in the Runtime errors table above. The fault name is the last part of the fault code. | fault.name = "SourceUnavailable" |
xmltojson.policy_name.failed |
policy_name is the user-specified name of the policy that threw the fault. | xmltojson.XMLtoJSON-1.failed = true |
Example error response
{ "fault": { "faultstring": "XMLToJSON[XMLtoJSON-1]: Source xyz is not available", "detail": { "errorcode": "steps.xml2json.SourceUnavailable" } } }
Example fault rule
<faultrule name="VariableOfNonMsgType"></faultrule><FaultRule name="XML to JSON Faults"> <Step> <Name>AM-SourceUnavailableMessage</Name> <Condition>(fault.name Matches "SourceUnavailable") </Condition> </Step> <Step> <Name>AM-BadXML</Name> <Condition>(fault.name = "ExecutionFailed")</Condition> </Step> <Condition>(xmltojson.XMLtoJSON-1.failed = true) </Condition> </FaultRule>
נושאים קשורים
JSON ל-XML: JSON ל-XML מדיניות