XMLtoJSON 정책

이 페이지는 ApigeeApigee Hybrid에 적용됩니다.

Apigee Edge 문서 보기

정책 아이콘

제목

이 정책은 메시지를 확장 가능한 마크업 언어(XML) 형식에서 JSON(JavaScript Object Notation) 형식으로 변환하여 메시지 변환 방법을 제어할 수 있는 여러 옵션을 제공합니다.

인텐트가 XML 형식의 응답을 JSON 형식의 응답으로 변환한다고 가정하면 정책이 응답 흐름(예: Response / ProxyEndpoint / PostFlow)에 연결됩니다.

이 정책은 표준 정책이며 모든 환경 유형에 배포할 수 있습니다. 모든 사용자가 정책 및 환경 유형에 대해 알아야 할 필요는 없습니다. 정책 유형과 각 환경 유형에서의 가용성에 대한 자세한 내용은 정책 유형을 참조하세요.

정보

일반적인 미디에이션 시나리오에서 인바운드 요청 흐름의 JSON to XML 정책은 종종 아웃바운드 응답 흐름의 XML to JSON 정책과 결합됩니다. 이런 방식으로 정책을 결합하면 기본적으로 XML만 지원하는 서비스에 JSON API를 노출시킬 수 있습니다.

JSON 또는 XML 중 하나를 필요로 할 수 있는 다양한 클라이언트 앱에서 API를 사용하는 시나리오의 경우, JSON to XML 및 XML to JSON 정책이 조건부로 실행되도록 구성하여 응답 형식을 동적으로 설정할 수 있습니다. 이 시나리오의 구현은 흐름 변수 및 조건을 참조하세요.


샘플

JSON 및 XML 간 변환에 대한 자세한 내용은 이 문서를 참조하세요.

응답 변환

<XMLToJSON name="ConvertToJSON">
  <Options>
  </Options>
  <OutputVariable>response</OutputVariable>
  <Source>response</Source>
</XMLToJSON>

이 구성(XML을 JSON으로 변환하는 데 필요한 최소 구성)은 XML 형식의 응답 메시지를 소스로 받은 후 response OutputVariable에 채워진 JSON 형식의 메시지를 만듭니다. Apigee는 자동으로 이 변수의 내용을 다음 처리 단계의 메시지로 사용합니다.


요소 참조

이 정책에 구성할 수 있는 요소와 속성은 다음과 같습니다.

<XMLToJSON async="false" continueOnError="false" enabled="true" name="XML-to-JSON-1">
    <DisplayName>XML to JSON 1</DisplayName>
    <Source>response</Source>
    <OutputVariable>response</OutputVariable>
    <Options>
        <RecognizeNumber>true</RecognizeNumber>
        <RecognizeBoolean>true</RecognizeBoolean>
        <RecognizeNull>true</RecognizeNull>
        <NullValue>NULL</NullValue>
        <NamespaceBlockName>#namespaces</NamespaceBlockName>
        <DefaultNamespaceNodeName>&</DefaultNamespaceNodeName>
        <NamespaceSeparator>***</NamespaceSeparator>
        <TextAlwaysAsProperty>true</TextAlwaysAsProperty>
        <TextNodeName>TEXT</TextNodeName>
        <AttributeBlockName>FOO_BLOCK</AttributeBlockName>
        <AttributePrefix>BAR_</AttributePrefix>
        <OutputPrefix>PREFIX_</OutputPrefix>
        <OutputSuffix>_SUFFIX</OutputSuffix>
        <StripLevels>2</StripLevels>
        <TreatAsArray>
            <Path unwrap="true">teachers/teacher/studentnames/name</Path>
        </TreatAsArray>
    </Options>
    <!-- Use Options or Format, not both -->
    <Format>yahoo</Format>
</XMLToJSON>

<XMLtoJSON> 속성

<XMLtoJSON async="false" continueOnError="false" enabled="true" name="XML-to-JSON-1">

다음 표는 모든 정책 상위 요소의 공통 속성에 대해 설명합니다.

속성 설명 기본값 현재 상태
name

정책의 내부 이름입니다. name 속성의 값에는 문자, 숫자, 공백, 하이픈, 밑줄, 마침표가 포함될 수 있습니다. 이 값은 255자(영문 기준)를 초과할 수 없습니다.

원하는 경우 <DisplayName> 요소를 사용하여 관리 UI 프록시 편집기의 정책에 다른 자연어 이름을 사용하여 정책에 라벨을 지정합니다.

해당 없음 필수
continueOnError

정책이 실패할 경우 오류가 반환되도록 하려면 false로 설정합니다. 이는 대부분의 정책에서 예상되는 동작입니다.

정책이 실패해도 흐름 실행이 계속되도록 하려면 true로 설정합니다. 관련 주제에 대한 추가 정보

false 선택사항
enabled

정책을 시행하려면 true로 설정합니다.

정책을 중지하려면 false로 설정합니다. 정책이 흐름에 연결되어 있어도 정책이 시행되지 않습니다.

선택사항
async

이 속성은 지원이 중단되었습니다.

false 지원 중단됨

<DisplayName> 요소

name 속성 외에도 이 요소를 사용하여 관리 UI 프록시 편집기의 정책에 다른 자연어 이름으로 라벨을 지정합니다.

<DisplayName>Policy Display Name</DisplayName>
기본값

해당 없음

이 요소를 생략하면 정책 name 속성 값이 사용됩니다.

현재 상태 선택사항
유형 문자열

<Source> 요소

JSON으로 변환할 XML 메시지를 지정하는 변수입니다.

소스 메시지의 HTTP 콘텐츠 유형 헤더는 application/xml로 설정해야 합니다. 그렇지 않으면 정책이 시행되지 않습니다.

<Source>가 정의되어 있지 않으면 정책이 요청 흐름에 연결될 때 request로 확인하거나 정책이 응답 흐름에 연결될 때 response로 확인하는 message로 취급됩니다.

소스 변수를 확인할 수 없거나 메시지 유형이 아닌 것으로 확인될 경우 정책에 오류가 발생합니다.

<Source>response</Source>
기본 Source 요소의 값
접속 상태 선택사항
유형 메시지

<OutputVariable> 요소

XML to JSON 형식 변환의 출력을 저장할 위치를 지정합니다. 일반적으로 이 요소는 정책 구성에 포함되지 않습니다.

Apigee는 Source에 지정된 XML 메시지의 페이로드를 파싱하고, JSON으로 변환하고, 결과를 OutputVariable 페이로드에 저장하고, OutputVariable 메시지의 HTTP 콘텐츠 유형 헤더를 application/json으로 설정합니다.

OutputVariable을 지정하지 않으면 기본적으로 Source 값이 사용됩니다. 예를 들어 sourceresponse인 경우 OutputVariable의 기본값은 response입니다.

<OutputVariable>response</OutputVariable>
기본 Source에 지정된 메시지
접속 상태 선택사항
유형 메시지

<Options>

옵션을 사용하면 XML to JSON 변환을 제어할 수 있습니다. 특정 전환 설정을 추가할 수 있는 <Options> 그룹 또는 사전 정의된 옵션의 템플릿을 참조할 수 있는 <Format> 요소를 사용합니다. <Options><Format>을 둘 다 사용할 수는 없습니다.

<Format>을 사용하지 않는 경우 <Options>이 필요합니다.

<RecognizeNumber> 요소

true이면 XML 페이로드의 숫자 필드가 원래 형식을 유지합니다.

<RecognizeNumber>true</RecognizeNumber>

다음 XML 예시를 살펴보세요.

<a>
  <b>100</b>
  <c>value</c>
</a>

RecognizeNumbertrue이면 정책은 다음과 같이 변환합니다.

{
    "a": {
        "b": 100,
        "c": "value"
    }
}

RecognizeNumberfalse이면 정책은 다음과 같이 변환합니다.

{
  "a": {
    "b": "100",
    "c": "value"
  }
}
기본 false
현재 상태 선택사항
유형 불리언

<RecognizeBoolean> 요소

값을 문자열로 변환하지 않고 변환이 부울의 true/false 값을 유지하도록 합니다.

<RecognizeBoolean>true</RecognizeBoolean>

다음 XML 예시를 참조하세요.

<a>
  <b>true</b>
  <c>value</c>
</a>

RecognizeBooleantrue이면 정책은 다음과 같이 변환합니다.

{
    "a": {
        "b": true,
        "c": "value"
    }
}

RecognizeBooleanfalse이면 정책은 다음과 같이 변환합니다.

{
    "a": {
        "b": "true",
        "c": "value"
    }
}
기본 false
현재 상태 선택사항
유형 불리언

<RecognizeNull> 요소

빈 값을 null 값으로 변환할 수 있습니다.

<RecognizeNull>true</RecognizeNull>

다음 XML의 경우:

<a>
  <b></b>
  <c>value</c>
</a>

RecognizeNulltrue이고 NullValue 옵션이 없으면 이 XML은 다음과 같이 변환됩니다.

{
  "a": {
    "b": null,
    "c": "value"
  }
}

RecognizeNullfalse이면 이 XML은 다음과 같이 변환됩니다.

{
  "a": {
    "b": {},
    "c": "value"
  }
}
기본 false
현재 상태 선택사항
유형 불리언

<NullValue> 요소

소스 메시지에서 인식된 null 값이 변환되어야 하는 값을 나타냅니다. 기본값은 null입니다. 이 옵션은 RecognizeNull이 true인 경우에만 적용됩니다.

<NullValue>not-present</NullValue>

다음 XML의 경우:

<a>
  <b></b>
  <c>value</c>
</a>

RecognizeNulltrue이고 NullValue가 지정되지 않은 경우 이 XML은 다음으로 변환됩니다.

{
  "a": {
    "b": null,
    "c": "value"
  }
}

RecognizeNulltrue이고 NullValuenot-present이면 이 XML은 다음과 같이 변환됩니다.

{
  "a": {
    "b": "not-present",
    "c": "value"
  }
}
기본 null
현재 상태 선택사항
유형 문자열

네임스페이스 옵션

기본적으로 이 정책은 생성된 JSON에서 XML 네임스페이스를 생략합니다. XML 문서의 네임스페이스를 생성된 JSON으로 변환하도록 지정하려면 다음 요소를 함께 사용하세요.

<NamespaceBlockName>#namespaces</NamespaceBlockName>
<DefaultNamespaceNodeName>&</DefaultNamespaceNodeName>
<NamespaceSeparator>***</NamespaceSeparator>

다음 XML 예시를 살펴보세요.

<a xmlns="http://ns.com" xmlns:ns1="http://ns1.com">
  <ns1:b>value</ns1:b>
</a>

NamespaceSeparator가 지정되지 않으면 다음 JSON 구조가 생성됩니다.

{
    "a": {
        "b": "value"
    }
}

NamespaceBlockName, DefaultNamespaceNodeName, NamespaceSeparator 요소가 각각 #namespaces, &, ***로 지정되면 다음 JSON 구조가 생성됩니다.

{
    "a": {
        "#namespaces": {
            "&": "http://ns.com",
            "ns1": "http://ns1.com"
        },
        "ns1***b": "value"
    }
}
기본 없음 <NamespaceBlockName>을 지정하지 않으면 정책에서 소스 메시지가 네임스페이스를 참조했는지 여부와 관계없이 XML 네임스페이스를 참조하지 않는 출력 JSON을 생성합니다.
접속 상태 선택사항
하지만 <NamespaceBlockName>을 지정하는 경우 다른 두 요소도 지정해야 합니다.
유형 문자열

텍스트 옵션

다음 요소를 함께 사용하세요.

      <TextAlwaysAsProperty>true|false</TextAlwaysAsProperty>
      <TextNodeName>TEXT</TextNodeName>

정책이 단일 텍스트 노드만 하위 요소로 포함하는 XML 요소를 발견하면 정책이 해당 XML 요소의 텍스트 콘텐츠를 JSON 해시의 속성으로 변환합니다.

정책이 혼합 콘텐츠의 여러 하위 요소를 포함하는 XML 요소를 발견하면 하위 텍스트 노드의 출력 JSON을 제어할 수 있습니다.

예를 들어 다음 정책 구성을 고려하세요.

<XMLToJSON name='XMLToJSON-1'>
  <Options>
    <TextAlwaysAsProperty>???</TextAlwaysAsProperty>
    <TextNodeName>#text</TextNodeName>
  </Options>
</XMLToJSON>

지정된 XML 입력의 경우 정책은 TextAlwaysAsPropertytrue인지 또는 false인지에 따라 다음 출력을 생성합니다.

XML 입력 JSON 출력
TextAlwaysAsPropertyfalse인 경우 TextAlwaysAsPropertytrue인 경우

<a>value1</a>


{
  "a": "value1"
}

{
  "a": {
    "#text": "value1"
  }
}

<a>value1
  <b>value2</b>
</a>

{
  "a": {
    "#text": "value1\n",
    "b": "value2"
  }
}

{
  "a": {
    "#text": "value1\n",
    "b": {
      "#text": "value2"
    }
  }
}
기본 <TextAlwaysAsProperty>: false
<TextNodeName>: (빈 문자열)
접속 상태 선택사항
유형 <TextAlwaysAsProperty>: 부울
<TextNodeName>: 문자열

속성 옵션

이러한 요소를 함께 사용하면 속성 값을 JSON 블록으로 그룹화하고 속성 이름에 프리픽스를 추가할 수 있습니다.

<AttributeBlockName>FOO_BLOCK</AttributeBlockName>
<AttributePrefix>BAR_</AttributePrefix>

다음 XML 예시를 살펴보세요.

<a attrib1="value1" attrib2="value2"/>

속성(AttributeBlockNameAttributePrefix)이 XML to JSON 예시에서 정의된 것처럼 지정된 경우 다음과 같은 JSON 구조가 생성됩니다.

{
  "a": {
    "FOO_BLOCK": {
      "BAR_attrib1": "value1",
      "BAR_attrib2": "value2"
    }
  }
}

AttributeBlockName만 지정되면 다음 JSON 구조가 생성됩니다.

{
    "a": {
        "FOO_BLOCK": {
            "attrib1": "value1",
            "attrib2": "value2"
        }
    }
}

AttributePrefix만 지정되면 다음 JSON 구조가 생성됩니다.

{
    "a": {
        "BAR_attrib1": "value1",
        "BAR_attrib2": "value2"
    }
}

모두 지정하지 않으면 다음 JSON 구조가 생성됩니다.

{
    "a": {
        "attrib1": "value1",
        "attrib2": "value2"
    }
}
기본 없음
접속 상태 선택사항
유형 문자열

<OutputPrefix> 및 <OutputSuffix> 요소

이러한 요소를 함께 사용하여 생성된 JSON에 프리픽스 또는 서픽스를 적용합니다.

<OutputPrefix>PREFIX_</OutputPrefix>
<OutputSuffix>_SUFFIX</OutputSuffix>

다음 XML 예시를 살펴보세요.

<a>value</a>

정책 구성이 다음과 같다고 가정해 보겠습니다.

<XMLToJSON name='XMLToJSON-4'>
  <Options>
    <OutputPrefix>{ "result": </OutputPrefix>
    <OutputSuffix>}</OutputSuffix>
  </Options>
</XMLToJSON>

다음과 같은 JSON 구조가 생성됩니다.

{
  "result": {
    "a": "value"
  }
}

OutputPrefixOutputSuffix 중 하나를 생략하거나 둘 다 생략할 수 있습니다.

이러한 요소를 사용하여 잘못된 JSON을 생성할 수 있습니다. 예를 들어 이 정책 구성을 사용하는 경우:

<XMLToJSON name='XMLToJSON-4'>
  <Options>
    <OutputPrefix>PREFIX_</OutputPrefix>
  </Options>
</XMLToJSON>

이 정책은 유효한 JSON이 아닌 다음을 생성합니다.

PREFIX_{
  "a" : "value"
}

구성에서 OutputPrefix 또는 OutputSuffix를 지정하지 않으면 정책이 다음 JSON 구조를 생성합니다.

{
  "a": "value"
}
기본 위의 샘플을 참조하세요.
접속 상태 선택사항
유형 문자열

<StripLevels> 요소

<Options>
    <StripLevels>4</StripLevels>
</Options>

때로는 SOAP와 같은 XML 페이로드에 변환된 JSON에 포함하지 않을 상위 단계가 여러 개 있을 수 있습니다. 다음은 여러 단계를 포함하는 SOAP 응답의 예시입니다.

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/Schemata-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <soap:Body>
      <GetCityWeatherByZIPResponse xmlns="http://ws.cdyne.com/WeatherWS/">
          <GetCityWeatherByZIPResult>
              <State>CO</State>
              <City>Denver</City>
              <Description>Sunny</Description>
              <Temperature>62</Temperature>
          </GetCityWeatherByZIPResult>
      </GetCityWeatherByZIPResponse>
  </soap:Body>
</soap:Envelope>

주, 도시, 설명, 온도까지 4단계가 있습니다. <StripLevels>를 사용하지 않을 경우 JSON 응답이 다음과 같이 변환됩니다.

{
   "Envelope" : {
      "Body" : {
         "GetCityWeatherByZIPResponse" : {
            "GetCityWeatherByZIPResult" : {
               "State" : "CO",
               "City" : "Denver",
               "Description" : "Sunny",
               "Temperature" : "62"
            }
         }
      }
   }
}

JSON 응답에서 처음 4단계를 제거하려면 <StripLevels>4</StripLevels>를 설정합니다. 그러면 다음과 같은 JSON이 제공됩니다.

{
  "State" : "CO",
  "City" : "Denver",
  "Description" : "Sunny",
  "Temperature" : "62"
}

하위 요소가 여러 개 포함된 첫 번째 요소까지 단계를 제거할 수 있습니다. 무엇을 뜻하나요? 좀 더 복잡한 JSON 예시를 살펴보겠습니다.

{
   "Envelope" : {
      "Body" : {
         "GetCityForecastByZIPResponse" : {
            "GetCityForecastByZIPResult" : {
               "ResponseText" : "City Found",
               "ForecastResult" : {
                  "Forecast" : [
                     {
                        "ProbabilityOfPrecipiation" : {
                           "Nighttime" : "00",
                           "Daytime" : 10
                        }  ...

이 예시의 3단계는 하나의 하위 항목만 있는 GetCityForecastByZIPResponse입니다. <StripLevels>3</StripLevels>(처음 3개 단계를 삭제)를 사용하면 JSON은 다음과 같이 표시됩니다.

{
   "GetCityForecastByZIPResult" : {
      "ResponseText" : "City Found",
      "ForecastResult" : {
         "Forecast" : [
            {
               "ProbabilityOfPrecipiation" : {
                  "Nighttime" : "00",
                  "Daytime" : 10
               }  ...

GetCityForecastByZIPResult에는 여러 하위 요소가 있습니다. 이 요소는 여러 하위 요소를 포함하는 첫 번째 요소이므로 <StripLevels>4</StripLevels>를 사용하여 마지막 단계를 제거할 수 있습니다. 그러면 다음과 같은 JSON이 생성됩니다.

{
   "ResponseText" : "City Found",
   "ForecastResult" : {
      "Forecast" : [
         {
            "ProbabilityOfPrecipiation" : {
               "Nighttime" : "00",
               "Daytime" : 10
            }  ...

4단계는 여러 하위 요소를 포함하는 첫 번째 단계이므로 이보다 낮은 단계 제거할 수 없습니다. 스트립 단계를 5, 6, 7 등으로 설정하면 위의 응답이 계속 표시됩니다.

기본 0(단계 제거 없음)
접속 상태 선택사항
유형 정수

<TreatAsArray>/<Path> 요소

<Options>
    <TreatAsArray>
        <Path unwrap="true">teachers/teacher/studentnames/name</Path>
    </TreatAsArray>
</Options>

이 요소 조합을 사용하면 XML 문서의 값이 항상 JSON 배열로 변환되도록 할 수 있습니다. 이는 페이로드에 따라 하위 요소의 수가 다른 경우에 유용합니다. Apigee의 기본 동작은 이름이 같은 여러 하위 요소를 JSON 배열로, 단일 하위 요소를 JSON 기본 요소로 변환하는 것입니다. TreatAsArray 옵션을 사용하면 하위 요소가 항상 JSON 배열로 변환되도록 할 수 있습니다.

TreatAsArray를 사용하면 배열의 데이터가 매번 같은 방식으로 반환되므로 출력을 처리하는 후속 코드의 구조를 개선할 수 있습니다. 예를 들어 $.teachers.teacher.studentnames.name[0]의 JSONPath를 평가하면 원본 XML에 하나 또는 둘 이상의 name 요소가 포함되어 있는지 여부에 관계없이 항상 첫 번째 이름 값이 반환됩니다.

한 발 물러서서 XML to JSON의 기본 동작을 살펴보고 <TreatAsArray>/<Path>를 사용하여 출력을 제어하는 방법을 살펴보겠습니다.

XML 문서에 발생 횟수가 여러 개인 요소가 포함된 경우(XML 스키마가 요소에 maxOccurs='unbounded'를 지정할 때 발생할 수 있음) XML to JSON 정책은 이러한 값을 배열에 자동으로 배치합니다. 예를 들어 다음 XML 블록의 경우

<teacher>
    <name>teacherA</name>
    <studentnames>
        <name>student1</name>
        <name>student2</name>
    </studentnames>
</teacher>

특별한 정책 구성 없이도 자동으로 다음 JSON으로 변환됩니다.

{
  "teachers" : {
    "teacher" : {
      "name" : "teacherA",
      "studentnames" : {
        "name" : [
          "student1",
          "student2"
        ]
      }
    }
  }
}

두 학생 이름이 배열에 포함된 것을 알 수 있습니다.

그러나 XML 문서에 학생 한 명만 표시되면 다음 예시에서 보여주듯이 XML to JSON 정책은 자동으로 값을 문자열의 배열이 아닌 단일 문자열로 취급합니다.

{
  "teachers" : {
    "teacher" : {
      "name" : "teacherA",
      "studentnames" : {
        "name" : "student1"
      }
    }
  }
}

앞의 예시에서는 유사한 데이터가 하나는 배열로, 다른 하나는 단일 문자열로 다르게 변환되었습니다. <TreatAsArray>/<Path> 요소를 사용하면 값이 하나만 있는 경우에도 학생 이름이 항상 배열로 변환되도록 출력을 제어할 수 있습니다. 다음과 같이 값을 배열로 변환하려는 요소의 경로를 식별하여 이를 구성합니다.

<Options>
    <TreatAsArray>
        <Path>teachers/teacher/studentnames/name</Path>
    </TreatAsArray>
</Options>

위 구성은 JSON을 다음과 같이 생성합니다.

{
  "teachers" : {
    "teacher" : {
      "name" : "teacherA",
      "studentnames" : {
        "name" : ["student1"]
      }
    }
  }
}

이제 student1은 배열에 놓인 상태입니다. 이제 학생이 한 명인지 다수인지에 상관없이 다음 JSONPath를 사용하여 코드의 JSON 배열에서 학생을 검색할 수 있습니다. $.teachers.teacher.studentnames.name[0]

<Path> 요소에는 다음 섹션에서 설명하는 unwrap 속성도 있습니다.

기본 해당 없음
현재 상태 선택사항
유형 문자열

속성

 <Options>
    <TreatAsArray>
        <Path unwrap="true">teachers/teacher/studentnames/name</Path>
    </TreatAsArray>
</Options>
속성 설명 Presence 유형
래핑 취소

기본값: false

JSON 출력에서 요소를 제거합니다. 이를 사용하여 JSON을 간소화하거나 평면화('래핑 취소')하면 값을 검색하는 데 필요한 JSONPath가 단축됩니다. 예를 들어 $.teachers.teacher.studentnames.name[*] 대신 JSON을 평면화하고 $.teachers.studentnames[*]를 사용할 수 있습니다.

다음은 JSON 예시입니다.


{
  "teachers" : {
      "teacher" : {
          "name" : "teacherA",
          "studentnames" : {
              "name" : [
                 "student1",
                 "student2"
              ]}...

이 예시에서는 teacher 요소 및 studentnames name 요소가 필요하지 않다고 가정해 보겠습니다. 따라서 객체를 삭제하거나 래핑 취소할 수 있습니다. 다음은 이를 위해 <Path> 요소를 구성하는 방법입니다.


<TreatAsArray>
    <Path unwrap="true">teachers/teacher</Path>
    <Path unwrap="true">teachers/teacher/studentnames/name</Path>
</TreatAsArray>

unwrap 속성이 true로 설정되고 래핑 취소할 요소의 경로가 제공됩니다. 이제 JSON 출력은 다음과 같습니다.


{
  "teachers" : [{
      "name" : "teacherA",
      "studentnames" : ["student1","student2"]
      }]...

<Path> 요소는 <TreatAsArray> 요소에 있으므로 경로의 두 요소 모두 JSON 출력의 배열로 처리됩니다.

선택사항 불리언

더 많은 예시와 기능 둘러보기는 이 Google Cloud 커뮤니티 문서를 참조하세요.

<Format>

형식을 사용하면 XML에서 JSON으로의 변환을 제어할 수 있습니다. 이 주제에서 설명하는 옵션 요소의 특정 조합을 포함하는 사전 정의된 템플릿의 이름을 입력합니다. 사전 정의된 형식은 xml.com, yahoo, google, badgerFish입니다.

<Format> 요소 또는 <Options> 그룹을 사용하세요. <Format><Options>를 둘 다 사용할 수는 없습니다.

다음은 사전 정의된 각 템플릿의 Format 정의입니다.

xml.com

<RecognizeNull>true</RecognizeNull>
<TextNodeName>#text</TextNodeName>
<AttributePrefix>@</AttributePrefix>

yahoo

<RecognizeNumber>true</RecognizeNumber>
<TextNodeName>content</TextNodeName>

google

<TextNodeName>$t</TextNodeName>
<NamespaceSeparator>$</NamespaceSeparator>
<TextAlwaysAsProperty>true</TextAlwaysAsProperty>

badgerFish

<TextNodeName>$</TextNodeName>
<TextAlwaysAsProperty>true</TextAlwaysAsProperty>
<AttributePrefix>@</AttributePrefix>
<NamespaceSeparator>:</NamespaceSeparator>
<NamespaceBlockName>@xmlns</NamespaceBlockName>
<DefaultNamespaceNodeName>$</DefaultNamespaceNodeName>

요소 구문:

<Format>yahoo</Format>
기본 (없음)
유효한 값 다음 중 하나입니다.
xml.com, yahoo, google, badgerFish
접속 상태 선택사항이지만 <Options>를 사용하지 않는 경우 필수입니다.
유형 문자열

스키마


오류 참조

이 섹션에서는 반환되는 오류 코드 및 오류 메시지와 이 정책이 오류를 트리거할 때 Apigee에서 설정한 오류 변수를 설명합니다. 오류를 처리하기 위해 오류 규칙을 개발 중인 경우, 이 정보는 중요합니다. 자세한 내용은 정책 오류에 대해 알아야 할 사항오류 처리를 참조하세요.

런타임 오류

이러한 오류는 정책이 실행될 때 발생할 수 있습니다.

오류 코드 HTTP 상태 원인 해결
steps.xmltojson.ExecutionFailed ExecutionFailed 이 오류는 입력 페이로드(XML)가 비어 있거나 입력 XML이 무효 또는 잘못된 경우에 발생합니다.
steps.xmltojson.InCompatibleTypes ExecutionFailed 이 오류는 <Source> 요소 및 <OutputVariable> 요소에 정의된 변수 유형이 동일하지 않을 때 발생합니다. <Source> 요소 및 <OutputVariable> 요소 내에 포함된 변수는 유형이 일치해야 합니다.
steps.xmltojson.InvalidSourceType ExecutionFailed 이 오류는 <Source> 요소를 정의하기 위해 사용되는 변수 유형이 무효인 경우에 발생합니다. 유효한 변수 유형은 메시지 및 문자열입니다.
steps.xmltojson.OutputVariableIsNotAvailable ExecutionFailed 이 오류는 XML to JSON 정책의 <Source> 요소에 지정된 변수가 문자열 유형이고 <OutputVariable> 요소가 정의되지 않은 경우에 발생합니다. <Source> 요소에 정의된 변수가 문자열 유형인 경우 <OutputVariable> 요소는 필수입니다.
steps.xmltojson.SourceUnavailable ExecutionFailed 이 오류는 XML to JSON 정책의 <Source> 요소에 지정된 메시지 변수가 다음 중 하나일 때 발생합니다.
  • 범위를 벗어난 경우(정책이 실행 중인 특정 흐름에서 사용할 수 없음)
  • 확인할 수 없는 경우(정의되지 않음)

배포 오류

이 오류는 이 정책이 포함된 프록시를 배포할 때 발생할 수 있습니다.

오류 이름 원인 해결
EitherOptionOrFormat <Options> 또는 <Format> 요소 중 하나가 XML to JSON 정책에 선언되지 않으면 API 프록시 배포에 실패합니다.
UnknownFormat XML to JSON 정책의 <Format> 요소에 알 수 없는 형식이 정의되어 있으면 API 프록시 배포에 실패합니다. 사전 정의된 형식에는 xml.com, yahoo, google, badgerFish가 있습니다.

오류 변수

이러한 변수는 런타임 오류가 발생하면 설정됩니다. 자세한 내용은 정책 오류에 대해 알아야 할 사항을 참조하세요.

변수 각 항목의 의미는 다음과 같습니다. 예시
fault.name="fault_name" fault_name은 위의 런타임 오류 표에 나열된 오류 이름입니다. 오류 이름은 오류 코드의 마지막 부분입니다. fault.name = "SourceUnavailable"
xmltojson.policy_name.failed policy_name은 오류를 발생시킨 정책의 사용자 지정 이름입니다. xmltojson.XMLtoJSON-1.failed = true

오류 응답 예시

{
  "fault": {
    "faultstring": "XMLToJSON[XMLtoJSON-1]: Source xyz is not available",
    "detail": {
      "errorcode": "steps.xml2json.SourceUnavailable"
    }
  }
}

오류 규칙 예시

<faultrule name="VariableOfNonMsgType"></faultrule><FaultRule name="XML to JSON Faults">
    <Step>
        <Name>AM-SourceUnavailableMessage</Name>
        <Condition>(fault.name Matches "SourceUnavailable") </Condition>
    </Step>
    <Step>
        <Name>AM-BadXML</Name>
        <Condition>(fault.name = "ExecutionFailed")</Condition>
    </Step>
    <Condition>(xmltojson.XMLtoJSON-1.failed = true) </Condition>
</FaultRule>

관련 주제

JSON to XML: JSONtoXML 정책