Pemecahan masalah error runtime kebijakan JSON ke XML

Anda sedang melihat dokumentasi Apigee dan Apigee Hybrid.
Lihat dokumentasi Apigee Edge.

SourceUnavailable

Kode error

steps.json2xml.SourceUnavailable

Isi respons error

{
    "fault": {
        "faultstring": "JSONToXML[policy_name]: Source [source_variable] is not available",
        "detail": {
            "errorcode": "steps.json2xml.SourceUnavailable"
        }
    }
}

Contoh error

{
    "fault": {
        "faultstring": "JSONToXML[Convert-JSONToXML]: Source response is not available",
        "detail": {
            "errorcode": "steps.json2xml.SourceUnavailable"
        }
    }
}

Penyebab

Error ini terjadi jika variabel message yang ditentukan dalam elemen <Source> dari kebijakan JSON ke XML adalah:

  • Di luar cakupan (tidak tersedia di alur tertentu tempat kebijakan dijalankan) atau
  • Tidak dapat diselesaikan (tidak ditentukan)

Misalnya, error ini terjadi jika kebijakan JSON ke XML seharusnya dijalankan dalam alur permintaan, tetapi elemen <Source> disetel ke variabel response, yang tidak ada di alur permintaan.

Diagnosis

  1. Identifikasi kebijakan JSON ke XML tempat error terjadi dan nama variabel yang tidak tersedia. Anda dapat menemukan kedua item ini dalam elemen faultstring respons error. Misalnya, dalam faultstring berikut, nama kebijakannya adalah Convert-JSONToXML dan variabelnya adalah response:

    "faultstring": "JSONToXML[Convert-JSONToXML]: Source response is not available"
    
  2. Pada XML kebijakan JSON ke XML yang gagal, pastikan nama variabel yang ditetapkan dalam elemen <Source> cocok dengan nama variabel yang diidentifikasi dalam string kesalahan (langkah #1 di atas). Misalnya, kebijakan JSON ke XML berikut menentukan variabel bernama response di elemen <Source>, yang cocok dengan yang ada di 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. Tentukan apakah variabel yang digunakan dalam elemen <Source> telah ditentukan dan tersedia dalam alur tempat kebijakan JSON ke XML dijalankan.

  4. Jika variabelnya:

    • Di luar cakupan (tidak tersedia di alur tertentu tempat kebijakan dijalankan) atau
    • Tidak dapat diselesaikan (tidak ditentukan)

    maka itulah penyebab {i>error<i}.

    Sebagai contoh, misalkan kebijakan JSON ke XML yang ditunjukkan di atas seharusnya dieksekusi dalam alur request. Ingat kembali bahwa variabel response digunakan dalam elemen <Source> dari kebijakan JSON ke XML. Variabel respons hanya tersedia di alur respons.

    Karena variabel response tidak ada dalam alur permintaan, Anda akan menerima kode error:

    steps.json2xml.SourceUnavailable
    

Resolusi

Pastikan variabel yang ditetapkan di elemen <Source> kebijakan JSON ke XML yang gagal ditentukan dan ada dalam flow tempat kebijakan dijalankan.

Untuk memperbaiki contoh kebijakan JSON ke XML yang ditampilkan di atas, Anda dapat mengubah elemen <Source> untuk menggunakan variabel request, karena variabel tersebut ada dalam alur permintaan:

  <?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

Kode error

steps.json2xml.ExecutionFailed

Isi respons error

{
   "fault": {
        "faultstring": "JSONToXML[policy_name]: Execution failed due to reason: Expecting { or [ at line 1",
        "detail": {
            "errorcode": "steps.json2xml.ExecutionFailed"
        }
    }
}

Kemungkinan penyebab

Kemungkinan penyebab error ini adalah:

Penyebab Deskripsi
Payload input tidak ada Payload input (JSON) kosong.
Input Tidak Valid atau Salah Format Input (JSON) yang diteruskan ke kebijakan JSON ke XML tidak valid atau formatnya salah.

Penyebab: Payload input tidak ada

Dalam kebijakan JSON ke XML, jika konten (payload) variabel yang ditentukan dalam elemen <Source> kosong, error ini akan terjadi.

Misalnya, jika elemen <Source> dalam kebijakan JSON ke XML disetel sebagai variabel request atau response dan elemen tersebut seharusnya berisi payload JSON, tetapi jika payload kosong, error akan terjadi.

Diagnosis

  1. Identifikasi kebijakan JSON ke XML tempat error terjadi. Anda dapat menemukan informasi ini dalam elemen faultstring respons error. Misalnya, dalam faultstring berikut, nama kebijakan adalah Convert-JSONToXML:

    "faultstring": "JSONToXML[Convert-JSONToXML]: Execution failed due to reason: Expecting { or [ at line 1"
    
  2. Periksa elemen <Source> dalam JSON yang gagal ke XML kebijakan XML dan tentukan variabel yang ditentukan. Misalnya, kebijakan JSON ke XML berikut memiliki elemen <Source> yang disetel ke 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. Periksa apakah variabel yang ditentukan untuk elemen <Source> dalam kebijakan kosong. Jika kolom kosong, itulah penyebab error.

    Pada contoh kebijakan JSON ke XML yang ditampilkan di atas, payload permintaan (yaitu, isi permintaan) yang dikirim oleh klien kosong.

    Contoh:

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

    Dalam hal ini, your_host_alias adalah domain yang dapat diakses publik yang digunakan untuk mengakses API Anda, seperti yang telah dikonfigurasi di properti virtualhosts.hostAliases dalam file penggantian Anda. Lihat Menentukan penggantian konfigurasi.

    Anda akan menerima kode error karena payload respons JSON kosong:

    steps.json2xml.ExecutionFailed
    

    Error ini juga dapat terjadi jika elemen <Source> disetel ke respons, tetapi payload kosong diteruskan oleh server backend.

Resolusi

Pastikan input yang diteruskan ke kebijakan JSON ke XML di elemen <Source> adalah payload JSON yang valid dan tidak kosong.

Untuk memperbaiki masalah contoh kebijakan JSON ke XML, teruskan payload JSON yang valid. Contoh:

  1. Buat file bernama city.json dengan konten berikut:

    {
      "Name":"Apigee",
      "City":"Bengaluru",
      "Pincode":"560016"
    }
    
  2. Buat panggilan API menggunakan perintah curl sebagai berikut:

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

    Dalam hal ini, your_host_alias adalah domain yang dapat diakses publik yang digunakan untuk mengakses API Anda, seperti yang telah dikonfigurasi di properti virtualhosts.hostAliases dalam file penggantian Anda. Lihat Menentukan penggantian konfigurasi.

Penyebab: Input Tidak Valid atau Salah

Jika kebijakan JSON ke XML mengurai input yang tidak valid atau formatnya salah, Anda akan mendapatkan error ini.

Misalnya, jika JSON yang tidak valid berikut diberikan sebagai input untuk kebijakan JSON ke XML,

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

Anda akan mendapatkan pesan {i>error<i}:

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

Diagnosis

  1. Identifikasi kebijakan JSON ke XML tempat error terjadi. Anda dapat menemukan informasi ini dalam elemen faultstring respons error. Misalnya, dalam faultstring berikut, nama kebijakan adalah Convert-JSONToXML:

    "faultstring": "JSONToXML[Convert-JSONToXML]: Execution failed due to reason: Expecting { or [ at line 1"
    
  2. Periksa elemen <Source> yang ditentukan dalam JSON yang gagal ke XML kebijakan XML. Misalnya, kebijakan JSON ke XML berikut memiliki elemen <Source> yang disetel ke variabel 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. Validasi apakah input yang ditentukan dalam elemen <Source> adalah payload JSON yang valid. Jika input tidak valid atau salah format, itulah penyebab error.

    Asumsikan bahwa JSON yang tidak valid berikut diteruskan ke kebijakan

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

    Berikut adalah contoh panggilan API yang menunjukkan cara permintaan diteruskan:

    curl -v "http://your_host_alias/v1/testjsontoxml" -H "Content-Type:
    application/json" -X POST -d '[ "args" : ["name" : "Google" ]]'
    

    Dalam hal ini, your_host_alias adalah domain yang dapat diakses publik yang digunakan untuk mengakses API Anda, seperti yang telah dikonfigurasi di properti virtualhosts.hostAliases dalam file penggantian Anda. Lihat Menentukan penggantian konfigurasi.

    Payload JSON yang diteruskan dalam permintaan tidak valid karena objek JSON dimulai dan diakhiri dengan tanda kurung siku ([ ]). Oleh karena itu, Anda menerima kode error:

    steps.json2xml.ExecutionFailed

    Error ini juga dapat terjadi jika elemen <Source> disetel ke respons, tetapi payload respons JSON tidak valid atau formatnya salah.

Resolusi

Pastikan input yang diteruskan ke kebijakan JSON ke XML dalam elemen <Source> valid dan tidak memiliki format yang salah.

Untuk memperbaiki masalah contoh kebijakan JSON ke XML yang dibahas di atas, teruskan permintaan payload JSON yang valid sebagai berikut:

{
  "args"  : {

        "name"  :  "Google"
   }
}

OutputVariableIsNotAvailable

Kode error

steps.json2xml.OutputVariableIsNotAvailable

Isi respons error

{
    "fault": {
        "faultstring": "JSONToXML[policy_name]: Output variable is not available.",
        "detail": {
            "errorcode": "steps.json2xml.OutputVariableIsNotAvailable"
        }
    }
}

Contoh error

{
    "fault": {
        "faultstring": "JSONToXML[Check-JSONToXML]: Output variable is not available.",
        "detail": {
            "errorcode": "steps.json2xml.OutputVariableIsNotAvailable"
        }
    }
}

Penyebab

Error ini terjadi jika variabel yang ditentukan dalam elemen <Source> dari Kebijakan JSON ke XML adalah string jenis dan elemen <OutputVariable> tidak ditentukan. Elemen <OutputVariable> bersifat wajib jika variabel yang ditentukan dalam elemen <Source> merupakan string jenis.

Diagnosis

  1. Identifikasi Kebijakan JSON ke XML tempat error terjadi. Anda dapat menemukannya di elemen faultstring respons error. Misalnya, dalam faultstring berikut, nama kebijakan adalah Check-JSONToXML:

    "faultstring": "JSONToXML[Check-JSONToXML]: Output variable is not available."
    
  2. Dalam Kebijakan JSON ke XML yang gagal, validasi apakah <OutputVariable> tidak ada.

    Contoh kebijakan JSONToXML berikut memiliki elemen <OutputVariable> yang tidak ada:

    <?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. Tentukan jenis variabel yang ditentukan dalam elemen <Source>:

    1. Temukan kode dalam Proxy API tempat variabel ditentukan terlebih dahulu.
    2. Setelah mengetahui kebijakan di mana variabel ditetapkan dan diisi terlebih dahulu, Anda harus menentukan jenis variabel tersebut seperti berikut:
      1. Periksa nilai atribut jenis (jika ada).
      2. Jika atribut jenis tidak ada, maka variabel tersebut dianggap sebagai string.
    3. Jika jenis variabelnya adalah string, maka itulah penyebab error. Anda dapat mempelajari variabel umum dan jenisnya di Referensi variabel.

    Misalnya, lihat variabel PostalCode dalam kebijakan JSON ke XML di atas.

    Sebagai contoh, pertimbangkan bahwa kebijakan Tetapkan Pesan digunakan untuk menetapkan nilai ke variabel yang disebut PostalCode seperti yang ditunjukkan di bawah ini:

    <?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>
    

    Perhatikan bahwa jenis variabel yang ditetapkan dalam <AssignVariable> adalah string. Jadi, variabel PostalCode adalah dari jenis string.

    Sekarang, ingat bahwa variabel PostalCode digunakan dalam elemen <Source> kebijakan JSONToXML:

    <Source>PostalCode</Source>
    

    Karena PostalCode adalah jenis string dan elemen <OutputVariable> tidak ada, Anda akan menerima kode error:

    steps.json2xml.OutputVariableIsNotAvailable
    

Resolusi

Pastikan bahwa jika variabel yang ditentukan dalam elemen <Source> Kebijakan JSONToXML adalah string jenis, elemen <OutputVariable> akan ditentukan dalam kebijakan.

Untuk memperbaiki Kebijakan JSONToXML yang dibahas di atas, sertakan elemen <OutputVariable> seperti yang ditunjukkan di bawah.

  <?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

Kode error

steps.json2xml.InCompatibleTypes

Isi respons error

{
    "fault": {
        "faultstring": "JSONToXML[policy_name]: String can not be assigned to message type.",
        "detail": {
            "errorcode": "steps.json2xml.InCompatibleTypes"
        }
    }
}

Contoh error

{
    "fault": {
        "faultstring": "JSONToXML[JSONToXML_checktype]: String can not be assigned to message type.",
        "detail": {
            "errorcode": "steps.json2xml.InCompatibleTypes"
        }
    }
}

Penyebab

Error ini terjadi jika jenis variabel yang ditentukan dalam elemen <Source> dan elemen <OutputVariable> tidak sama. Jenis variabel yang terdapat dalam elemen <Source> dan elemen <OutputVariable> harus cocok.

Jenis yang valid adalah message dan string.

Diagnosis

  1. Identifikasi Kebijakan JSON ke XML tempat error terjadi. Anda dapat menemukannya di elemen faultstring respons error. Misalnya, dalam faultstring berikut, nama kebijakan adalah JSONToXML_checktype:

    "faultstring": "JSONToXML[JSONToXML_checktype]: String can not be assigned to message type."
    
  2. Dalam Kebijakan JSON ke XML yang gagal, perhatikan nilai yang ditentukan dalam <OutputVariable> dan <Source>.

    Perhatikan contoh kebijakan berikut:

    <?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. Tentukan jenis variabel yang ditentukan dalam elemen <Source> dan <OutputVariable>:

    1. Temukan kode dalam Proxy API tempat setiap variabel ini ditentukan terlebih dahulu.
    2. Setelah mengetahui kebijakan di mana variabel ditetapkan dan diisi terlebih dahulu, Anda harus menentukan jenis variabel tersebut seperti berikut:
      1. Periksa nilai atribut jenis (jika ada).
      2. Jika atribut jenis tidak ada, maka variabel tersebut dianggap sebagai string.
    3. Jika jenis variabel yang ditentukan dalam <Source> adalah string sedangkan jenis <OutputVariable> adalah pesan atau sebaliknya, maka itulah penyebab error. Anda dapat mempelajari variabel umum dan jenisnya di Referensi variabel.

    Sebagai contoh, pertimbangkan kebijakan Tetapkan Pesan yang digunakan untuk menetapkan nilai ke variabel bernama PostalCode seperti yang ditunjukkan di bawah ini:

    <?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>
    

    Perhatikan bahwa jenis variabel yang ditetapkan dalam <AssignVariable> adalah string; oleh karena itu, variabel PostalCode adalah string jenis.

    Sekarang, ingat bahwa variabel PostalCode digunakan dalam elemen <Source> kebijakan JSONToXML:

    <Source>PostalCode</Source>
    

    Demikian pula, ingat bahwa variabel response digunakan dalam elemen <OutputVariable> kebijakan JSONToXML:

    <OutputVariable>response</OutputVariable>
    

    Karena PostalCode adalah jenis string sedangkan variabel response adalah jenis pesan, jenis tersebut tidak kompatibel sehingga Anda menerima kode error:

    steps.json2xml.InCompatibleTypes
    

    Error di atas juga dapat terjadi jika variabel dalam elemen <Source> berjenis message, tetapi variabel dalam elemen <OutputVariable> berjenis string.

Resolusi

Pastikan jenis variabel yang ditentukan dalam elemen <Source> dan elemen <OutputVariable> selalu sama. Jenis variabel yang terdapat dalam elemen <Source> dan elemen <OutputVariable> harus cocok. Artinya, pastikan jenis elemen <Source> dan <OutputVariable> berupa string atau jenis pesan.

Untuk memperbaiki Kebijakan JSON ke XML yang dibahas di atas, Anda dapat mendeklarasikan variabel lain PostalCode_output dari jenis string menggunakan Tetapkan Kebijakan Pesan, dan menggunakan variabel ini dalam elemen <OutputVariable> Kebijakan JSON ke XML.

Mengubah kebijakan Tetapkan Pesan:

<?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>

Mengubah kebijakan 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

Kode error

steps.json2xml.InvalidSourceType

Isi respons error

{
    "fault": {
        "faultstring": "JSONToXML[class invalid_class]: Invalid source type class invalid_class. Valid source types are [message, string].",
        "detail": {
            "errorcode": "steps.json2xml.InvalidSourceType"
        }
    }
}

Contoh error

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

Penyebab

Error ini terjadi jika jenis variabel yang digunakan untuk menentukan elemen <Source> tidak valid.Jenis variabel yang valid adalah message dan string.

Diagnosis

  1. Identifikasi jenis sumber yang tidak valid yang digunakan dalam kebijakan JSON ke XML. Anda dapat menemukan informasi ini dalam pesan error. Misalnya, dalam error berikut, jenis yang tidak valid adalah Integer.

    "faultstring": "JSONToXML[class java.lang.Integer]: Invalid source type class java.lang.Integer. Valid source types are [message, string]."
    
  2. Periksa semua kebijakan JSON ke XML di Proxy API tertentu tempat kegagalan terjadi. Pada Kebijakan JSON ke XML yang gagal, catat nama variabel yang ditentukan di <Source>.

    Berikut contoh kebijakan yang memiliki variabel bernama Karyawan ID yang ditentukan dalam elemen <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. Tentukan jenis variabel yang ditentukan dalam elemen <Source>:

    1. Temukan kode dalam Proxy API tempat variabel ini ditentukan terlebih dahulu.
    2. Setelah mengetahui kebijakan di mana variabel ditetapkan dan diisi terlebih dahulu, Anda harus menentukan jenis variabel tersebut seperti berikut:
      1. Periksa nilai atribut jenis (jika ada).
      2. Jika atribut jenis tidak ada, maka variabel tersebut dianggap sebagai string.
    3. Jika jenis variabel yang ditentukan dalam <Source> bukan jenis pesan atau string, itulah penyebab error. Anda dapat mempelajari variabel umum dan jenisnya di Referensi variabel.

    Sebagai contoh, mari kita pertimbangkan bahwa kebijakan ExtractVariables digunakan untuk mengekstrak nilai dari payload JSON dan menetapkan nilai tersebut ke variabel EmployeeID berjenis bilangan bulat seperti yang ditunjukkan di bawah:

    <?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>
    

    Sekarang, ingat bahwa variabel EmployeeID digunakan dalam elemen <Source> kebijakan JSONToXML:

    <Source>EmployeeID</Source>
    

    Karena jenis variabel ini adalah Integer, yang bukan jenis <Source> yang valid, Proxy API gagal dengan error:

    steps.json2xml.InvalidSourceType
    

Resolusi

Pastikan jenis variabel yang digunakan untuk menentukan elemen <Source> valid. Jenis <Source> yang valid adalah message dan string.

Untuk menghindari error di atas pada kebijakan JSONToXML, Anda dapat menggunakan variabel permintaan yang merupakan jenis pesan atau string lain yang merupakan payload JSON yang valid.