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

Apigee Edge belgelerini görüntülüyorsunuz.
Git: Apigee X belgeleri.
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 biri olduğunda ortaya çıkar:

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

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

Teşhis

  1. Hatanın oluştuğu JSON - XML politikasını ve mevcut olmayan 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 şeklindedir:

    "faultstring": "JSONToXML[Convert-JSONToXML]: Source response is not available"
    
  2. Başarısız JSON'dan XML'e politika XML'inde, <Source> öğesinde ayarlanan değişken adının, hata dizesinde tanımlanan değişken adıyla (yukarıdaki 1. adım) eşleştiğini doğrulayın. Örneğin, aşağıdaki JSON to XML politikası <Source> öğesinde, faultstring içinde yer alanlarla eşleşen response adlı 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'dan XML'e politikanı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ışında (politikanın yürütüldüğü belirli akışta kullanılamaz) veya
    • Çözümlenemez (tanımlanmamıştır)

    hatanın nedeni budur.

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

    steps.json2xml.SourceUnavailable
    

Çözünürlük

Başarısız JSON'dan XML'ye politikasının <Source> öğesinde ayarlanan değişkenin tanımlandığından ve politikanın yürütüldüğü akışta bulunduğundan emin olun.

Örnek JSON değerini, yukarıda gösterilen XML 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
Eksik giriş yükü Giriş yükü (JSON) boş.
Geçersiz veya Bozuk Giriş JSON'a XML politikasına iletilen giriş (JSON) geçersiz veya hatalı biçimlendirilmiş.

Neden: Giriş yükü eksik

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

Örneğin, JSON'dan XML'e geçiş politikasındaki <Source> öğesi, request veya response değişkeni olarak ayarlanmışsa ve bir JSON yükü içermeleri gerekiyorsa 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, 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 politika XML'sindeki <Source> öğesini inceleyin ve belirtilen değişkeni belirleyin. Örneğin, aşağıdaki JSON'den XML'e 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. 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'dan XML'e politika örneğinde, 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 verecek şekilde ayarlandığı halde arka uç sunucusu tarafından boş bir yük iletildiğinde de ortaya çıkabilir.

Çözünürlük

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

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

  1. Aşağıdaki içeriğe sahip city.json adlı 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 - XML politikası geçersiz veya hatalı biçimlendirilmiş girişi ayrıştırırsa bu hatayı alırsınız.

Örneğin, JSON'dan XML'e 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 - XML 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 politika XML'inde belirtilen <Source> öğesini inceleyin. Örneğin, aşağıdaki JSON'den XML'e geçiş politikasında <Source> öğesi request değişkeni 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. <Source> öğesinde belirtilen girişin geçerli bir JSON yükü olup olmadığını doğrulayın. Giriş geçersiz veya hatalı biçimlendirilmişse hatanın nedeni budur.

    Aşağıdaki geçersiz JSON dosyasının politikaya aktarıldığını varsayalım

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

    İsteğin nasıl iletildiğini gösteren örnek API çağrısını burada bulabilirsiniz:

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

    JSON nesnesi başladığı için istekte iletilen JSON yükü geçersiz ve köşeli parantez ([ ]) ile biter. Bu nedenle, şu hata kodunu alırsınız:

    steps.json2xml.ExecutionFailed

    Bu hata, <Source> öğesi yanıt verecek şekilde ayarlandığı halde JSON yanıt yükü geçersiz veya hatalı biçimlendirilmişse de ortaya çıkabilir.

Çözüm

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

Yukarıda bahsedilen JSON'dan XML'e örnek politikayla ilgili sorunu düzeltmek için aşağıdaki şekilde geçerli bir JSON yükü isteği gönderin:

{
  "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 Politikası'na ait <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üne sahip olduğunda <OutputVariable> öğesi zorunludur.

Teşhis

  1. Hatanın oluştuğu JSON-XML Politikası'nı tanımlayın. Bu bilgiyi, 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'dan XML'ye politikasında, <OutputVariable> öğesinin 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. Değişkenin ilk olarak tanımlandığı API Proxy'sinde kodu bulun.
    2. Değişkenin tanımlandığı ve doldurulduğu politikayı belirledikten sonra, o değişkenin türünü aşağıdaki şekilde belirlemeniz gerekir:
      1. Varsa tür özelliğinin değerini kontrol edin.
      2. type özelliği yoksa değişkenin dize olduğu kabul edilir.
    3. Değişkenin türü dizeyse hatanın nedeni budur. Değişkenler referansı bölümünde, sık kullanılan değişkenler ve türleri hakkında bilgi edinebilirsiniz.

    Örneğin, yukarıdaki JSON'den XML'e geçiş politikasında yer alan PostalCode değişkenine bakın.

    Örneğin, aşağıdaki gibi PostalCode adlı bir değişkene değer atamak için bir Mesaj Ata politikasının kullanıldığını varsayalı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> parametresinde 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 PostalCode değişkeninin, JSONToXML politikasının <Source> öğesinde kullanıldığını hatırlayın:

    <Source>PostalCode</Source>
    

    PostalCode dize türüne sahip olduğundan ve <OutputVariable> öğesi eksik olduğundan şu hata kodunu alırsınız:

    steps.json2xml.OutputVariableIsNotAvailable
    

Çözünürlük

JSONToXML Politikası'nın <Source> öğesinde belirtilen değişkenin türü dizeyse <OutputVariable> öğesinin politika içinde 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 ve <OutputVariable> öğesinde tanımlanan değişkenin türü 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ı belirleyin. Bu bilgiyi hata yanıtının faultstring öğesinde bulabilirsiniz. Örneğin, aşağıdaki faultstring'te politika adı JSONToXML_checktype'dur:

    "faultstring": "JSONToXML[JSONToXML_checktype]: String can not be assigned to message type."
    
  2. Başarısız JSON'dan XML Politikası'na, <OutputVariable> ve <Source> içinde belirtilen değerleri not 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şkenin türünü belirleyin:

    1. Bu değişkenlerin her birinin ilk olarak tanımlandığı API Proxy'sinde kodu bulun.
    2. Değişkenin ilk olarak tanımlandığı ve doldurulduğu politikayı belirledikten sonra, bu değişkenin türünü aşağıdaki gibi belirlemeniz gerekir:
      1. Varsa tür özelliğinin değerini kontrol edin.
      2. type özelliği yoksa değişkenin dize olduğu kabul edilir.
    3. <Source> içinde belirtilen değişken türü dize, <OutputVariable> türü mesaj ise, hatanın nedeni de budur. Değişkenler referansı bölümünde, sık kullanılan 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ı göz önünde bulundurun:

    <?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> parametresinde ayarlanan değişken türünün dize olduğuna dikkat edin. bu nedenle, PostalCode değişkeni dize türündedir.

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

    <Source>PostalCode</Source>
    

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

    <OutputVariable>response</OutputVariable>
    

    PostalCode dize türüne, response değişkeni ise mesaj türüne sahip olduğundan bu türler uyumlu değildir ve ş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şkenin türü dizeyse de 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.

Yukarıda bahsedilen JSON'dan XML'e Dönüştürme Politikası'nı düzeltmek için Mesaj Atama Politikası'nı kullanarak dize türüne sahip başka bir PostalCode_output değişkeni tanımlayabilir ve bu değişkeni JSON'dan XML'e Dönüştürme Politikası'nın <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ş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>

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 ilgili API Proxy'sinde tüm JSON-XML politikalarını inceleyin. Başarısız JSON'dan XML Politikası'na, <Source> içinde belirtilen değişkenin adını not edin.

    <Source> öğesinde belirtilen ÇalışanID adlı değişkene sahip örnek bir politika aşağıda verilmiştir:

<?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. Bu değişkenin ilk olarak tanımlandığı API Proxy'sinde kodu bulun.
    2. Değişkenin tanımlandığı ve doldurulduğu politikayı belirledikten sonra, o değişkenin türünü aşağıdaki şekilde belirlemeniz gerekir:
      1. Varsa tür özelliğinin değerini kontrol edin.
      2. Tür özelliği yoksa değişken bir dize olarak kabul edilir.
    3. <Source> içinde belirtilen değişkenin türü mesaj veya dize türü değilse hatanın nedeni budur. Değişkenler referansı bölümünde, sık kullanılan değişkenler ve türleri hakkında bilgi edinebilirsiniz.

    Örneğin, ExtractVariables politikasının bir JSON yükünden değer ayıklamak 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ı düşünelim:

    <?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ı hatırlayın:

    <Source>EmployeeID</Source>
    

    Bu değişkenin türü geçerli bir <Source> türü olmayan Integer olduğu için 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 şu olduğundan emin olun: geçerlidir. Geçerli <Source> türleri message ve string'dir.

JSONToXML politikasıyla ilgili yukarıdaki hatayı önlemek için değişkeni kullanabilirsiniz.