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
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
'te politika adıConvert-JSONToXML
ve değişkenresponse
'dir:"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 ş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
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ğıdakifaultstring
'te politika adıConvert-JSONToXML
'dur:"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'dan XML'e politika örneğinde<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. 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:
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ı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
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ğıdakifaultstring
'te politika adıConvert-JSONToXML
'dur:"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'dan XML'e politika örneğinde<Source>
öğesirequest
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>
<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
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ğıdakifaultstring
'te politika adıCheck-JSONToXML
'dur:"faultstring": "JSONToXML[Check-JSONToXML]: Output variable is not available."
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>
<Source>
öğesinde belirtilen değişken türünü belirleyin:- API Proxy'sinde, değişkenin ilk kez tanımlandığı 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:
- Tür özelliğinin değerini (varsa) kontrol edin.
- type özelliği yoksa değişkenin dize olduğu kabul edilir.
- 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ıylaPostalCode
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
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ğıdakifaultstring
politikasında politika adıJSONToXML_checktype
şeklindedir:"faultstring": "JSONToXML[JSONToXML_checktype]: String can not be assigned to message type."
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>
<Source>
ve<OutputVariable>
öğelerinde belirtilen değişkenin türünü belirleyin:- API Proxy'de bu değişkenlerin her birinin ilk kez tanımlandığı 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:
- Tür özelliğinin değerini (varsa) kontrol edin.
- Tür özelliği yoksa değişken bir dize olarak kabul edilir.
<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ıylaPostalCode
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ş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>
öğ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
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]."
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>
<Source>
öğesinde belirtilen değişkenin türünü belirleyin:- Bu değişkenin 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:
- Tür özelliğinin değerini (varsa) kontrol edin.
- type özelliği yoksa değişkenin dize olduğu 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.
Ö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.