Apigee Edge belgelerini görüntülüyorsunuz.
.
Git:
Apigee X belgeleri. bilgi
Ne?
Bu politika, mesajları JavaScript Object Notation (JSON) biçiminden genişletilebilir (XML) gibi bir dil kullanarak mesajların dönüştürülmesini kontrol edebileceğiniz çeşitli seçenekler sunar.
Bu politika özellikle mesajları XSL kullanarak dönüştürmek istiyorsanız kullanışlıdır. Şu tarihten sonra: JSON yükünü XML'e dönüştürmek için, XSL Dönüştürme politikasını özel bir stil sayfasıyla birlikte kullanarak gerekli dönüşümü gerçekleştirin.
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 eklenir (örneğin, İstek / ProxyEndpoint / PostFlow) içerir.
Örnekler
JSON ve XML arasında dönüştürme konusunda ayrıntılı bir tartışma için http://community.apigee.com/articles/1839/converting-between-xml-and-json-what-you-need-to-k.html sayfasına bakın.
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 daha sonra
request
ÇıktıDeğişkeni içinde doldurulan XML biçimli mesaj. Kenar
bu değişkenin içeriğini bir sonraki işleme adımı için mesaj olarak otomatik şekilde 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> özellikler
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ı |
Yok | Zorunlu |
continueOnError |
Bir politika başarısız olduğunda hata döndürmesi için Akış yürütmenin bir politikadan sonra bile 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 özelliğin desteği sonlandırıldı. |
false | Kullanımdan kaldırıldı |
<DisplayName> öğe
Politikayı name
özelliğine ek olarak
farklı bir doğal dil adına sahip yönetim arayüzü proxy düzenleyicisi.
<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> öğe
Dönüştürmek istediğiniz JSON mesajını içeren değişken, istek veya yanıt XML.
<Source>
tanımlanmazsa mesaj olarak kabul edilir (çözümleri
politika bir istek akışına eklendiğinde veya politika eklendiğinde yanıt almak için
yanıt akışı).
Kaynak değişken çözümlenemezse veya mesaj olmayan bir türe dönüşürse politika hata verir.
<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 |
<OutputVariable> öğe
JSON-XML biçimine dönüştürme çıkışını depolar. Bu genellikle kaynaklandığı için, yani 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 HTTP Content-type
XML biçimli mesajın üstbilgisi text/xml;charset=UTF-8
olarak ayarlanır.
OutputVariable
belirtilmezse source
şu şekilde kabul edilir:
OutputVariable
Örneğin, source
request
ise
ardından OutputVariable
, varsayılan olarak request
değerine ayarlanır.
<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ündeyse bu öğe zorunludur. |
Tür | mesaj |
<Options>/<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ı hariç tutacak şekilde yapılandırır:
<OmitXmlDeclaration>true</OmitXmlDeclaration>
<Options>/<NamespaceBlockName>
<Options>/<DefaultNamespaceNodeName>
<Options>/<NamespaceSeparator> öğeler
JSON belgelerinde ad alanları desteklenmez. Ancak XML belgelerinde ad alanları genellikle gereklidir.
NamespaceBlockName
, ad alanının kaynağı olarak işlev gören bir JSON özelliği tanımlamanızı sağlar
tanımıyla uyumlu olacaktır. (Yani, kaynak JSON
uygulamanın beklendiği gibi, aynı ad alanına sahip olması için
oluşturulan XML'i kullanır.)
Örneğin, aşağıdaki ayarlar:
<NamespaceBlockName>#namespaces</NamespaceBlockName> <DefaultNamespaceNodeName>$default</DefaultNamespaceNodeName> <NamespaceSeparator>:</NamespaceSeparator>
#namespaces
adlı bir özelliğin, kaynak JSON'da mevcut olduğunu ve
varsayılan olarak atanmış en az bir ad alanı içerir. Ö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>
<Options>/<ObjectRootElementName>
<ObjectRootElementName> adlandırılmış kökü olmayan JSON dosyasından dönüşüm gerçekleştirdiğinizde kök öğe adını belirtir öğesini XML'e dönüştürür.
Örneğin, JSON aşağıdaki gibi görünüyorsa:
{ "abc": "123", "efg": "234" }
<ObjectRootElementName> öğesini şu şekilde ayarladınız:
<ObjectRootElementName>Root</ObjectRootElementName>
Sonuçta oluşturulan XML şu şekilde görünür:
<Root> <abc>123</abc> <efg>234</efg> </Root>
<Options>/<AttributeBlockName>
<Options>/<AttributePrefix> öğeler
<AttributeBlockName>
, JSON öğelerinin ne zaman gösterileceğini belirtmenizi sağlar
XML özelliklerine dönüştürülür (XML öğeleri yerine).
Örneğin, aşağıdaki ayar
#attrs
değerlerini XML özelliklerine ekleyin:
<AttributeBlockName>#attrs</AttributeBlockName>
Aşağıdaki JSON nesnesi:
{ "person" : { "#attrs" : { "firstName" : "John", "lastName" : "Smith" }, "occupation" : "explorer", } }
şu XML yapısına dönüştürülür:
<person firstName="John" lastName="Smith"> <occupation>explorer</occupation> </person>
<AttributePrefix>
, belirtilen önekle başlayan özelliği dönüştürür
içine yerleştirmeniz gerekir. Özellik öneki @
olarak ayarlandığında, örneğin:
<AttributePrefix>@</AttributePrefix>
Aşağıdaki JSON nesnesini dönüştürür:
{ "person" : { "@firstName" : "John", "@lastName" : "Smith" "occupation" : "explorer", } }
şu XML yapısına uyar:
<person firstName="John" lastName="Smith"> <occupation>explorer</occupation> </person>
<Options>/<ArrayRootElementName>
<Options>/<ArrayItemElementName> öğe
Bir JSON dizisini, belirtilen üst ve alt öğelere sahip XML öğeleri listesine dönüştürür gösterir.
Örneğin, aşağıdaki ayarlar:
<ArrayRootElementName>Array</ArrayRootElementName> <ArrayItemElementName>Item</ArrayItemElementName>
şu JSON dizisini dönüştürür:
[ "John Cabot", { "explorer": "Pedro Cabral" }, "John Smith" ]
şu XML yapısına yerleştirin:
<Array> <Item>John Cabot</Item> <Item> <explorer>Pedro Cabral</explorer> </Item> <Item>John Smith</Item> </Array>
<Options>/<Indent>
XML çıkışının girintisini belirtir. Varsayılan değer: false
girintilemez.
Örneğin, aşağıdaki ayar, politikayı çıktıya girinti ekleyecek şekilde yapılandırır:
<Indent>true</Indent>
JSON girişi şu biçimdeyse:
{"n": [1, 2, 3] }
Bu durumda, girinti içermeyen çıkış şu şekilde olur:
<Array><n>1</n><n>2</n><n>3</n></Array>
Girintileme etkinleştirildiğinde çıkış şu şekilde olur:
<Array> <n>1</n> <n>2</n> <n>3</n> </Array>
<Options>/<TextNodeName> öğe
Bir JSON özelliğini, belirtilen ada sahip bir XML metin düğümüne dönüştürür. Örneğin, şu ayar:
<TextNodeName>age</TextNodeName>
şu JSON'u dönüştürür:
{ "person": { "firstName": "John", "lastName": "Smith", "age": 25 } }
şu XML yapısına uyar:
<person> <firstName>John</firstName>25<lastName>Smith</lastName> </person>
TextNodeName
belirtilmezse XML, varsayılan ayar kullanılarak oluşturulur.
bir metin düğümü için:
<person> <firstName>John</firstName> <age>25</age> <lastName>Smith</lastName> </person>
<Options>/<NullValue> öğe
Boş değer gösterir. Varsayılan olarak bu değer NULL
şeklindedir.
Örneğin, aşağıdaki ayar:
<NullValue>I_AM_NULL</NullValue>Aşağıdaki JSON nesnesini dönüştürür:
{"person" : "I_AM_NULL"}
şu XML öğesine ekleyin:
<person></person>
Null değeri için herhangi bir değer (veya I_AM_NULL
dışında bir değer) belirtilmediğinde,
aynı yük şuna dönüşür:
<person>I_AM_NULL</person>
<Options>/<InvalidCharsReplacement> öğe
Ayrıştırıcıyla ilgili sorunlara neden olabilecek geçersiz XML'lerin işlenmesine yardımcı olmak için bu ayar, dizeyle geçersiz XML oluşturan tüm JSON öğeleri. Örneğin, ayar:
<InvalidCharsReplacement>_</InvalidCharsReplacement>
Bu JSON nesnesini dönüştürür
{ "First%%%Name": "John" }
şu XML yapısına uyar:
<First_Name>John<First_Name>
Kullanım notları
Tipik bir uyumlulaştırma senaryosunda, gelen istek akışındaki JSON'den XML'e politika genellikle giden yanıt akışında bir XMLtoJSON politikasıyla eşleştirilir. Politikaları bu şekilde birleştirerek JSON API, yerel olarak yalnızca XML'i destekleyen hizmetler için gösterilebilir.
Varsayılan (boş) JSON öğesini XML politikasına uygulamak ve genellikle yapılandırma öğelerini gerektiği gibi kullanın.
API'lerin, JSON'den birini gerektirebilecek çeşitli istemci uygulamaları tarafından kullanıldığı senaryolar için yanıt biçimi, JSON'u XML'e ve XML'yi aşağıdaki şekilde yapılandırarak dinamik olarak ayarlanabilir. Koşullu olarak yürütülecek JSON politikaları. Akış değişkenleri ve koşulları konusuna bakın. örnek olarak paylaşacağım.
Şemalar
Hata referansı
Bu bölümde, bu politika bir hatayı tetiklediğinde döndürülen hata kodları ve hata mesajlarının yanı sıra Edge tarafından ayarlanan hata değişkenleri açıklanmaktadır. Hata kuralları geliştirirken bu bilgilerin farkında olmanız önemlidir. hoşuma gitmesi için bir fırsattır. Daha fazla bilgi için Bilmeniz gerekenler Politika hataları ve Kullanım sorun.
Çalışma zamanı hataları
Bu hatalar, politika yürütüldüğünde ortaya çıkabilir.
Hata kodu | HTTP durumu | Neden | Düzelt |
---|---|---|---|
steps.jsontoxml.ExecutionFailed |
500 | Giriş yükü (JSON) boş veya JSON'a XML politikasına iletilen giriş (JSON) veya hatalı biçimlendirilmiş olmalıdır. | build |
steps.jsontoxml.InCompatibleTypes |
500 | Bu hata, <Source> öğesinde tanımlanan değişkenin türü ve
<OutputVariable> öğesi aynı değildir. Veri türünün
<Source> öğesi ve <OutputVariable> öğesinde bulunan değişkenler
şununla eşleşir: Geçerli türler: message ve string . |
build |
steps.jsontoxml.InvalidSourceType |
500 | Bu hata, <Source> öğesini tanımlamak için kullanılan değişkenin türü olduğunda ortaya çıkar
geçersiz. Geçerli değişken türleri message ve string 'dir. |
build |
steps.jsontoxml.OutputVariableIsNotAvailable |
500 | Bu hata, JSON'un <Source> öğesinde belirtilen değişken
XML Politikası dize türünde ve <OutputVariable> öğesi tanımlı değil.
<Source> içinde tanımlanan değişken için <OutputVariable> öğesi zorunludur
öğesi dize türünde. |
build |
steps.jsontoxml.SourceUnavailable |
500 |
Bu hata, ileti
JSON'dan XML'e politikasının <Source> öğesinde belirtilen değişken aşağıdakilerden biri olabilir:
|
build |
Dağıtım hataları
Yok.
Hata değişkenleri
Bu değişkenler, çalışma zamanı hatası oluştuğunda ayarlanır. Daha fazla bilgi için Bilmeniz gerekenler hakkında daha fazla bilgi edinin.
Değişkenler | Konum | Örnek |
---|---|---|
fault.name="fault_name" |
fault_name, yukarıdaki Çalışma zamanı hataları tablosunda listelendiği gibi 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" } } }
Örnek hata kuralı
<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'ye: XML'den JSON'ye politika
- XSL dönüştürmesi: XSL Dönüşüm politikası