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'dan XML'ye politikası <Source> öğesinde belirtilen message değişkeni şu durumlarda oluşur:

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

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

Teşhis

  1. Hatayı içeren JSON'dan XML'e politikayı ve kullanılamayan değişkenin adını belirleyin. Bu öğelerin ikisini de hata yanıtının faultstring öğesinde bulabilirsiniz. Örneğin, aşağıdaki faultstring içinde politika adı Convert-JSONToXML, değişken ise response'dir:

    "faultstring": "JSONToXML[Convert-JSONToXML]: Source response is not available"
    
  2. Başarısız olan JSON'dan XML'ye politikası XML'sinde, <Source> öğesinde ayarlanan değişkenin 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'dan XML'ye politikası, <Source> öğesinde response adlı bir değişken belirtir. Bu değişken, faultstring öğesindekiyle 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, JSON'dan XML'ye 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 şu durumlarda:

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

    Bu durumda hatanın nedeni budur.

    Örneğin, yukarıda gösterilen JSON'dan XML'ye politikası istek akışında yürütülmelidir. response değişkeninin, JSON'dan XML'ye politikası için <Source> öğesinde kullanıldığını hatırlayın. Yanıt değişkeni yalnızca yanıt akışında kullanılabilir.

    İstek akışında response değişkeni bulunmadığından şu hata kodunu alırsınız:

    steps.json2xml.SourceUnavailable
    

Çözünürlük

Başarısız olan JSON'dan XML'ye politikası <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 örnek JSON'dan XML politikası dönüştürme işlemini düzeltmek için <Source> öğesini, istek akışında mevcut olduğ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
Eksik giriş yükü Giriş yükü (JSON) boş.
Geçersiz veya Hatalı Giriş (Invalid or Malformed Input) JSON'dan XML'ye politikasına iletilen giriş (JSON) geçersiz veya hatalı biçimlendirilmiş.

Nedeni: Giriş yükü eksik

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

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

Teşhis

  1. Hatayı içeren JSON'dan XML'ye politikayı belirleyin. Bu bilgileri, hata yanıtının faultstring öğesinde bulabilirsiniz. Örneğin, aşağıdaki faultstring içinde politika adı Convert-JSONToXML'dir:

    "faultstring": "JSONToXML[Convert-JSONToXML]: Execution failed due to reason: Expecting { or [ at line 1"
    
  2. Başarısız olan JSON'dan XML'ye politika XML'sindeki <Source> öğesini inceleyin ve belirtilen değişkeni belirleyin. Örneğin, aşağıdaki JSON'dan XML'ye 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'dan XML'e dönüştürme 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ıt olarak ayarlanmışsa ancak arka uç sunucusu tarafından boş bir yük iletilirse de oluşabilir.

Çözünürlük

<Source> öğesinde JSON'dan XML'ye politikasına iletilen girişin geçerli bir JSON yükü ve boş olmayan bir değer olduğundan emin olun.

Örnek JSON'dan 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 Yanlış Biçimlendirilmiş Giriş

JSON'dan XML'ye politikası, geçersiz veya hatalı 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'ye politikasına giriş olarak sağlanırsa

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

hatasını alırsınız:

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

Teşhis

  1. Hatayı içeren JSON'dan XML'ye politikayı belirleyin. Bu bilgileri, hata yanıtının faultstring öğesinde bulabilirsiniz. Örneğin, aşağıdaki faultstring içinde politika adı Convert-JSONToXML'dir:

    "faultstring": "JSONToXML[Convert-JSONToXML]: Execution failed due to reason: Expecting { or [ at line 1"
    
  2. Başarısız olan JSON'dan XML'ye politikası XML'sinde belirtilen <Source> öğesini inceleyin. Örneğin, aşağıdaki JSON'dan XML'ye politikada <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çersizse veya hatalı biçimlendirilmişse hatanın nedeni budur.

    Aşağıdaki geçersiz JSON'un politikaya 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" ]]'
    

    İstekle iletilen JSON yükü, JSON nesnesi köşeli parantezlerle ([ ]) başladığı ve bittiği için geçersiz. Bu nedenle, şu hata kodunu alıyorsunuz:

    steps.json2xml.ExecutionFailed

    Bu hata, <Source> öğesi yanıt olarak ayarlanmışsa ancak JSON yanıtı yükü geçersiz veya hatalı biçimlendirilmişse de oluşabilir.

Çözünürlük

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

Yukarıda bahsedilen örnek JSON'dan XML'ye politika ile ilgili sorunu düzeltmek için geçerli bir JSON yükü isteğini aşağıdaki gibi 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'ye Politikası'nın <Source> öğesinde belirtilen değişkenin türü dizeyse ve <OutputVariable> öğesi tanımlanmamışsa oluşur. <Source> öğesinde tanımlanan değişkenin türü dize olduğunda <OutputVariable> öğesi zorunludur.

Teşhis

  1. Hatayı içeren JSON'dan XML'ye dönüştürme politikasını belirleyin. Bu bilgiyi hata yanıtının faultstring öğesinde bulabilirsiniz. Örneğin, aşağıdaki faultstring içinde politika adı Check-JSONToXML'dir:

    "faultstring": "JSONToXML[Check-JSONToXML]: Output variable is not available."
    
  2. Başarısız olan JSON'dan XML'ye politikası doğrulamasında <OutputVariable> öğesinin eksik olup olmadığını kontrol edin.

    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şkenin türünü belirleyin:

    1. API proxy'sinde değişkenin ilk tanımlandığı 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. Tür özelliği yoksa değişkenin dize olduğu kabul edilir.
    3. Değişkenin türü dize ise hatanın nedeni budur. Yaygın değişkenler ve türleri hakkında bilgiyi Değişkenler referansı bölümünde bulabilirsiniz.

    Örneğin, yukarıdaki JSON'dan XML'ye politikadaki PostalCode değişkenine bakın.

    Örneğin, aşağıda gösterildiği gibi PostalCode adlı bir değişkene değer atamak için bir Assign Message 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> içinde ayarlanan değişken türünün dize olduğunu unutmayın. 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>
    

    PostalCode dize türünde 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ü dize ise <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 oluşur. <Source> öğesi ve <OutputVariable> öğesinde bulunan değişkenlerin türünün eşleşmesi zorunludur.

Geçerli türler message ve string'dir.

Teşhis

  1. Hatayı içeren JSON'dan XML'ye dönüştürme politikasını belirleyin. Bu bilgiyi hata yanıtının faultstring öğesinde bulabilirsiniz. Örneğin, aşağıdaki faultstring içinde politika adı JSONToXML_checktype'dir:

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

    1. API proxy'sinde bu değişkenlerin her birinin ilk olarak tanımlandığı 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. Tür özelliği yoksa değişkenin dize olduğu kabul edilir.
    3. <Source> içinde belirtilen değişkenin türü dize, <OutputVariable> türü ise iletiyse veya bunun tam tersi geçerliyse hatanın nedeni budur. Yaygın değişkenler ve türleri hakkında bilgiyi Değişkenler referansı bölümünde bulabilirsiniz.

    Örneğin, aşağıda gösterildiği gibi PostalCode adlı bir değişkene değer atamak için kullanılan bir Assign Message 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> içinde ayarlanan değişken türünün dize olduğunu, dolayısıyla 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ı 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ünde, response değişkeni ise ileti türünde olduğundan 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ünde ancak <OutputVariable> öğesindeki değişken dize türünde olduğunda da oluşabilir.

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

Yukarıda bahsedilen JSON'dan XML'e politikayı düzeltmek için Assign Message Policy'yi kullanarak PostalCode_output türünde başka bir değişken tanımlayabilir ve bu değişkeni JSON'dan XML'e politikasının <OutputVariable> öğesinde kullanabilirsiniz.

Değiştirilmiş ileti 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şkenin türü geçersizse oluşur.Geçerli değişken türleri message ve string'dir.

Teşhis

  1. JSON'dan XML'ye politikası için 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 Integer'dır.

    "faultstring": "JSONToXML[class java.lang.Integer]: Invalid source type class java.lang.Integer. Valid source types are [message, string]."
    
  2. Hatayı içeren API proxy'sindeki tüm JSON-XML politikalarını inceleyin. Başarısız olan JSON'dan XML'ye politikada, <Source> içinde belirtilen değişkenin adını not edin.

    <Source> öğesinde EmployeeID adlı değişkenin belirtildiği örnek bir politikayı aşağıda bulabilirsiniz:

<?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'sindeki 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. Tür özelliği yoksa değişkenin dize olduğu kabul edilir.
    3. <Source> içinde belirtilen değişkenin türü ne ileti ne de dize türü ise hatanın nedeni budur. Yaygın değişkenler ve türleri hakkında bilgiyi Değişkenler referansı bölümünde bulabilirsiniz.

    Örneğin, ExtractVariables politikasının bir JSON yükünden değeri çıkarmak ve değeri aşağıdaki gibi tam sayı türünde EmployeeID değişkenine ayarlamak için kullanıldığı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ğildir) API proxy'si şu 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 ileti türünde olan request değişkenini veya geçerli bir JSON yükü olan başka bir dizeyi kullanabilirsiniz.