JSON - XML politikası çalışma zamanı hatası sorunlarını giderme

Apigee Edge belgelerini görüntülüyorsunuz.
Apigee X belgelerini inceleyin.

Kaynak Kullanılamıyor

Hata kodu

steps.json2xml.SourceUnavailable

Hata yanıtı gövdesi

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

Örnek hata

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

Neden

Bu hata, JSON ile XML politikasının <Source> öğesinde belirtilen message değişkeni şunlardan biriyse ortaya çıkar:

  • Kapsam dışı (politikanın yürütüldüğü belirli bir akışta kullanılamaz) veya
  • Çözümlenemiyor (tanımlanmadı)

Örneğin, JSON-XML politikasının istek akışında yürütülmesi gerekiyorsa ancak <Source> öğesi, istek akışında bulunmayan response değişkeni olarak ayarlanmışsa bu hata oluşur.

Teşhis

  1. Hatanın oluştuğu JSON-XML politikasını ve kullanılamayan değişkenin adını tanımlayın. Bu öğelerin ikisini de hata yanıtının faultstring öğesinde bulabilirsiniz. Örneğin, aşağıdaki faultstring politikasındaki politika adı Convert-JSONToXML, değişken ise response şeklindedir:

    "faultstring": "JSONToXML[Convert-JSONToXML]: Source response is not available"
    
  2. Başarısız JSON-XML politikası XML dosyasında, <Source> öğesinde ayarlanan değişken adının hata dizesinde tanımlanan değişken adıyla eşleştiğini doğrulayın (yukarıdaki 1. adım). Örneğin, aşağıdaki JSON-XML politikası, <Source> öğesinde response adlı ve faultstring ile eşleşen bir değişkeni belirtir:

    <?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> öğesinde kullanılan değişkenin, JSON-XML politikasının yürütüldüğü akışta tanımlanıp tanımlanmadığını ve kullanılabilir olup olmadığını belirleyin.

  4. Değişken şunlardan biriyse:

    • Kapsam dışı (politikanın yürütüldüğü belirli bir akışta kullanılamaz) veya
    • Çözümlenemiyor (tanımlanmadı)

    hatanın nedeni budur.

    Örneğin, yukarıda gösterilen JSON'dan XML'e XML politikasının istek akışında yürütülmesi gerektiğini varsayalım. JSON-XML politikasının <Source> öğesinde response değişkeninin kullanıldığını unutmayın. Yanıt değişkeni yalnızca yanıt akışında kullanılabilir.

    response değişkeni istek akışında mevcut olmadığından hata kodunu alırsınız:

    steps.json2xml.SourceUnavailable
    

Çözünürlük

Başarısız JSON-XML politikasının <Source> öğesinde ayarlanan değişkenin tanımlandığından ve politikanın çalıştığı akışta bulunduğundan emin olun.

Yukarıda gösterilen örnek JSON-XML politikasını düzeltmek için, <Source> öğesini istek akışında bulunduğundan request değişkenini kullanacak şekilde değiştirebilirsiniz:

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

Yürütme Başarısız

Hata kodu

steps.json2xml.ExecutionFailed

Hata yanıtı gövdesi

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

Olası nedenler

Bu hatanın olası nedenleri şunlardır:

Nedeni Açıklama
Giriş yükü eksik Giriş yükü (JSON) boş.
Geçersiz veya yanlış biçimlendirilmiş Giriş JSON'dan XML politikasına iletilen giriş (JSON) geçersiz veya yanlış biçimlendirilmiş.

Neden: Eksik giriş yükü

JSON öğesinde XML politikasında, <Source> öğesinde belirtilen değişkenin içeriği (yük) boşsa bu hata oluşur.

Örneğin, JSON-XML politikasındaki <Source> öğesi bir request veya response değişkeni olarak ayarlanmışsa ve bir JSON yükü içermeleri gerekiyorsa ancak yük boşsa hata oluşur.

Teşhis

  1. Hatanın oluştuğu JSON - XML politikasını tanımlayın. Bu bilgileri, hata yanıtının faultstring öğesinde bulabilirsiniz. Örneğin, şu faultstring politikasındaki politika adı Convert-JSONToXML:

    "faultstring": "JSONToXML[Convert-JSONToXML]: Execution failed due to reason: Expecting { or [ at line 1"
    
  2. Başarısız JSON-XML politikası XML öğesindeki <Source> öğesini inceleyin ve belirtilen değişkeni belirleyin. Örneğin, aşağıdaki JSON-XML politikası <Source> öğesini request olarak ayarlar:

    <?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. Politikadaki <Source> öğesi için belirtilen değişkenin boş olup olmadığını kontrol edin. Boşsa hatanın nedeni budur.

    Yukarıda gösterilen JSON-XML politikasında, istemci tarafından gönderilen istek yükü (yani istek gövdesi) boştur.

    Örneğin:

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

    JSON yanıt yükü boş olduğundan şu hata kodunu alırsınız:

    steps.json2xml.ExecutionFailed
    

    Bu hata, <Source> öğesi yanıt olarak ayarlanır ancak arka uç sunucusu tarafından boş bir yük iletilebilirse de oluşabilir.

Çözünürlük

<Source> öğesindeki JSON'den XML politikasına iletilen girişin geçerli JSON yükü olduğundan ve boş olmadığından emin olun.

Örnek JSON-XML politikası sorununu düzeltmek için geçerli bir JSON yükü iletin. Örneğin:

  1. Aşağıdaki içeriklerle city.json adında bir dosya oluşturun:

    {
      "Name":"Apigee",
      "City":"Bengaluru",
      "Pincode":"560016"
    }
    
  2. Aşağıdaki gibi bir cURL komutu kullanarak API çağrısı yapın:

    curl -v "http://<org>-<env>.apigee.net/v1/testxmltojson" -H "Content-Type: application/json" -X POST -d @company.json
    

Neden: Geçersiz veya Bozuk Giriş

JSON'dan XML'e kadar olan politika, geçersiz veya yanlış biçimlendirilmiş girişi ayrıştırırsa bu hatayı alırsınız.

Örneğin, aşağıdaki geçersiz JSON, JSON'dan XML'e giriş politikası olarak sağlanırsa

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

şu mesajı alırsınız:

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

Teşhis

  1. Hatanın oluştuğu JSON - XML politikasını tanımlayın. Bu bilgileri, hata yanıtının faultstring öğesinde bulabilirsiniz. Örneğin, şu faultstring politikasındaki politika adı Convert-JSONToXML:

    "faultstring": "JSONToXML[Convert-JSONToXML]: Execution failed due to reason: Expecting { or [ at line 1"
    
  2. Başarısız JSON ile XML politikası XML arasında belirtilen <Source> öğesini inceleyin. Örneğin, aşağıdaki JSON-XML politikası <Source> öğesini request değişkeni olarak ayarlamıştır:

    <?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> öğesinde belirtilen girişin geçerli bir JSON yükü olup olmadığını doğrulayın. Giriş geçersizse veya yanlış biçimlendirilmişse hatanın nedeni budur.

    Aşağıdaki geçersiz JSON'ın politikaya iletildiğini varsayalım

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

    İsteğin nasıl iletildiğini gösteren örnek API çağrısı aşağıda verilmiştir:

    curl -v "http://<org>-<env>.apigee.net/v1/testjsontoxml" -H "Content-Type:
    application/json" -X POST -d '[ "args" : ["name" : "Google" ]]'
    

    İstekte iletilen JSON yükü, JSON nesnesinin başında ve sonunda köşeli parantez ([ ]) bulunduğu için geçersiz. Bu nedenle hata kodunu alırsınız:

    steps.json2xml.ExecutionFailed

    Bu hata, <Source> öğesi yanıt olarak ayarlandığı halde JSON yanıtı yükü geçersizse ya da yanlış biçimlendirilmişse ortaya çıkabilir.

Çözüm

<Source> öğesinde JSON'a XML politikasına iletilen girişin geçerli olduğundan ve yanlış biçimlendirilmediğinden emin olun.

Yukarıda bahsedilen örnek JSON-XML politikası sorununu düzeltmek için aşağıdaki geçerli bir JSON yükü isteği iletin:

{
  "args"  : {

        "name"  :  "Google"
   }
}

ÇıkışDeğişkeniKullanılamıyor

Hata kodu

steps.json2xml.OutputVariableIsNotAvailable

Hata yanıtı gövdesi

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

Örnek hata

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

Neden

Bu hata, JSON ile XML Politikasının <Source> öğesinde belirtilen değişken dize türündeyse ve <OutputVariable> öğesi tanımlanmamışsa ortaya çıkar. <Source> öğesinde tanımlanan değişken dize türünde olduğunda <OutputVariable> öğesi zorunludur.

Teşhis

  1. Hatanın oluştuğu JSON - XML Politikası'nı belirleyin. Bunu hata yanıtının faultstring öğesinde bulabilirsiniz. Örneğin, şu faultstring politikasındaki politika adı Check-JSONToXML:

    "faultstring": "JSONToXML[Check-JSONToXML]: Output variable is not available."
    
  2. Başarısız JSON-XML Politikasında <OutputVariable> eksik olup olmadığını doğrulayın.

    Aşağıdaki örnek JSONToXML politikasında <OutputVariable> öğesi eksik:

    <?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> öğesinde belirtilen değişken türünü belirleyin:

    1. API Proxy'sinde, değişkenin önce tanımlandığı kodu bulun.
    2. Değişkenin önce tanımlandığı ve doldurulduğu politikayı belirledikten sonra, bu değişkenin türünü aşağıdaki şekilde belirlemeniz gerekir:
      1. Tür özelliğinin değerini (varsa) kontrol edin.
      2. type özelliği yoksa değişken bir dize olarak kabul edilir.
    3. Değişkenin türü dizeyse hatanın nedeni budur. Değişkenler referansında, yaygın değişkenler ve türleri hakkında bilgi edinebilirsiniz.

    Örneğin, yukarıdaki JSON - XML politikasında yer alan PostalCode değişkenine bakın.

    Örnek olarak, aşağıda gösterildiği gibi PostalCode adlı bir değişkene değer atamak için Mesaj Ata politikasını kullanabilirsiniz:

    <?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> içinde ayarlanan değişken türünün dize olduğunu unutmayın. PostalCode değişkeni, dize türündedir.

    Şimdi, PostalCode değişkeninin JSONToXML politikasının <Source> öğesinde kullanıldığını unutmayın:

    <Source>PostalCode</Source>
    

    PostalCode dize türünde olduğundan ve <OutputVariable> öğesi eksik olduğundan şu hata kodunu alıyorsunuz:

    steps.json2xml.OutputVariableIsNotAvailable
    

Çözünürlük

JSONToXML Politikasının <Source> öğesinde belirtilen değişken dize türündeyse <OutputVariable> öğesinin politikada tanımlandığından emin olun.

Yukarıda açıklanan JSONToXML Politikasını düzeltmek için aşağıda gösterildiği gibi bir <OutputVariable> öğesi ekleyin.

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

Uyumlu Olmayan Türler

Hata kodu

steps.json2xml.InCompatibleTypes

Hata yanıtı gövdesi

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

Örnek hata

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

Neden

Bu hata, <Source> öğesinde ve <OutputVariable> öğesinde tanımlanan değişken türü aynı değilse ortaya çıkar. <Source> öğesinde ve <OutputVariable> öğesinde yer alan değişkenlerin türünün eşleşmesi zorunludur.

Geçerli türler: message ve string.

Teşhis

  1. Hatanın oluştuğu JSON - XML Politikası'nı belirleyin. Bunu hata yanıtının faultstring öğesinde bulabilirsiniz. Örneğin, şu faultstring politikasındaki politika adı JSONToXML_checktype:

    "faultstring": "JSONToXML[JSONToXML_checktype]: String can not be assigned to message type."
    
  2. Başarısız JSON-XML Politikasında <OutputVariable> ve <Source>'da belirtilen değerlere dikkat edin.

    Aşağıdaki örnek politikayı göz önünde bulundurun:

    <?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> ve <OutputVariable> öğelerinde belirtilen değişken türünü belirleyin:

    1. Bu değişkenlerin her birinin ilk olarak tanımlandığı API Proxy'sinde kodu bulun.
    2. Değişkenin önce tanımlandığı ve doldurulduğu politikayı belirledikten sonra, bu değişkenin türünü aşağıdaki şekilde belirlemeniz gerekir:
      1. Tür özelliğinin değerini (varsa) kontrol edin.
      2. type özelliği yoksa değişken bir dize olarak kabul edilir.
    3. <Source> öğesinde belirtilen değişkenin türü dize, <OutputVariable> türü mesajsa veya bunun tersi ise hatanın nedeni budur. Değişkenler referansında, yaygın değişkenler ve türleri hakkında bilgi edinebilirsiniz.

    Örneğin, aşağıda gösterildiği gibi PostalCode adlı bir değişkene değer atamak için kullanılan "Mesaj Ata" politikasını kullanabilirsiniz:

    <?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> içinde ayarlanan değişken türünün dize olduğunu, bu nedenle PostalCode değişkeninin dize türünde olduğunu unutmayın.

    Şimdi, PostalCode değişkeninin JSONToXML politikasının <Source> öğesinde kullanıldığını unutmayın:

    <Source>PostalCode</Source>
    

    Benzer şekilde, JSONToXML politikasının <OutputVariable> öğesinde response değişkeninin kullanıldığını unutmayın:

    <OutputVariable>response</OutputVariable>
    

    PostalCode, dize türünde ve response değişkeni mesaj türünde olduğundan uyumsuz türler olduğundan hata kodunu alıyorsunuz:

    steps.json2xml.InCompatibleTypes
    

    Yukarıdaki hata, <Source> öğesindeki değişken message türünde ancak <OutputVariable> öğesindeki değişken dize türündeyse de meydana gelebilir.

Çözünürlük

<Source> öğesinde ve <OutputVariable> öğesinde tanımlanan değişken türünün her zaman aynı olduğundan emin olun. <Source> öğesinde ve <OutputVariable> öğesinde yer alan değişkenlerin türünün eşleşmesi zorunludur. Yani <Source> ve <OutputVariable> öğelerinin türünün hem dize hem de mesaj türü olduğundan emin olun.

Yukarıda bahsedilen JSON'dan XML'ye XML politikasını düzeltmek için İleti Politikası Atayarak PostalCode_output türünde başka bir değişken tanımlayıp bu değişkeni JSON'ın XML Politikası'nın <OutputVariable> öğesinde kullanabilirsiniz.

Değiştirilen İleti Ata politikası:

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

Değiştirilen JSONToXML politikası:

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

GeçersizKaynakTürü

Hata kodu

steps.json2xml.InvalidSourceType

Hata yanıtı gövdesi

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

Örnek hata

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

Neden

Bu hata, <Source> öğesini tanımlamak için kullanılan değişken türü geçersizse ortaya çıkar.Geçerli değişken türleri message ve string'dir.

Teşhis

  1. JSON'dan XML'e dönüştürme politikasında kullanılan geçersiz kaynak türünü belirleyin. Bu bilgileri hata mesajında bulabilirsiniz. Örneğin, aşağıdaki hatada geçersiz tür tam sayıdır.

    "faultstring": "JSONToXML[class java.lang.Integer]: Invalid source type class java.lang.Integer. Valid source types are [message, string]."
    
  2. Hatanın ortaya çıktığı belirli API Proxy'sinde tüm JSON-XML politikalarını inceleyin. Başarısız JSON-XML Politikasında <Source> içinde belirtilen değişkenin adını not edin.

    <Source> öğesinde PersonID adlı değişkenin bulunduğu bir örnek politikayı burada görebilirsiniz:

<?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> öğesinde belirtilen değişken türünü belirleyin:

    1. Kodu bu değişkenin önce tanımlandığı API Proxy'sinde bulun.
    2. Değişkenin önce tanımlandığı ve doldurulduğu politikayı belirledikten sonra, bu değişkenin türünü aşağıdaki şekilde belirlemeniz gerekir:
      1. Tür özelliğinin değerini (varsa) kontrol edin.
      2. type özelliği yoksa değişken bir dize olarak kabul edilir.
    3. <Source> değişkeninde belirtilen değişken türü mesaj veya dize türü değilse hatanın nedeni budur. Değişkenler referansında, yaygın değişkenler ve türleri hakkında bilgi edinebilirsiniz.

    Örneğin, bir JSON yükünün değerini ayıklamak için extraVariables politikasının kullanıldığını ve değeri aşağıda gösterildiği gibi tam sayı türünde EmployeeID değişkenine ayarladığınızı kabul edelim:

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

    Şimdi, EmployeeID değişkeninin JSONToXML politikasının <Source> öğesinde kullanıldığını unutmayın:

    <Source>EmployeeID</Source>
    

    Bu değişkenin türü Integer olduğundan (geçerli bir <Source> türü değil) API Proxy'si şu hata nedeniyle başarısız oluyor:

    steps.json2xml.InvalidSourceType
    

Çözünürlük

<Source> öğesini belirtmek için kullanılan değişken türünün geçerli olduğundan emin olun. Geçerli <Source> türleri message ve string'dir.

JSONToXML politikasında yukarıdaki hatadan kaçınmak için mesaj türündeki istek değişkenini veya geçerli bir JSON yükü olan başka bir dizeyi kullanabilirsiniz.