Apigee Edge belgelerini görüntülüyorsunuz.
Apigee X belgelerine gidin. bilgi
Ne
Bu politika, JavaScript Object Notation (JSON) biçimindeki mesajları genişletilebilir işaretleme diline (XML) dönüştürerek size mesajların nasıl dönüştürüldüğünü kontrol etmek için çeşitli seçenekler sunar.
Bu politika özellikle XSL kullanarak iletileri dönüştürmek istiyorsanız kullanışlıdır. Bir JSON yükünü XML'e dönüştürdükten sonra, ihtiyacınız olan dönüşümü gerçekleştirmek için özel bir stil sayfasıyla birlikte XSL Dönüşümü politikasını kullanın.
Amacın JSON biçimli bir isteği XML biçimli bir isteğe dönüştürmek olduğu varsayıldığında, politika bir istek akışına (ör. İstek / ProxyEndpoint/PostFlow) eklenir.
Sana Özel
JSON ve XML arasında dönüştürmeyle ilgili ayrıntılı bilgi için http://community.apigee.com/articles/1839/converting-between-xml-and-json-what-you-need-to-k.html adresini ziyaret edin.
Bir isteği dönüştürme
<JSONToXML name="jsontoxml"> <Source>request</Source> <OutputVariable>request</OutputVariable> </JSONToXML>
Bu yapılandırma, kaynak olarak JSON biçimli istek mesajını alır ve ardından request
ExitVariable'de doldurulan XML biçimli bir mesaj oluşturur. Edge, bir sonraki işleme adımında mesaj olarak bu değişkenin içeriğini otomatik olarak kullanır.
Öğe referansı
Bu politikada yapılandırabileceğiniz öğeler ve özellikler aşağıda verilmiştir.
<JSONToXML async="false" continueOnError="false" enabled="true" name="JSON-to-XML-1"> <DisplayName>JSON to XML 1</DisplayName> <Source>request</Source> <OutputVariable>request</OutputVariable> <Options> <OmitXmlDeclaration>false</OmitXmlDeclaration> <DefaultNamespaceNodeName>$default</DefaultNamespaceNodeName> <NamespaceSeparator>:</NamespaceSeparator> <AttributeBlockName>#attrs</AttributeBlockName> <AttributePrefix>@</AttributePrefix> <ObjectRootElementName>Root</ObjectRootElementName> <ArrayRootElementName>Array</ArrayRootElementName> <ArrayItemElementName>Item</ArrayItemElementName> <Indent>false</Indent> <TextNodeName>#text</TextNodeName> <NullValue>I_AM_NULL</NullValue> <InvalidCharsReplacement>_</InvalidCharsReplacement> </Options> </JSONToXML>
<JSONToXML> özellikleri
Aşağıdaki tabloda, tüm politika üst öğelerinde ortak olan özellikler açıklanmaktadır:
Özellik | Açıklama | Varsayılan | Varlık |
---|---|---|---|
name |
Politikanın dahili adı. İsteğe bağlı olarak, politikayı yönetim kullanıcı arayüzü proxy düzenleyicisinde farklı bir doğal dil adıyla etiketlemek için |
Yok | Gerekli |
continueOnError |
Bir politika başarısız olduğunda hata döndürülmesi için Bir politika başarısız olduktan sonra bile akış yürütülmesinin devam etmesi için |
false | İsteğe bağlı |
enabled |
Politikayı uygulamak için Politikayı devre dışı bırakmak için |
true | İsteğe bağlı |
async |
Bu özellik kullanımdan kaldırıldı. |
false | Kullanımdan kaldırıldı |
<DisplayName> öğesi
Politikayı, yönetim kullanıcı arayüzü proxy düzenleyicisinde farklı bir doğal dil adıyla etiketlemek için name
özelliğine ek olarak kullanın.
<DisplayName>Policy Display Name</DisplayName>
Varsayılan |
Yok Bu öğeyi çıkarırsanız politikanın |
---|---|
Varlık | İsteğe bağlı |
Tür | Dize |
<Source> öğesi
XML'e dönüştürmek istediğiniz JSON mesajını içeren değişken, istek veya yanıt.
<Source>
tanımlanmazsa mesaj olarak değerlendirilir (politika bir istek akışına eklendiğinde istek akışı veya politika bir yanıt akışına eklendiğinde yanıt olarak çözümlenir).
Kaynak değişken çözümlenemezse veya ileti olmayan bir türe çözümlenirse politika bir hata bildirir.
<Source>request</Source>
Varsayılan | istek veya yanıt (politikanın API proxy akışına eklendiği yere göre belirlenir) |
Bulunma | İsteğe bağlı |
Tür | mesaj |
<ExitVariable> öğesi
JSON'den XML biçimine dönüştürme işleminin çıktısını depolar. Bu genellikle kaynakla aynı değerdir. Diğer bir deyişle, genellikle bir JSON isteği XML isteğine dönüştürülür.
JSON mesajının yükü ayrıştırılıp XML'e dönüştürülür ve XML biçimli mesajın HTTP Content-type üstbilgisi text/xml;charset=UTF-8
olarak ayarlanır.
OutputVariable
belirtilmezse source
, OutputVariable
olarak değerlendirilir. Örneğin, source
request
ise OutputVariable
varsayılan olarak request
olur.
<OutputVariable>request</OutputVariable>
Varsayılan | istek veya yanıt (politikanın API proxy akışına eklendiği yere göre belirlenir) |
Bulunma | <Source> öğesinde tanımlanan değişken dize türünde olduğunda bu öğe zorunludur. |
Tür | mesaj |
<Seçenekler>/<OmitXmlDeclaration>
XML ad alanının çıkıştan çıkarılacağını belirtir. Varsayılan değer false
, yani çıkışa ad alanını dahil eder.
Örneğin, aşağıdaki ayar, politikayı ad alanını atlayacak şekilde yapılandırır:
<OmitXmlDeclaration>true</OmitXmlDeclaration>
<Options>/<NamespaceBlockName>
<Options>/<DefaultNamespaceNodeName>
<Options>/<NamespaceSeparator> öğeleri
JSON, ad alanlarını desteklemez ancak XML dokümanları genellikle bunları gerektirir.
NamespaceBlockName
, politika tarafından oluşturulan XML'de ad alanı tanımının kaynağı olarak işlev gören bir JSON mülkü tanımlamanıza olanak tanır. (Yani kaynak JSON, sonuçta ortaya çıkan XML'i kullanan uygulamanın beklediği bir ad alanına eşlenebilecek bir özellik sağlamalıdır.)
Örneğin, aşağıdaki ayarlar:
<NamespaceBlockName>#namespaces</NamespaceBlockName> <DefaultNamespaceNodeName>$default</DefaultNamespaceNodeName> <NamespaceSeparator>:</NamespaceSeparator>
#namespaces
adlı bir özelliğin, varsayılan olarak atanmış en az bir ad alanı içeren kaynak JSON dosyasında var olduğunu belirtir. Örneğin:
{ "population": { "#namespaces": { "$default": "http://www.w3.org/1999/people", "exp": "http://www.w3.org/1999/explorers" }, "person": "John Smith", "exp:person": "Pedro Cabral" } }
şuna dönüştürür:
<population xmlns="http://www.w3.org/1999/people" xmlns:exp="http://www.w3.org/1999/explorers"> <person>John Smith</person> <exp:person>Pedro Cabral</exp:person> </population>
<Seçenekler>/<ObjectRootElementName>
<ObjectRootElementName>, adlandırılmış bir kök öğesi olmayan JSON'dan XML'e dönüştürme yaptığınızda kök öğe adını belirtir.
Örneğin, JSON aşağıdaki gibi görünürse:
{ "abc": "123", "efg": "234" }
Ve <ObjectRootElementName> öğesini şu şekilde ayarlayın:
<ObjectRootElementName>Root</ObjectRootElementName>
Elde edilen XML şu şekilde görünür:
<Root> <abc>123</abc> <efg>234</efg> </Root>
<Options>/<AttributeBlockName>
<Options>/<AttributePrefix> öğeleri
<AttributeBlockName>
, JSON öğelerinin ne zaman XML özelliklerine dönüştürüleceğini (XML öğeleri yerine) belirtebilmenizi sağlar.
Örneğin, aşağıdaki ayar, #attrs
adlı bir nesnenin içindeki özellikleri XML özelliklerine dönüştürür:
<AttributeBlockName>#attrs</AttributeBlockName>
Aşağıdaki JSON nesnesi:
{ "person" : { "#attrs" : { "firstName" : "John", "lastName" : "Smith" }, "occupation" : "explorer", } }
aşağıdaki XML yapısına dönüştürülür:
<person firstName="John" lastName="Smith"> <occupation>explorer</occupation> </person>
<AttributePrefix>
, belirtilen ön ekle başlayan özelliği XML özelliklerine dönüştürür. Özellik ön eki @
olarak ayarlandığında:
<AttributePrefix>@</AttributePrefix>
Aşağıdaki JSON nesnesini dönüştürür:
{ "person" : { "@firstName" : "John", "@lastName" : "Smith" "occupation" : "explorer", } }
şu XML yapısına dönüştürebilirsiniz:
<person firstName="John" lastName="Smith"> <occupation>explorer</occupation> </person>
<Options>/<ArrayRootElementName>
<Options>/<ArrayItemElementName> öğesi
Bir JSON dizisini, belirtilen üst ve alt öğe adlarına sahip XML öğeleri listesine dönüştürür.
Örneğin, aşağıdaki ayarlar:
<ArrayRootElementName>Array</ArrayRootElementName> <ArrayItemElementName>Item</ArrayItemElementName>
aşağıdaki JSON dizisini dönüştürür:
[ "John Cabot", { "explorer": "Pedro Cabral" }, "John Smith" ]
şu XML yapısına dönüştürebilirsiniz:
<Array> <Item>John Cabot</Item> <Item> <explorer>Pedro Cabral</explorer> </Item> <Item>John Smith</Item> </Array>
<Seçenekler>/<Girinti>
XML çıkışına girinti eklenmesini belirtir. Varsayılan değer false
, yani girintili olmadığı anlamına gelir.
Örneğin, aşağıdaki ayar, politikayı çıktıya girinti ekleyecek şekilde yapılandırır:
<Indent>true</Indent>
JSON girişi biçimdeyse:
{"n": [1, 2, 3] }
Daha sonra, girintileme yapılmadan çıktı şu olur:
<Array><n>1</n><n>2</n><n>3</n></Array>
Girintileme etkinleştirildiğinde çıktı şu olur:
<Array> <n>1</n> <n>2</n> <n>3</n> </Array>
<Options>/<TextNodeName> öğesi
Bir JSON özelliğini, belirtilen ada sahip bir XML metin düğümüne dönüştürür. Örneğin, aşağıdaki ayar:
<TextNodeName>age</TextNodeName>
şu JSON'u dönüştürür:
{ "person": { "firstName": "John", "lastName": "Smith", "age": 25 } }
şu XML yapısına uygular:
<person> <firstName>John</firstName>25<lastName>Smith</lastName> </person>
TextNodeName
belirtilmezse XML, bir metin düğümü için varsayılan ayar kullanılarak oluşturulur:
<person> <firstName>John</firstName> <age>25</age> <lastName>Smith</lastName> </person>
<Options>/<NullValue> öğesi
Boş değer gösterir. Varsayılan olarak bu değer NULL
'dir.
Örneğin, aşağıdaki ayar:
<NullValue>I_AM_NULL</NullValue>Şu JSON nesnesini dönüştürür:
{"person" : "I_AM_NULL"}
ifadesini şu XML öğesine ekleyin:
<person></person>
Null değeri için hiçbir değer (veya I_AM_NULL
dışında bir değer) belirtilmediğinde aynı yük şuna dönüştürülür:
<person>I_AM_NULL</person>
<Seçenekler>/<GeçersizCharsReplacement> öğesi
Bu ayar, ayrıştırıcıda sorunlara neden olabilecek geçersiz XML'in işlenmesine yardımcı olmak için geçersiz XML üreten tüm JSON öğelerini dizeyle değiştirir. Örneğin, aşağıdaki ayar:
<InvalidCharsReplacement>_</InvalidCharsReplacement>
Bu JSON nesnesini dönüştürür
{ "First%%%Name": "John" }
şu XML yapısına uygular:
<First_Name>John<First_Name>
Kullanım notları
Tipik bir uyumlulaştırma senaryosunda, gelen istek akışındaki bir JSON-XML politikası genellikle giden yanıt akışında XMLtoJSON politikasıyla eşleştirilir. Politikalar bu şekilde birleştirildiğinde, yerel olarak yalnızca XML destekleyen hizmetler için bir JSON API kullanıma sunulabilir.
Varsayılan (boş) JSON öğesini XML politikasına uygulamak ve yapılandırma öğelerini gerektiğinde yinelemeli olarak eklemek genellikle yararlıdır.
API'lerin JSON ve XML gerektiren çeşitli istemci uygulamaları tarafından tüketildiği senaryolarda yanıt biçimi, JSON'u XML'den XML'e ve XML'den JSON'e koşullu olarak yürütülecek şekilde yapılandırarak dinamik olarak ayarlanabilir. Bu senaryonun uygulanması için Akış değişkenleri ve koşulları bölümüne bakın.
Şemalar
Hata referansı
Bu bölümde, bu politika bir hatayı tetiklediğinde Edge tarafından ayarlanan hata kodları ile hata mesajları ve döndürülen hata mesajları ile Edge tarafından ayarlanan hata değişkenleri açıklanmaktadır. Bu bilgiyi, hataları ele almak için hata kuralları geliştirip geliştirmediğinizi bilmeniz önemlidir. Daha fazla bilgi için Politika hataları hakkında bilmeniz gerekenler ve Hataları işleme bölümlerine bakın.
Çalışma zamanı hataları
Politika yürütüldüğünde bu hatalar ortaya çıkabilir.
Hata kodu | HTTP durumu | Neden | Düzelt |
---|---|---|---|
steps.jsontoxml.ExecutionFailed |
500 | Giriş yükü (JSON) boş veya JSON'dan XML'ye aktarılan giriş (JSON) geçersiz ya da hatalı biçimlendirilmiş. | build |
steps.jsontoxml.InCompatibleTypes |
500 | Bu hata, <Source> öğesinde tanımlanan değişkenin türü ile <OutputVariable> öğesi aynı değilse ortaya çıkar. <Source> öğesi ve <OutputVariable> öğesi içinde yer alan değişkenlerin türünün eşleşmesi zorunludur. Geçerli türler: message ve string . |
build |
steps.jsontoxml.InvalidSourceType |
500 | 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. |
build |
steps.jsontoxml.OutputVariableIsNotAvailable |
500 | Bu hata, JSON'den XML'ye Politikası'nın <Source> öğesinde belirtilen değişken dize türündeyse ve <OutputVariable> öğesi tanımlı değilse ortaya çıkar.
<Source> öğesinde tanımlanan değişken dize türündeyse <OutputVariable> öğesi zorunludur. |
build |
steps.jsontoxml.SourceUnavailable |
500 |
Bu hata, JSON-XML politikasının <Source> öğesinde belirtilen message değişkeni şunlardan biriyse ortaya çıkar:
|
build |
Dağıtım hataları
Yok.
Hata değişkenleri
Bu değişkenler, bir çalışma zamanı hatası oluştuğunda ayarlanır. Daha fazla bilgi için Politika hataları hakkında bilmeniz gerekenler bölümüne bakın.
Değişkenler | Konum | Örnek |
---|---|---|
fault.name="fault_name" |
fault_name, yukarıdaki Çalışma zamanı hataları tablosunda listelenen hatanın adıdır. Hata adı, hata kodunun son kısmıdır. | fault.name Matches "SourceUnavailable" |
jsontoxml.policy_name.failed |
policy_name, hataya neden olan politikanın kullanıcı tarafından belirtilen adıdır. | jsontoxml.JSON-to-XML-1.failed = true |
Örnek hata yanıtı
{ "fault": { "faultstring": "JSONToXML[JSON-to-XML-1]: Source xyz is not available", "detail": { "errorcode": "steps.json2xml.SourceUnavailable" } } }
Hata kuralı örneği
<FaultRule name="JSON To XML Faults"> <Step> <Name>AM-SourceUnavailableMessage</Name> <Condition>(fault.name Matches "SourceUnavailable") </Condition> </Step> <Step> <Name>AM-BadJSON</Name> <Condition>(fault.name = "ExecutionFailed")</Condition> </Step> <Condition>(jsontoxml.JSON-to-XML-1.failed = true) </Condition> </FaultRule>
İlgili konular
- XML'den JSON'a: XML'den JSON'a politika
- XSL dönüştürmesi: XSL Dönüştürme politikası