פתרון בעיות בזמן ריצה של מדיניות JSON ל-XML

כרגע מוצג התיעוד של 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, שלא קיים בתהליך הבקשה.

אבחון

  1. יש לזהות את מדיניות JSON ל-XML שבה אירעה השגיאה, ואת שם המשתנה שאינו זמין. אפשר למצוא את שני הפריטים האלה ברכיב faultstring של הודעת השגיאה. לדוגמה, בשדה faultstring הבא, שם המדיניות הוא Convert-JSONToXML והמשתנה הוא response:

    "faultstring": "JSONToXML[Convert-JSONToXML]: Source response is not available"
    
  2. בקובץ ה-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>
    
  3. צריך לקבוע אם המשתנה שנכלל ברכיב <Source> מוגדר וזמין בתהליך שבו מופעלת המדיניות מסוג JSON ל-XML.

  4. אם המשתנה הוא:

    • לא בהיקף (לא זמין בתהליך הספציפי שבו המדיניות מתבצעת) או
    • לא ניתן לפענח (אינו מוגדר)

    זו הסיבה לשגיאה.

    לדוגמה, נניח שהמדיניות של JSON ל-XML שמופיעה למעלה אמורה להתבצע בתהליך request. חשוב לזכור שהמשתנה 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 ל-XML לא תקינה או שגויה.

הסיבה: המטען הייעודי (payload) של הקלט חסר

במדיניות JSON ל-XML, אם התוכן (מטען ייעודי) של המשתנה שצוין ברכיב <Source> ריק, השגיאה הזו מתרחשת.

לדוגמה, אם הרכיב <Source> במדיניות JSON ל-XML מוגדר כמשתנה request או response, והוא אמור להכיל מטען ייעודי (payload) של JSON, אבל אם המטען הייעודי (payload) ריק, השגיאה תתרחש.

אבחון

  1. יש לזהות את מדיניות JSON ל-XML שבה אירעה השגיאה. אפשר למצוא את המידע הזה ברכיב faultstring של תגובת השגיאה. לדוגמה, ב-faultstring הבאים, שם המדיניות הוא Convert-JSONToXML:

    "faultstring": "JSONToXML[Convert-JSONToXML]: Execution failed due to reason: Expecting { or [ at line 1"
    
  2. יש לבדוק את האלמנט <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>
    
  3. צריך לבדוק אם המשתנה שצוין עבור הרכיב <Source> במדיניות ריק. אם הוא ריק, זו הסיבה לשגיאה.

    בדוגמה שלמעלה של מדיניות JSON ל-XML, המטען הייעודי (payload) של הבקשה (כלומר, גוף הבקשה) שנשלח על ידי הלקוח ריק.

    לדוגמה:

    curl -v "http://<org>-<env>.apigee.net/v1/testjsontoxml" -H "Content-Type: application/json"
    

    המטען הייעודי של תגובת JSON ריק, ולכן תקבלו את קוד השגיאה:

    steps.json2xml.ExecutionFailed
    

    השגיאה הזו יכולה להופיע גם אם הרכיב <Source> מוגדר לתגובה, אבל המטען הייעודי (payload) ריק מועבר על ידי שרת הקצה העורפי.

רזולוציה

צריך לוודא שהקלט שמועבר למדיניות JSON ל-XML ברכיב <Source> הוא מטען ייעודי (payload) חוקי של JSON, ושהוא לא ריק.

כדי לפתור את הבעיה במדיניות לדוגמה מסוג JSON ל-XML, צריך להעביר מטען ייעודי (payload) תקין של JSON. לדוגמה:

  1. צור קובץ בשם city.json עם התוכן הבא:

    {
      "Name":"Apigee",
      "City":"Bengaluru",
      "Pincode":"560016"
    }
    
  2. מבצעים את הקריאה ל-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"

אבחון

  1. יש לזהות את מדיניות JSON ל-XML שבה אירעה השגיאה. אפשר למצוא את המידע הזה ברכיב faultstring של תגובת השגיאה. לדוגמה, ב-faultstring הבאים, שם המדיניות הוא Convert-JSONToXML:

    "faultstring": "JSONToXML[Convert-JSONToXML]: Execution failed due to reason: Expecting { or [ at line 1"
    
  2. צריך לבדוק את הרכיב <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>
    
  3. יש לוודא שהקלט שצוין ברכיב <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> הוא מסוג מחרוזת.

אבחון

  1. יש לזהות את מדיניות JSON ל-XML שבה אירעה השגיאה. אפשר למצוא את המזהה ברכיב faultstring של תגובת השגיאה. לדוגמה, ב-faultstring הבאים, שם המדיניות הוא Check-JSONToXML:

    "faultstring": "JSONToXML[Check-JSONToXML]: Output variable is not available."
    
  2. מאמתים אם הפרמטר <OutputVariable> חסר במדיניות JSON ל-XML שנכשלה.

    במדיניות 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>
    
  3. קובעים את סוג המשתנה שמצוין ברכיב <Source>:

    1. מאתרים את הקוד ב-API Proxy במקום שבו המשתנה הוגדר קודם.
    2. אחרי שמבינים מהי המדיניות שבה המשתנה מוגדר ומאוכלס קודם, צריך לקבוע את הסוג של המשתנה באופן הבא:
      1. בודקים את הערך של מאפיין הסוג (אם יש כזה).
      2. אם מאפיין הסוג לא קיים, המשתנה נחשב למחרוזת.
    3. אם סוג המשתנה הוא מחרוזת, זה הגורם לשגיאה. מידע נוסף על משתנים נפוצים ועל הסוגים שלהם זמין בחומר העזר בנושא משתנים.

    לדוגמה, אפשר לבחון את המשתנה 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.

אבחון

  1. יש לזהות את מדיניות JSON ל-XML שבה אירעה השגיאה. אפשר למצוא את המזהה ברכיב faultstring של תגובת השגיאה. לדוגמה, ב-faultstring הבאים, שם המדיניות הוא JSONToXML_checktype:

    "faultstring": "JSONToXML[JSONToXML_checktype]: String can not be assigned to message type."
    
  2. במדיניות 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>
    
    
  3. קובעים את סוג המשתנה שמצוין ברכיבים <Source> ו-<OutputVariable>:

    1. מאתרים את הקוד ב-API Proxy שבו כל אחד מהמשתנים האלה הוגדר קודם.
    2. אחרי שמבינים מהי המדיניות שבה המשתנה מוגדר ומאוכלס קודם, צריך לקבוע את הסוג של המשתנה באופן הבא:
      1. בודקים את הערך של מאפיין הסוג (אם יש כזה).
      2. אם מאפיין הסוג לא קיים, המשתנה נחשב למחרוזת.
    3. אם סוג המשתנה שצוין ב-<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 Policy כפי שמתואר למעלה, אפשר להצהיר על משתנה נוסף מסוג PostalCode_output מסוג מחרוזת באמצעות הקצאת מדיניות הודעה, ולהשתמש במשתנה הזה ברכיב <OutputVariable> של מדיניות JSON ל-XML Policy.

שינוי של מדיניות הקצאת הודעות:

<?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.

אבחון

  1. זיהוי סוג המקור הלא חוקי שבו נעשה שימוש במדיניות JSON ל-XML. המידע הזה מופיע בהודעת השגיאה. לדוגמה, בשגיאה הבאה, הסוג הלא חוקי הוא 'מספר שלם'.

    "faultstring": "JSONToXML[class java.lang.Integer]: Invalid source type class java.lang.Integer. Valid source types are [message, string]."
    
  2. יש לבדוק את כל כללי המדיניות של 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>
  1. קובעים את סוג המשתנה שמצוין ברכיב <Source>:

    1. מאתרים את הקוד ב-API Proxy במקום שבו המשתנה הזה הוגדר קודם.
    2. אחרי שמבינים מהי המדיניות שבה המשתנה מוגדר ומאוכלס קודם, צריך לקבוע את הסוג של המשתנה באופן הבא:
      1. בודקים את הערך של מאפיין הסוג (אם יש כזה).
      2. אם מאפיין הסוג לא קיים, המשתנה נחשב למחרוזת.
    3. אם סוג המשתנה שצוין ב-<Source> הוא לא הודעה וגם לא סוג מחרוזת, זו הסיבה לשגיאה. מידע נוסף על משתנים נפוצים ועל הסוגים שלהם זמין בחומר העזר בנושא משתנים.

    כדוגמה, נתייחס לכך שמדיניות extracts משמשת לחילוץ הערך ממטען ייעודי (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, אפשר להשתמש במשתנה request שהוא מסוג הודעה או כל מחרוזת אחרת שהיא מטען ייעודי (payload) חוקי של JSON.