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

Apigee Edge belgelerini görüntülüyorsunuz.
Apigee X belgelerine gidin.
bilgi

SourceUnavailable

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-XML politikasının <Source> öğesinde belirtilen message değişkeni şunlardan biriyse ortaya çıkar:

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

Örneğin, bu hata JSON'dan XML'e politikasının, istek akışında yürütülmesi gerekiyorsa ancak <Source> öğesi, istek akışında var olmayan response değişkenine ayarlanırsa ortaya çıkar.

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ında politika adı Convert-JSONToXML, değişken ise response'dir:

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

    <?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 tanımlanmış olup olmadığını ve JSON'den XML'ye yönelik politikanın yürütülmekte olduğu akışta kullanılabilir olup olmadığını belirleyin.

  4. Değişken şunlardan biriyse:

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

    hatanın nedeni budur.

    Örnek olarak, yukarıda gösterilen JSON'den XML'ye yönelik politikanın istek akışında yürütülmesi gerektiğini varsayalım. response değişkeninin, JSON'den XML'ye dönüştürme politikasının <Source> öğesinde 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 bulunmadığı için şu hata kodunu alırsınız:

    steps.json2xml.SourceUnavailable
    

Çözünürlük

Başarısız JSON'dan XML'ye geçiş politikasının <Source> öğesinde ayarlanan değişkenin tanımlandığından ve politikanın uygulandığı akışta mevcut olduğundan emin olun.

Yukarıda gösterilen örnek JSON'den XML'e dönüştürme politikasını düzeltmek için <Source> öğesini, istek akışında mevcut olduğ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>

ExecutionFailed

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:

Neden Açıklama
Giriş yükü eksik Giriş yükü (JSON) boş.
Geçersiz veya Yanlış Biçimlendirilmiş Giriş JSON'den XML'ye aktarılan giriş (JSON) geçersiz veya hatalı biçimlendirilmiş.

Neden: Giriş yükü eksik

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

Örneğin, JSON'den XML'e geçiş politikasındaki <Source> öğesi request veya response değişkeni olarak ayarlanmışsa ve bunların bir JSON yükü içermesi gerektiği varsayılıyor ancak yük boşsa hata meydana gelir.

Teşhis

  1. Hatanın oluştuğu JSON'dan XML'ye geçiş politikasını tanımlayın. Bu bilgileri, hata yanıtının faultstring öğesinde bulabilirsiniz. Örneğin, aşağıdaki faultstring politikasında politika adı Convert-JSONToXML şeklindedir:

    "faultstring": "JSONToXML[Convert-JSONToXML]: Execution failed due to reason: Expecting { or [ at line 1"
    
  2. Başarısız JSON to XML politika XML dosyasındaki <Source> öğesini inceleyin ve belirtilen değişkeni belirleyin. Örneğin, aşağıdaki JSON-XML politikasında <Source> öğesi request olarak ayarlanmış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. Politikada <Source> öğesi için belirtilen değişkenin boş olup olmadığını kontrol edin. Boşsa hatanın nedeni budur.

    Yukarıda gösterilen örnek JSON to 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ğu için şu hata kodunu alırsınız:

    steps.json2xml.ExecutionFailed
    

    Bu hata, <Source> öğesi yanıta ayarlıyken ancak arka uç sunucu tarafından boş bir yük geçirildiğinde de ortaya çıkabilir.

Çözünürlük

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

Örnek JSON'den XML'ye geçiş politikasıyla ilgili sorunu düzeltmek için geçerli bir JSON yükü iletin. Örneğin:

  1. Şu içeriğe sahip 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ını 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 Yanlış Biçimlendirilmiş Giriş

JSON-XML politikası geçersiz veya bozuk girişi ayrıştırırsa bu hatayı alırsınız.

Örneğin, JSON-XML politikasına giriş olarak aşağıdaki geçersiz JSON sağlanırsa:

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

şu hatayı 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'dan XML'ye geçiş politikasını tanımlayın. Bu bilgileri, hata yanıtının faultstring öğesinde bulabilirsiniz. Örneğin, aşağıdaki faultstring politikasında politika adı Convert-JSONToXML şeklindedir:

    "faultstring": "JSONToXML[Convert-JSONToXML]: Execution failed due to reason: Expecting { or [ at line 1"
    
  2. Başarısız JSON'dan XML'ye geçiş politikası XML'inde belirtilen <Source> öğesini inceleyin. Örneğin, aşağıdaki JSON-XML politikasında <Source> öğesi request değişkenine ayarlanmış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çersiz veya hatalıysa hatanın nedeni budur.

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

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

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

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

    JSON nesnesi köşeli parantezlerle ([ ]) başlayıp bittiği için istekte iletilen JSON yükü geçersiz. Bu nedenle şu hata kodunu alırsınız:

    steps.json2xml.ExecutionFailed

    Bu hata, <Source> öğesi yanıt olarak ayarlandıysa ancak JSON yanıt yükü geçersiz veya bozuk olduğunda da ortaya çıkabilir.

Çözüm

<Source> öğesindeki JSON'dan XML politikasına iletilen girişin geçerli olduğundan ve bozuk olmadığından emin olun.

Yukarıda açıklanan örnek JSON to XML politikasıyla ilgili sorunu düzeltmek için aşağıdaki gibi geçerli bir JSON yük isteği iletin:

{
  "args"  : {

        "name"  :  "Google"
   }
}

OutputVariableIsNotAvailable

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'den XML'ye Politikası'nın <Source> öğesinde belirtilen değişken dize türündeyse ve <OutputVariable> öğesi tanımlı değilse ortaya çıkar. <Source> öğesinde tanımlanan değişken dize türündeyse <OutputVariable> öğesi zorunludur.

Teşhis

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

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

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

    <?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 ilk olarak tanımlandığı kodu bulun.
    2. Öncelikle değişkenin 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 kontrol edin (varsa).
      2. Tür özelliği mevcut değilse değişken bir dize olarak kabul edilir.
    3. Değişkenin türü dizeyse hatanın nedeni budur. Sık kullanılan değişkenler ve türleri hakkında daha fazla bilgiyi Değişkenler referansında bulabilirsiniz.

    Ö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ın kullanıldığını düşünün:

    <?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> öğesinde ayarlanan değişken türünün dize olduğunu unutmayın. Dolayısıyla PostalCode değişkeni dize türündedir.

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

    <Source>PostalCode</Source>
    

    PostalCode dize türünde olduğu ve <OutputVariable> öğesi eksik olduğu için şu hata kodunu alırsınız:

    steps.json2xml.OutputVariableIsNotAvailable
    

Çözünürlük

JSONToXML Politikası'nın <Source> öğesinde belirtilen değişken dize türündeyse <OutputVariable> öğesinin politika dahilinde 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>

InCompatibleTypes

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 tanımlanan değişkenin türü ve <OutputVariable> öğesi aynı değilse ortaya çıkar. <Source> öğesi 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ı tanımlayın. Bunu, hata yanıtının faultstring öğesinde bulabilirsiniz. Örneğin, aşağıdaki faultstring politikasında politika adı JSONToXML_checktype şeklindedir:

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

    Aşağıdaki örnek politikayı inceleyin:

    <?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. API Proxy'sinde, bu değişkenlerin her birinin tanımlandığı ilk kodu bulun.
    2. Öncelikle değişkenin 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 kontrol edin (varsa).
      2. Tür özelliği mevcut değilse değişken bir dize olarak kabul edilir.
    3. <Source> öğesinde belirtilen değişken türü dize, <OutputVariable> türü mesaj ise (veya tam tersi) hatanın nedeni budur. Sık kullanılan değişkenler ve türleri hakkında daha fazla bilgiyi Değişkenler referansında bulabilirsiniz.

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

    <?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> değişkeninde ayarlanan değişken türünün dize olduğuna dikkat edin. Bu nedenle, PostalCode değişkeninin dize türünde olduğunu unutmayın.

    Şimdi, JSONToXML politikasının <Source> öğesinde PostalCode değişkeninin 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, response değişkeni ise mesaj türünde olduğundan uyumsuz türler değildir. Bu nedenle şu hata kodunu alırsınız:

    steps.json2xml.InCompatibleTypes
    

    Yukarıdaki hata, <Source> öğesindeki değişken message türündeyken <OutputVariable> öğesindeki değişken dize türünde olduğunda da ortaya çıkabilir.

Çö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> öğesi ve <OutputVariable> öğesinde yer alan değişkenlerin türünün eşleşmesi zorunludur. Yani <Source> ve <OutputVariable> öğelerinin hem dize hem de mesaj türünde olduğundan emin olun.

JSON dosyasını yukarıda açıklanan XML Politikasına göre düzeltmek için "Mesaj Ata Politikası"nı kullanarak PostalCode_output türünde başka bir değişken bildirebilir ve bu değişkeni, JSON'den XML Politikası'na ait <OutputVariable> öğesinde kullanabilirsiniz.

Değiştirilen Mesaj Atama 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ştirilmiş 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>

InvalidSourceType

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-XML politikasında kullanılan geçersiz kaynak türünü tanımlayın. Bu bilgileri hata mesajında bulabilirsiniz. Örneğin, aşağıdaki hatada geçersiz tür Tamsayı'dır.

    "faultstring": "JSONToXML[class java.lang.Integer]: Invalid source type class java.lang.Integer. Valid source types are [message, string]."
    
  2. Hatanın oluştuğu API Proxy'sinde JSON'den XML'e geçişle ilgili tüm politikaları inceleyin. Başarısız JSON to XML Politikası'nda, <Source> politikasında belirtilen değişkenin adını not edin.

    <Source> öğesinde EmployID adlı değişkene sahip 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. API Proxy'sinde, bu değişkenin ilk tanımlandığı kodu bulun.
    2. Öncelikle değişkenin 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 kontrol edin (varsa).
      2. Tür özelliği mevcut değilse değişken bir dize olarak kabul edilir.
    3. <Source> öğesinde belirtilen değişken türü mesaj veya dize türü değilse hatanın nedeni budur. Sık kullanılan değişkenler ve türleri hakkında daha fazla bilgiyi Değişkenler referansında bulabilirsiniz.

    Örnek olarak, ExtractVariables politikasının, bir JSON yükünden değer çıkarmak için kullanıldığını ve değeri aşağıda gösterildiği gibi tam sayı türündeki EmployeeID değişkenine ayarladığını varsayalım:

    <?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, JSONToXML politikasının <Source> öğesinde EmployeeID değişkeninin kullanıldığını unutmayın:

    <Source>EmployeeID</Source>
    

    Bu değişkenin türü, geçerli bir <Source> türü olmayan Integer olduğundan API Proxy'si şu hatayı vererek başarısız olur:

    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ıyla ilgili olarak yukarıdaki hatayı önlemek için mesaj türündeki istek değişkenini veya geçerli bir JSON yükü olan başka herhangi bir dizeyi kullanabilirsiniz.