כרגע מוצג התיעוד של 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 שמאוכלסת בפרמטר response
OutputVariable. Edge משתמש באופן אוטומטי בתוכן של המשתנה הזה בתור ההודעה בשלב הבא בעיבוד.
הפניה לרכיב
בטבלה הבאה מפורטים הרכיבים והתכונות שאפשר להגדיר במדיניות הזו.
<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.
צריך להגדיר את הכותרת מסוג Content-type של HTTP של הודעת המקור כ-application/xml
, אחרת המדיניות לא תיאכף.
אם המדיניות <Source>
לא מוגדרת, היא מטופלת כהודעה (שעוברת
לבקשה כשהמדיניות מצורפת לתהליך בקשה, או תגובה כשהמדיניות מצורפת לתהליך תגובה).
אם לא ניתן לפענח את משתנה המקור, או אם הוא מפנה לסוג שאינו הודעה, המדיניות גורמת לשגיאה.
<Source>response</Source>
ברירת מחדל | בקשה או תגובה, שנקבעות לפי המקום שבו המדיניות מתווספת לתהליך ה-API של שרת ה-proxy |
נוכחות | אופציונלי |
סוג | הודעה |
הרכיב <OutputVariable>
שמירת הפלט של ההמרה של פורמט XML ל-JSON. לרוב זה הערך שזהה למקור, כלומר, בדרך כלל תגובת XML מומרת לתגובת JSON.
המטען הייעודי (payload) של הודעת ה-XML מנותח ועובר המרה ל-JSON, והכותרת מסוג HTTP Content-type של ההודעה בפורמט XML מוגדרת ל-application/json
.
אם לא מציינים OutputVariable
, המערכת תתייחס ל-source
בתור
OutputVariable
. לדוגמה, אם הערך של source
הוא response
,
ברירת המחדל של OutputVariable
היא response
.
<OutputVariable>response</OutputVariable>
ברירת מחדל | בקשה או תגובה, שנקבעות לפי המקום שבו המדיניות מתווספת לתהליך ה-API של שרת ה-proxy |
נוכחות | זהו רכיב חובה אם המשתנה שמוגדר ברכיב <Source> הוא מסוג מחרוזת. |
סוג | הודעה |
<אפשרויות>
האפשרויות מאפשרות לך לשלוט בהמרה מ-XML ל-JSON. מומלץ להשתמש בקבוצה <Options>
, שמאפשרת להוסיף הגדרות ספציפיות של המרות, או ברכיב <Format>
שמאפשר להפנות לתבנית של אפשרויות שהוגדרו מראש. לא ניתן להשתמש גם ב-<Options>
וגם
ב-<Format>
.
אם לא משתמשים ב-<Format>
, חובה לציין את הפרמטר <Options>
.
רכיב <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>
מאפשרת להמיר ערכים ריקים לערכים ריקים.
<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>/<TextEveryAsProperty>
רכיבי <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> : false<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 רמות לפני שמגיעים לרמת המדינה, העיר, התיאור והטמפרטורה.
אם לא ייעשה שימוש ב-<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.
<פורמט>
הפורמט מאפשר לשלוט בהמרה מ-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> . |
סוג | מחרוזת |
סכימות
הפניה לשגיאות
בקטע הזה מתוארים קודי התקלות והודעות השגיאה שמוחזרים, ומשתני השגיאה שמוגדרים על ידי Edge כשהמדיניות הזו גורמת לשגיאה. חשוב לדעת אם אתם מפתחים כללים לתיקון תקלות. מידע נוסף זמין במאמר מה צריך לדעת על שגיאות מדיניות ועל טיפול בפגמים.
שגיאות בזמן ריצה
השגיאות האלה יכולות להתרחש כשהמדיניות מופעלת.
קוד שגיאה | סטטוס HTTP | סיבה | תיקון |
---|---|---|---|
steps.xmltojson.ExecutionFailed |
500 | השגיאה הזו מתרחשת כאשר המטען הייעודי (payload) של הקלט (XML) של הקלט ריק, או כאשר קוד ה-XML לקלט לא תקין או שגוי. | build |
steps.xmltojson.InCompatibleType |
500 | השגיאה הזו מתרחשת אם סוג המשתנה שמוגדר ברכיב <Source> והרכיב <OutputVariable> לא זהים. חובה להקפיד שסוג המשתנים שכלולים ברכיב <Source> והרכיב <OutputVariable> יהיו זהים.
|
build |
steps.xmltojson.InvalidSourceType |
500 | השגיאה הזו מתרחשת אם סוג המשתנה שמשמש להגדרת הרכיב <Source>
לא תקין.סוגי המשתנה החוקיים הם message ומחרוזת. |
build |
steps.xmltojson.OutputVariableIsNotAvailable |
500 | השגיאה הזו מתרחשת אם המשתנה שצוין ברכיב <Source> במדיניות של XML ל-JSON הוא מסוג מחרוזת והרכיב <OutputVariable> לא מוגדר.
הרכיב <OutputVariable> הוא שדה חובה כשהמשתנה שמוגדר ברכיב <Source> הוא מסוג מחרוזת. |
build |
steps.xmltojson.SourceUnavailable |
500 |
השגיאה הזו מתרחשת אם המשתנה message
שמצוין ברכיב <Source> של מדיניות XML ל-JSON הוא:
|
build |
שגיאות בפריסה
השגיאות האלה יכולות להתרחש כשפורסים שרת proxy שכולל את המדיניות הזו.
שם השגיאה | סיבה | תיקון |
---|---|---|
EitherOptionOrFormat |
אם אחד מהרכיבים <Options> או <Format> לא מוצהר
במדיניות של XML ל-JSON, פריסת שרת ה-proxy של ה-API תיכשל.
|
build |
UnknownFormat |
אם לאלמנט <Format> במדיניות XML ל-JSON מוגדר פורמט לא ידוע, הפריסה של שרת ה-proxy של ה-API תיכשל. הפורמטים שהוגדרו מראש כוללים:
xml.com , yahoo , google ו-badgerFish .
|
build |
משתני שבר
המשתנים האלה מוגדרים כשמתרחשת שגיאה בזמן הריצה. אפשר לקרוא מידע נוסף במאמר מה צריך לדעת על שגיאות מדיניות.
משתנים | מיקום | דוגמה |
---|---|---|
fault.name="fault_name" |
fault_name הוא שם התקלה, כפי שמפורט בטבלה שגיאות זמן ריצה שלמעלה. שם הטעות הוא החלק האחרון בקוד השגיאה. | fault.name = "SourceUnavailable" |
xmltojson.policy_name.failed |
policy_name הוא השם שצוין על ידי המשתמש של המדיניות שגרמה לשגיאה. | xmltojson.XMLtoJSON-1.failed = true |
דוגמה לשגיאה
{ "fault": { "faultstring": "XMLToJSON[XMLtoJSON-1]: Source xyz is not available", "detail": { "errorcode": "steps.xml2json.SourceUnavailable" } } }
דוגמה לכלל שגיאה
<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