JSON to XML 정책 런타임 오류 문제 해결

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

원인

이 오류는 JSON-XML 정책의 <Source> 요소에 지정된 메시지 변수가 다음 중 하나인 경우 발생합니다.

  • 범위를 벗어난 경우(정책이 실행 중인 특정 흐름에서 사용할 수 없음)
  • 확인할 수 없는 경우(정의되지 않음)

예를 들어 JSON to XML 정책이 요청 흐름에서 실행되어야 하지만, <Source> 요소가 요청 흐름에 존재하지 않는 response 변수로 설정된 경우에 이 오류가 발생합니다.

진단

  1. 오류가 발생한 JSON to XML 정책 및 사용할 수 없는 변수의 이름을 식별합니다. 두 항목은 모두 오류 응답의 faultstring 요소에서 찾을 수 있습니다. 예를 들어 다음 faultstring에서 정책 이름은 Convert-JSONToXML이고 변수는 response입니다.

    "faultstring": "JSONToXML[Convert-JSONToXML]: Source response is not available"
    
  2. 실패한 JSON to XML 정책 XML에서 <Source> 요소에 설정된 변수 이름이 위 1단계의 오류 문자열에서 식별된 변수 이름과 일치하는지 확인합니다. 예를 들어 다음 JSON to XML 정책은 <Source> 요소에 faultstring에 있는 것과 일치하는 response라는 변수를 지정합니다.

    <?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 to XML 정책이 실행되는 흐름에서 정의되었고 사용 가능한지 확인합니다.

  4. 변수가 다음 중 하나인 경우

    • 범위를 벗어난 경우(정책이 실행 중인 특정 흐름에서 사용할 수 없음)
    • 확인할 수 없는 경우(정의되지 않음)

    이는 오류의 원인이 됩니다.

    예를 들어 위에 표시된 JSON to XML 정책이 요청 흐름으로 실행된다고 가정해보세요. response 변수는 JSON에서 XML 정책의 <Source> 요소에 사용됩니다. 응답 변수는 응답 흐름에서만 사용할 수 있습니다.

    response 변수가 요청 흐름에 존재하지 않으므로 오류 코드가 수신됩니다.

    steps.json2xml.SourceUnavailable
    

해결 방법

실패한 JSON to XML 정책의 <Source> 요소에 설정된 변수가 정의되었고 정책이 실행되는 흐름에 존재하는지 확인합니다.

위의 JSON to 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에 XML로 전달된 입력(JSON)이 잘못되었거나 형식이 잘못되었습니다.

원인: 입력 페이로드 누락

<Source> 요소에 지정된 변수의 콘텐츠(페이로드)가 비어 있으면 JSON to XML 정책에서 이 오류가 발생합니다.

예를 들어 JSON-XML 정책에서 <Source> 요소가 request 또는 response 변수로 설정되었고 JSON 페이로드가 포함되어야 하지만 페이로드가 비어 있으면 오류가 발생합니다.

진단

  1. 오류가 발생한 JSON to XML 정책을 식별합니다. 이 정보는 오류 응답의 faultstring 요소에서 확인할 수 있습니다. 예를 들어 다음 faultstring에서 정책 이름은 Convert-JSONToXML입니다.

    "faultstring": "JSONToXML[Convert-JSONToXML]: Execution failed due to reason: Expecting { or [ at line 1"
    
  2. 실패한 JSON to XML 정책 XML에서 <Source> 요소를 검사하여 지정된 변수를 확인합니다. 예를 들어 다음 JSON to 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 to XML 정책 예시에서는 클라이언트에서 전송한 요청 페이로드(즉, 요청 본문)가 비어 있습니다.

    예를 들면 다음과 같습니다.

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

    여기서 your_host_alias는 재정의 파일의 virtualhosts.hostAliases 속성에 구성된 대로 API에 액세스하는 데 사용되는 공개 도메인입니다. 구성 재정의 지정을 참조하세요.

    JSON 응답 페이로드가 비어 있으므로 오류 코드가 표시됩니다.

    steps.json2xml.ExecutionFailed
    

    이 오류는 <Source> 요소가 응답으로 설정되었지만 백엔드 서버에서 빈 페이로드가 전달되었을 때에도 발생할 수 있습니다.

해결 방법

<Source> 요소의 JSON to XML 정책에 전달된 입력이 올바른 JSON 페이로드이며 비어있지 않은지 확인합니다.

샘플 JSON to XML 정책의 문제를 해결하려면 유효한 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는 재정의 파일의 virtualhosts.hostAliases 속성에 구성된 대로 API에 액세스하는 데 사용되는 공개 도메인입니다. 구성 재정의 지정을 참조하세요.

원인: 입력이 잘못되었거나 형식이 잘못됨

JSON to XML 정책이 무효하거나 형식이 잘못된 입력을 파싱하면 이 오류가 발생합니다.

예를 들어 JSON to XML 정책에 다음의 잘못된 JSON을 입력하여 제공하는 경우,

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

다음 오류가 발생합니다.

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

진단

  1. 오류가 발생한 JSON to XML 정책을 식별합니다. 이 정보는 오류 응답의 faultstring 요소에서 확인할 수 있습니다. 예를 들어 다음 faultstring에서 정책 이름은 Convert-JSONToXML입니다.

    "faultstring": "JSONToXML[Convert-JSONToXML]: Execution failed due to reason: Expecting { or [ at line 1"
    
  2. JSON to XML 정책 XML에 지정된 <Source> 요소를 검사합니다. 예를 들어 다음 JSON to 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://your_host_alias/v1/testjsontoxml" -H "Content-Type:
    application/json" -X POST -d '[ "args" : ["name" : "Google" ]]'
    

    여기서 your_host_alias는 재정의 파일의 virtualhosts.hostAliases 속성에 구성된 대로 API에 액세스하는 데 사용되는 공개 도메인입니다. 구성 재정의 지정을 참조하세요.

    JSON 객체는 대괄호([ ])로 시작되고 끝나기 때문에 요청에서 전달된 JSON 페이로드는 유효하지 않습니다. 이런 이유로 다음과 같은 오류 코드가 표시됩니다.

    steps.json2xml.ExecutionFailed

    이 오류는 <Source> 요소가 응답으로 설정되었지만 JSON 응답 페이로드가 잘못되었거나 형식이 잘못된 경우에도 발생할 수 있습니다.

해결 방법

<Source> 요소의 JSON to 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"
        }
    }
}

원인

이 오류는 <Source> JSON to XML 정책의 요소에 지정된 변수가 문자열 유형이고 <OutputVariable> 요소가 정의되지 않은 경우에 발생합니다. <Source> 요소에 정의된 변수가 문자열 유형인 경우 <OutputVariable> 요소는 필수입니다.

진단

  1. 오류가 발생한 JSON to XML 정책을 식별합니다. 오류 응답의 faultstring 요소에서 확인할 수 있습니다. 예를 들어 다음 faultstring에서 정책 이름은 Check-JSONToXML입니다.

    "faultstring": "JSONToXML[Check-JSONToXML]: Output variable is not available."
    
  2. 실패한 JSON to 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 프록시 내에서 코드를 찾습니다.
    2. 변수가 먼저 정의되고 채워지는 정책을 확인한 후에는 해당 변수 유형을 다음과 같이 확인해야 합니다.
      1. 유형 속성의 값을 확인합니다(있는 경우).
      2. 유형 속성이 없으면 변수가 문자열로 간주됩니다.
    3. 변수 유형이 문자열이면 이것이 오류의 원인이 됩니다. 일반적인 변수 및 유형에 대해서 알아보려면 변수 참조를 확인하세요.

    예를 들어 위 JSON to XML 정책에서 PostalCode 변수를 살펴봅니다.

    예를 들어 아래와 같이 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 변수는 JSONToXML 정책의 <Source> 요소에 사용됩니다.

    <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> 요소 내에 포함된 변수는 유형이 일치해야 합니다.

유효한 message 유형은 string 및 입니다.

진단

  1. 오류가 발생한 JSON to XML 정책을 식별합니다. 오류 응답의 faultstring 요소에서 확인할 수 있습니다. 예를 들어 다음 faultstring에서 정책 이름은 JSONToXML_checktype입니다.

    "faultstring": "JSONToXML[JSONToXML_checktype]: String can not be assigned to message type."
    
  2. 실패한 JSON to 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 프록시 내에서 코드를 찾습니다.
    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 변수는 JSONToXML 정책의 <Source> 요소에 사용됩니다.

    <Source>PostalCode</Source>
    

    마찬가지로 response 변수는 JSONToXML 정책의 <OutputVariable> 요소에 사용됩니다.

    <OutputVariable>response</OutputVariable>
    

    PostalCode는 문자열 유형이고 response 변수는 메시지 유형이므로 서로 호환되지 않은 유형이라서 다음과 같은 오류 코드가 수신됩니다.

    steps.json2xml.InCompatibleTypes
    

    위 오류는 <Source> 요소의 변수가 message 유형이지만 <OutputVariable> 요소의 유형이 문자열 유형인 경우에도 발생할 수 있습니다.

해결 방법

<Source> 요소 및 <OutputVariable> 요소에 정의된 변수 유형이 항상 동일한지 확인하세요. <Source> 요소 및 <OutputVariable> 요소 내에 포함된 변수는 유형이 일치해야 합니다. 즉, <Source> 유형과 <OutputVariable> 요소의 유형이 둘 다 문자열 또는 메시지 유형이어야 합니다.

위에서 설명한 JSON to XML 정책을 수정하려면 메시지 할당 정책을 사용하여 문자열 유형의 다른 PostalCode_output 변수를 선언하고 이 변수를 JSON to XML 정책의 <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 to XML 정책에 사용된 잘못된 소스 유형을 찾아냅니다. 오류 메시지에서 이 정보를 확인할 수 있습니다. 예를 들어 다음 오류에서 잘못된 유형은 정수입니다.

    "faultstring": "JSONToXML[class java.lang.Integer]: Invalid source type class java.lang.Integer. Valid source types are [message, string]."
    
  2. 오류가 발생한 특정 API 프록시의 모든 JSON to XML 정책을 검사합니다. 실패한 JSON to 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 프록시 내에서 코드를 찾습니다.
    2. 변수가 먼저 정의되고 채워지는 정책을 확인한 후에는 해당 변수 유형을 다음과 같이 확인해야 합니다.
      1. 유형 속성의 값을 확인합니다(있는 경우).
      2. 유형 속성이 없으면 변수가 문자열로 간주됩니다.
    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>
    

    EmployeeID 변수는 JSONToXML 정책의 <Source> 요소에 사용됩니다.

    <Source>EmployeeID</Source>
    

    이 변수의 유형이 유효한 <Source> 유형이 아닌 Integer이므로, API 프록시가 오류로 실패합니다.

    steps.json2xml.InvalidSourceType
    

해결 방법

<Source> 요소를 지정하기 위해 사용되는 변수 유형이 유효한지 확인합니다. 유효한 <Source> 유형은 messagestring입니다.

JSONToXML 정책에서 위와 같은 오류를 방지하려면 메시지 유형의 요청 변수나 유효한 JSON 페이로드인 다른 문자열을 사용할 수 있습니다.