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
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ğıdakifaultstring
politikasında politika adıConvert-JSONToXML
, değişken iseresponse
şeklindedir:"faultstring": "JSONToXML[Convert-JSONToXML]: Source response is not available"
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şenresponse
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>
<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.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
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ğıdakifaultstring
politikasında politika adıConvert-JSONToXML
şeklindedir:"faultstring": "JSONToXML[Convert-JSONToXML]: Execution failed due to reason: Expecting { or [ at line 1"
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>
öğesirequest
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>
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:
Aşağıdaki içeriğe sahip
city.json
adlı bir dosya oluşturun:{ "Name":"Apigee", "City":"Bengaluru", "Pincode":"560016" }
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
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ğıdakifaultstring
politikasında politika adıConvert-JSONToXML
şeklindedir:"faultstring": "JSONToXML[Convert-JSONToXML]: Execution failed due to reason: Expecting { or [ at line 1"
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>
öğesirequest
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>
<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
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ğıdakifaultstring
politikasında politika adıCheck-JSONToXML
şeklindedir:"faultstring": "JSONToXML[Check-JSONToXML]: Output variable is not available."
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>
<Source>
öğesinde belirtilen değişken türünü belirleyin:- Değişkenin ilk olarak tanımlandığı API Proxy'sinde kodu bulun.
- Değişkenin tanımlandığı ve doldurulduğu politikayı belirledikten sonra, o değişkenin türünü aşağıdaki şekilde belirlemeniz gerekir:
- Varsa tür özelliğinin değerini kontrol edin.
- type özelliği yoksa değişkenin dize olduğu kabul edilir.
- 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
Hatanın oluştuğu JSON - XML Politikasını belirleyin. Bu bilgiyi hata yanıtının
faultstring
öğesinde bulabilirsiniz. Örneğin, aşağıdakifaultstring
'te politika adıJSONToXML_checktype
'dur:"faultstring": "JSONToXML[JSONToXML_checktype]: String can not be assigned to message type."
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>
<Source>
ve<OutputVariable>
öğelerinde belirtilen değişkenin türünü belirleyin:- Bu değişkenlerin her birinin ilk olarak tanımlandığı API Proxy'sinde kodu bulun.
- 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:
- Varsa tür özelliğinin değerini kontrol edin.
- type özelliği yoksa değişkenin dize olduğu kabul edilir.
<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şkenmessage
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
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]."
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>
<Source>
öğesinde belirtilen değişken türünü belirleyin:- Bu değişkenin ilk olarak tanımlandığı API Proxy'sinde kodu bulun.
- Değişkenin tanımlandığı ve doldurulduğu politikayı belirledikten sonra, o değişkenin türünü aşağıdaki şekilde belirlemeniz gerekir:
- Varsa tür özelliğinin değerini kontrol edin.
- Tür özelliği yoksa değişken bir dize olarak kabul edilir.
<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ü olmayanInteger
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.