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

אבחון

  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"
    

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

    1. מחפשים את הקוד בשרת ה-proxy ל-API שבו המשתנה הוגדר קודם.
    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. מחפשים את הקוד בשרת ה-proxy ל-API שבו כל אחד מהמשתנים הוגדר ראשון.
    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 שצוינה למעלה, אפשר להצהיר על משתנה אחר 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.

אבחון

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