JSONtoXML 政策运行时错误问题排查

您正在查看 ApigeeApigee Hybrid 文档。
查看 Apigee Edge 文档。

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

原因

如果 JSONtoXML 政策的 <Source> 元素中指定的消息变量是以下情况之一,则会发生此错误:

  • 超出范围(在执行政策的特定流中不可用)
  • 无法解析(未定义)

例如,如果本应在请求流中执行 JSONtoXML 政策,但将 <Source> 元素设置为 response 变量,而请求流中并不存在该变量,那么就会出现此错误。

诊断

  1. 标识出错的 JSONtoXML 政策以及不可用的变量的名称。您可以在错误响应的 faultstring 元素中找到这两项。例如,在以下 faultstring 中,政策名称为 Convert-JSONToXML,变量为 response

    "faultstring": "JSONToXML[Convert-JSONToXML]: Source response is not available"
    
  2. 在失败的 JSONtoXML 政策 XML 中,验证 <Source> 元素中设置的变量名称是否与错误字符串中标识(上述第 1 步)的变量名称相匹配。例如,以下 JSONtoXML 政策在 <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> 元素中使用的变量是否已定义且可在执行 JSONtoXML 政策的流中使用。

  4. 如果该变量:

    • 超出范围(在执行政策的特定流中不可用)
    • 无法解析(未定义)

    就会导致错误。

    例如,假设上面所示的 JSONtoXML 政策本应在请求流中执行。回想一下,JSONtoXML 政策的 <Source> 元素中使用了 response 变量。响应变量仅在响应流中可用。

    由于请求流中不存在 response 变量,因此会收到错误代码:

    steps.json2xml.SourceUnavailable
    

解决方法

确保在失败 JSONtoXML 政策的 <Source> 元素中设置的变量已定义且位于执行政策的流中。

如需更正上面所示的 JSONtoXML 政策示例,您可以修改 <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) 为空。
输入无效或格式错误 传递给 JSONtoXML 政策的输入 (JSON) 无效或格式错误。

原因:缺少输入载荷

在 JSONtoXML 政策中,如果 <Source> 元素中指定的变量内容(载荷)为空,则会发生此错误。

例如,如果 JSONtoXML 政策中的 <Source> 元素设置为 requestresponse 变量,并且这些元素本应包含 JSON 载荷,但如果载荷为空,则会发生错误。

诊断

  1. 标识出错的 JSONtoXML 政策。您可以在错误响应的 faultstring 元素中找到此信息。例如,在以下 faultstring 中,政策名称为 Convert-JSONToXML

    "faultstring": "JSONToXML[Convert-JSONToXML]: Execution failed due to reason: Expecting { or [ at line 1"
    
  2. 在失败的 JSONtoXML 政策 XML 中检查 <Source> 元素并确定指定的变量。例如,以下 JSONtoXML 政策的 <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> 元素的变量是否为空。如果为空,则会导致错误。

    在上面所示的 JSONtoXML 政策示例中,客户端发送的请求载荷(即请求正文)为空。

    例如:

    curl -v "http://your_host_alias/v1/testjsontoxml" -H "Content-Type: application/json"
    

    其中 your_host_alias 是用于访问您的 API 的公共域名,如替换文件中的 virtualhosts.hostAliases 属性中所配置。 请参阅指定配置替换

    由于 JSON 响应载荷为空,您将收到错误代码:

    steps.json2xml.ExecutionFailed
    

    如果 <Source> 元素设为响应,但后端服务器传递的载荷为空,则可能会发生此错误。

解决方法

确保传递给 <Source> 元素中 JSONtoXML 政策的输入是有效的 JSON 载荷且不为空。

如需解决 JSONtoXML 政策示例的问题,请传递有效的 JSON 载荷。例如:

  1. 创建名为 city.json 且包含以下内容的文件:

    {
      "Name":"Apigee",
      "City":"Bengaluru",
      "Pincode":"560016"
    }
    
  2. 使用 curl 命令进行 API 调用,如下所示:

    curl -v "http://your_host_alias/v1/testxmltojson" -H "Content-Type: application/json" -X POST -d @company.json
    

    其中 your_host_alias 是用于访问您的 API 的公共域名,如替换文件中的 virtualhosts.hostAliases 属性中所配置。 请参阅指定配置替换

原因:输入无效或格式错误

如果 JSONtoXML 政策解析的输入无效或格式错误,您便会收到此错误。

例如,如果将以下无效的 JSON 作为输入提供给 JSONtoXML 政策,

[
    "args": ["name" : "Google" ]
]

您将收到以下错误:

"faultstring": "JSONToXML[Convert-JSONToXML]: Execution failed due to reason: Expecting { or [ at line 1"

诊断

  1. 标识出错的 JSONtoXML 政策。您可以在错误响应的 faultstring 元素中找到此信息。例如,在以下 faultstring 中,政策名称为 Convert-JSONToXML

    "faultstring": "JSONToXML[Convert-JSONToXML]: Execution failed due to reason: Expecting { or [ at line 1"
    
  2. 检查在失败 JSONtoXML 政策的 XML 中指定的 <Source> 元素。例如,以下 JSONtoXML 政策的 <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://your_host_alias/v1/testjsontoxml" -H "Content-Type:
    application/json" -X POST -d '[ "args" : ["name" : "Google" ]]'
    

    其中 your_host_alias 是用于访问您的 API 的公共域名,如替换文件中的 virtualhosts.hostAliases 属性中所配置。 请参阅指定配置替换

    在请求中传递的 JSON 载荷无效,因为 JSON 对象的开头和结尾是方括号 ([ ])。因此,您会收到错误代码:

    steps.json2xml.ExecutionFailed

    如果 <Source> 元素设为响应,但 JSON 响应载荷无效或格式错误,也有可能发生此错误。

解决方法

确保传递给 <Source> 元素中的 JSONtoXML 政策的输入有效且格式无误。

如需解决上述 JSONtoXML 政策示例的问题,请按如下所示传递有效的 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"
        }
    }
}

原因

如果在 JSONtoXML 政策的 <Source> 元素中指定的变量类型为字符串,且未定义 <OutputVariable> 元素,则会发生此错误。如果在 <Source> 元素中定义的变量类型为字符串,则 <OutputVariable> 元素是必需的。

诊断

  1. 标识出错的 JSONtoXML 政策。您可以在错误响应的 faultstring 元素中找到此信息。例如,在以下 faultstring 中,政策名称为 Check-JSONToXML

    "faultstring": "JSONToXML[Check-JSONToXML]: Output variable is not available."
    
  2. 在失败的 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>
        <Source>PostalCode</Source>
    </JSONToXML>
    
  3. 确定 <Source> 元素中指定的变量类型:

    1. 在首次定义变量的 API 代理中找到代码。
    2. 确定首次在其中定义并填充变量的政策后,您需要按以下方式确定该变量的类型:
      1. 检查 type 特性的值(如果存在)。
      2. 如果 type 特性不存在,则变量将被视为字符串。
    3. 如果变量的类型是字符串,则会导致错误。如需了解常见变量及其类型,请参阅变量参考文档

    例如,请查看上述 JSONtoXML 政策中的 PostalCode 变量。

    例如,假设 AssignMessage 政策用于将值分配给名为 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. 标识出错的 JSONtoXML 政策。您可以在错误响应的 faultstring 元素中找到此信息。例如,在以下 faultstring 中,政策名称为 JSONToXML_checktype

    "faultstring": "JSONToXML[JSONToXML_checktype]: String can not be assigned to message type."
    
  2. 在失败的 JSONtoXML 政策中,请注意 <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 代理中找到代码。
    2. 确定首次在其中定义并填充变量的政策后,您需要按以下方式确定该变量的类型:
      1. 检查 type 特性的值(如果存在)。
      2. 如果 type 特性不存在,则变量将被视为字符串。
    3. 如果在 <Source> 中指定的变量类型是字符串,而 <OutputVariable> 的类型是消息,或刚好相反,则会导致错误。如需了解常见变量及其类型,请参阅变量参考文档

    例如,假设 AssignMessage 政策用于将值分配给名为 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> 元素的类型均为字符串或消息。

如需更正上面所示的 JSONtoXML 政策,您可以使用 AssignMessage 政策声明另一个类型为字符串的变量 PostalCode_output,并在 JSONtoXML 政策的 <OutputVariable> 元素中使用此变量。

修改后的 AssignMessage 政策:

<?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. 标识用于 JSONToXML 政策的无效源类型。您可以在错误消息中找到此信息。例如,在以下错误中,无效类型为整数。

    "faultstring": "JSONToXML[class java.lang.Integer]: Invalid source type class java.lang.Integer. Valid source types are [message, string]."
    
  2. 检查失败的特定 API 代理中的所有 JSONtoXML 政策。在失败的 JSONtoXML 政策中,记下 <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 代理中找到代码。
    2. 确定首次在其中定义并填充变量的政策后,您需要按以下方式确定该变量的类型:
      1. 检查 type 特性的值(如果存在)。
      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 代理会失败并显示以下错误:

    steps.json2xml.InvalidSourceType
    

解决方法

确保用于指定 <Source> 元素的变量类型有效。有效的 <Source> 类型为 messagestring

为避免 JSONToXML 政策出现上述错误,您可以使用类型为消息或任何其他字符串(即有效的 JSON 载荷)的请求变量。