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

אתם צופים במסמכי העזרה של Apigee Edge.
כניסה למסמכי העזרה של Apigee X.
info

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"
        }
    }
}

גורמים אפשריים

הסיבות האפשריות לשגיאה הזו:

הסיבה תיאור
חסר עומס נתונים להזנה המטען הייעודי (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"
    

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

    steps.json2xml.ExecutionFailed
    

    השגיאה הזו יכולה להתרחש גם אם האלמנט <Source> מוגדר בתור response, אבל השרת לקצה העורפי מעביר עומס שימושי ריק.

רזולוציה

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

    לדוגמה, אפשר להסתכל על המשתנה PostalCode במדיניות שלמעלה להמרת JSON ל-XML.

    לדוגמה, נניח שמדיניות Assign Message משמשת להקצאת ערך למשתנה שנקרא 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 הוא מסוג string.

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

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

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