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

原因

從 JSON 到 XML 政策的 <Source> 元素中,如果指定 message 變數,就會發生這個錯誤:

  • 超出範圍 (不適用於執行政策的特定流程) 或
  • 無法解析 (未定義)

例如,如果 JSON 至 XML 政策應在要求流程中執行,但 <Source> 元素設為 response 變數,而該變數並不存在於要求流程中,就會發生這個錯誤。

診斷

  1. 找出發生錯誤的 JSON 至 XML 政策,以及無法使用的變數名稱。您可以在錯誤回應的 faultstring 元素中找到這兩個項目。舉例來說,在下列 faultstring 中,政策名稱是 Convert-JSONToXML,變數則為 response

    "faultstring": "JSONToXML[Convert-JSONToXML]: Source response is not available"
    
  2. 請在 JSON 至 XML 政策 XML 失敗後,確認 <Source> 元素中設定的變數名稱與錯誤字串中識別的變數名稱相符 (如上述步驟 #1)。舉例來說,下列 JSON 到 XML 政策會在 <Source> 元素中指定名為 response 的變數,該變數與 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 流程中執行。提醒您,在 JSON 至 XML 政策的 <Source> 元素中,會使用 response 變數。回應變數僅適用於回應流程。

    由於要求流程中沒有 response 變數,因此您會收到錯誤代碼:

    steps.json2xml.SourceUnavailable
    

解析度

針對失敗的 JSON 至 XML 政策,確保已定義 <Source> 元素中設定的變數,並存在於執行政策的流程中。

如要將 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) 無效或格式錯誤。

原因:缺少輸入酬載

在 JSON 到 XML 政策中,如果 <Source> 元素中指定的變數內容 (酬載) 空白,就會發生這個錯誤。

舉例來說,如果 JSON 至 XML 政策中的 <Source> 元素設為 requestresponse 變數,且這些元素應包含 JSON 酬載,但酬載為空白,就會發生錯誤。

診斷

  1. 找出發生錯誤的 JSON 至 XML 政策。您可以在錯誤回應的 faultstring 元素中找到這項資訊。例如,在下列 faultstring 中,政策名稱是 Convert-JSONToXML

    "faultstring": "JSONToXML[Convert-JSONToXML]: Execution failed due to reason: Expecting { or [ at line 1"
    
  2. 檢查失敗的 JSON 至 XML 政策 XML 中的 <Source> 元素,並確定指定的變數。舉例來說,下列 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 政策範例中,用戶端傳送的要求酬載 (即要求主體) 為空白。

    例如:

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

    由於 JSON 回應酬載為空白,因此您會收到以下錯誤代碼:

    steps.json2xml.ExecutionFailed
    

    如果將 <Source> 元素設為回應,但後端伺服器傳遞空白酬載,也可能會發生這個錯誤。

解析度

確認 <Source> 元素中的 JSON 至 XML 政策的輸入內容是有效的 JSON 酬載,不得為空白。

如要修正 JSON 範例至 XML 政策的問題,請傳遞有效的 JSON 酬載。例如:

  1. 建立名為 city.json 的檔案,並在當中加入下列內容:

    {
      "Name":"Apigee",
      "City":"Bengaluru",
      "Pincode":"560016"
    }
    
  2. 使用 cURL 指令發出 API 呼叫,如下所示:

    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. 檢查失敗的 JSON 至 XML 政策 XML 中指定的 <Source> 元素。舉例來說,下列 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 酬載。 如果輸入內容無效或格式錯誤,就是導致錯誤的原因。

    假設下列無效的 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" ]]'
    

    要求中傳遞的 JSON 酬載無效,因為 JSON 物件的開頭和結尾都是方括號 ([ ])。因此,您會收到錯誤代碼:

    steps.json2xml.ExecutionFailed

    如果將 <Source> 元素設為回應,但 JSON 回應酬載無效或格式錯誤,也可能會發生這個錯誤。

解析度

確認 <Source> 元素中的 JSON 至 XML 政策的輸入內容有效,且格式無效。

如要修正上述 JSON 範例至 XML 政策的問題,請傳遞有效的 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"
        }
    }
}

原因

如果 JSON 至 XML 政策的 <Source> 元素中指定的變數為類型字串,且 <OutputVariable> 元素未定義,就會發生這個錯誤。如果 <Source> 元素中定義的變數屬於類型字串,就必須使用 <OutputVariable> 元素。

診斷

  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. 如果沒有 type 屬性,系統會將該變數視為字串。
    3. 如果變數的類型是字串,就是導致錯誤的原因。如要瞭解常見的變數及其類型,請參閱變數參考資料

    例如,請查看上述 JSON 至 XML 政策中的 PostalCode 變數。

    例如,您可以考慮使用「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 是類型字串。

    現在,請記得在 JSONToXML 政策的 <Source> 元素中使用 PostalCode 變數:

    <Source>PostalCode</Source>
    

    由於 PostalCode 屬於字串類型,而且缺少 <OutputVariable> 元素,因此您會收到錯誤代碼:

    steps.json2xml.OutputVariableIsNotAvailable
    

解析度

請確認 JSONToXML 政策的 <Source> 元素中指定的變數是類型字串時,系統會在政策中定義 <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> 元素必須相符。

有效的類型包括 messagestring

診斷

  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. 如果沒有 type 屬性,系統會將該變數視為字串。
    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 變數是類型字串。

    現在,請記得在 JSONToXML 政策的 <Source> 元素中使用 PostalCode 變數:

    <Source>PostalCode</Source>
    

    同樣地,請記得在 JSONToXML 政策的 <OutputVariable> 元素中使用 response 變數:

    <OutputVariable>response</OutputVariable>
    

    由於 PostalCode 屬於字串類型,但 response 變數屬於訊息類型,因此兩者並不相容,因此您會收到錯誤代碼:

    steps.json2xml.InCompatibleTypes
    

    如果 <Source> 元素中的變數類型為 message,但 <OutputVariable> 元素中的變數是類型字串,也可能會發生上述錯誤。

解析度

確保 <Source> 元素中定義的變數類型與 <OutputVariable> 元素一律相同。請務必比對 <Source> 元素中包含的變數類型,且 <OutputVariable> 元素必須相符。也就是說,請確定 <Source><OutputVariable> 元素的類型都是字串或訊息類型。

如要將 JSON 修正為上述的 XML 政策,您可以使用指派訊息政策宣告另一個類型字串的 PostalCode_output 變數,並在 JSON 的 <OutputVariable> 元素中使用這個變數。

修改後指派訊息政策:

<?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> 元素的變數類型無效,就會發生這個錯誤。有效的變數類型為 messagestring

診斷

  1. 找出 JSON 至 XML 政策中使用的無效來源類型。您可以在錯誤訊息中找到這項資訊。例如,在下列錯誤中,無效類型為整數。

    "faultstring": "JSONToXML[class java.lang.Integer]: Invalid source type class java.lang.Integer. Valid source types are [message, string]."
    
  2. 檢查發生錯誤的特定 API Proxy 中的所有 JSON 至 XML 政策。在失敗的 JSON 至 XML 政策中,記下 <Source> 中指定的變數名稱。

    以下政策範例在 <Source> 元素中指定名為 EmployeeID 的變數:

<?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. 如果沒有 type 屬性,系統會將該變數視為字串。
    3. 如果 <Source> 中指定的變數類型不是訊息或字串類型,就是發生錯誤的原因。如要瞭解常見的變數及其類型,請參閱變數參考資料

    例如,我們考慮使用「ExtractVariables」政策從 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>
    

    現在,請記得在 JSONToXML 政策的 <Source> 元素中使用 EmployeeID 變數:

    <Source>EmployeeID</Source>
    

    由於這個變數的類型是 Integer,但屬於無效的 <Source> 類型,因此 API Proxy 會失敗並顯示以下錯誤:

    steps.json2xml.InvalidSourceType
    

解析度

確認用於指定 <Source> 元素的變數類型有效。有效的 <Source> 類型為 messagestring

為避免 JSONToXML 政策發生上述錯誤,您可以使用訊息類型,或是任何其他屬於有效 JSON 酬載的字串要求變數。