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

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

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

    "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 şu durumlarda:

    • 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.

Yukarıda gösterilen JSON'dan XML'e örnek politikayı düzeltmek için <Source> öğesini, istek akışında bulunduğu için 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'a XML politikasına iletilen giriş (JSON) geçersiz veya hatalı biçimlendirilmiş.

Neden: Giriş yükü eksik

JSON'dan XML'e politikalarında, <Source> öğesinde belirtilen değişkenin içeriği (yükü) boşsa bu hata meydana gelir.

Örneğin, JSON'dan XML'e politikasındaki <Source> öğesi bir request veya response değişkeni olarak ayarlanmışsa ve bu değişkenlerin JSON yük verisi içermesi gerekiyorsa ancak yük verisi boşsa hata meydana gelir.

Teşhis

  1. Hatanın oluştuğu JSON'dan XML'e dönüştürme politikasını belirleyin. Bu bilgileri hata yanıtının faultstring öğesinde bulabilirsiniz. Örneğin, aşağıdaki faultstring'te politika adı Convert-JSONToXML'dur:

    "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'dan XML'e politika örneğinde <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. Alan 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ğu için şu hata kodunu alırsınız:

    steps.json2xml.ExecutionFailed
    

    Bu hata, <Source> öğesi response olarak ayarlanmışsa ancak arka uç sunucusu tarafından boş bir yük aktarılıyorsa da ortaya çıkabilir.

Çözünürlük

<Source> öğesinde JSON'dan XML'e politikasına iletilen girişin geçerli bir 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ı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'dan XML'e politika, geçersiz veya hatalı girişleri ayrıştırırsa bu hatayı alırsınız.

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

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

aşağıdaki 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'e dönüştürme politikasını belirleyin. Bu bilgileri, hata yanıtının faultstring öğesinde bulabilirsiniz. Örneğin, aşağıdaki faultstring'te politika adı Convert-JSONToXML'dur:

    "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'dan XML'e politika örneğinde <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ı biçimlendirilmişse hatanın nedeni budur.

    Politikaya aşağıdaki geçersiz JSON'un iletildiğini varsayalım

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

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

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

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

    steps.json2xml.ExecutionFailed

    Bu hata, <Source> öğesi response olarak ayarlandıysa ancak JSON yanıt yükü geçersizse veya hatalıysa da ortaya çıkabilir.

Çözüm

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

Yukarıda açıklanan örnek JSON'den XML'e politikayla 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'dan XML'e 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ündeyse <OutputVariable> öğesi zorunludur.

Teşhis

  1. Hatanın oluştuğu JSON'dan XML'e Dönüştürme Politikası'nı belirleyin. Bu bilgiyi hata yanıtının faultstring öğesinde bulabilirsiniz. Örneğin, aşağıdaki faultstring'te politika adı Check-JSONToXML'dur:

    "faultstring": "JSONToXML[Check-JSONToXML]: Output variable is not available."
    
  2. JSON'dan XML'e dönüştürme politikasında başarısız olan <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. API Proxy'sinde, değişkenin ilk kez tanımlandığı 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. Tür özelliğinin değerini (varsa) kontrol edin.
      2. type özelliği yoksa değişkenin dize olduğu kabul edilir.
    3. Değişkenin türü dize ise hatanın nedeni budur. Sık kullanılan değişkenler ve türleri hakkında bilgi edinmek için Değişkenler referansı başlıklı makaleyi inceleyin.

    Örneğin, yukarıdaki JSON'dan XML'e politikadaki 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> içinde ayarlanan değişken türünün dize olduğunu unutmayın. Dolayısıyla PostalCode değişkeni dize türüne sahiptir.

    Ş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 dize türüne sahip olması durumunda <OutputVariable> öğesinin politika içinde tanımlandığından emin olun.

Yukarıda bahsedilen 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> öğesinde ve <OutputVariable> öğesinde bulunan 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'dan XML'e Dönüştürme Politikası'nı belirleyin. Bu bilgiyi 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. JSON'dan XML'e dönüştürme politikasında başarısız olan <OutputVariable> ve <Source> değerlerini 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şkenin türünü belirleyin:

    1. API Proxy'de bu değişkenlerin her birinin ilk kez tanımlandığı 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. Tür özelliğinin değerini (varsa) kontrol edin.
      2. Tür özelliği yoksa değişken bir dize olarak kabul edilir.
    3. <Source> içinde belirtilen değişken türü dize, <OutputVariable> türü mesaj ise veya tam tersi durumda hatanın nedeni budur. Sık kullanılan değişkenler ve türleri hakkında bilgi edinmek için Değişkenler referansı başlıklı makaleyi inceleyin.

    Örneğin, aşağıdaki gibi PostalCode adlı bir değişkene değer atamak için kullanılan bir Mesaj Ata politikası 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> içinde ayarlanan değişken türünün dize olduğunu, dolayısıyla PostalCode değişkeninin dize türüne sahip olduğunu unutmayın.

    Ş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> öğesinde ve <OutputVariable> öğesinde bulunan 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'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ş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'dan XML'e 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 Integer'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'sindeki tüm JSON'dan XML'e politikalarını inceleyin. Başarısız JSON'dan XML Politikası'na, <Source> içinde belirtilen değişkenin adını not edin.

    Aşağıda, <Source> öğesinde EmployeeID adlı değişkenin belirtildiği bir örnek politika 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şkenin türünü belirleyin:

    1. Bu değişkenin 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. Tür özelliğinin değerini (varsa) kontrol edin.
      2. type özelliği yoksa değişkenin dize olduğu 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.

    Örnek olarak, ExtractVariables politikasının bir JSON yükünden değeri 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ı 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 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ü Integer olduğundan (geçerli bir <Source> türü değil) API Proxy aşağıdaki hatayla başarısız olur:

    steps.json2xml.InvalidSourceType
    

Çözünürlük

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

JSONToXML politikasıyla ilgili yukarıdaki hatayı önlemek için mesaj türünde veya geçerli bir JSON yükü olan başka bir dizedeki istek değişkenini kullanabilirsiniz.