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>
{"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ı
This section describes the fault codes and error messages that are returned and fault variables that are set by Edge when this policy triggers an error. This information is important to know if you are developing fault rules to handle faults. To learn more, see What you need to know about policy errors and Handling faults.
Runtime errors
These errors can occur when the policy executes.
Fault code | HTTP status | Cause | Fix |
---|---|---|---|
steps.jsontoxml.ExecutionFailed |
500 | The input payload (JSON) is empty or the input (JSON) passed to JSON to XML policy is invalid or malformed. | build |
steps.jsontoxml.InCompatibleTypes |
500 | This error occurs if the type of the variable defined in the <Source> element and
the <OutputVariable> element are not the same. It is mandatory that the type of the
variables contained within the <Source> element and the <OutputVariable> element
matches. The valid types are message and string . |
build |
steps.jsontoxml.InvalidSourceType |
500 | This error occurs if the type of the variable used to define the <Source> element
is invalid. The valid types of variable are message and string . |
build |
steps.jsontoxml.OutputVariableIsNotAvailable |
500 | This error occurs if the variable specified in the <Source> element of the JSON to
XML Policy is of type string and the <OutputVariable> element is not defined.
The <OutputVariable> element is mandatory when the variable defined in the <Source>
element is of type string. |
build |
steps.jsontoxml.SourceUnavailable |
500 |
This error occurs if the message
variable specified in the <Source> element of the JSON to XML policy is either:
|
build |
Deployment errors
None.
Fault variables
These variables are set when a runtime error occurs. For more information, see What you need to know about policy errors.
Variables | Where | Example |
---|---|---|
fault.name="fault_name" |
fault_name is the name of the fault, as listed in the Runtime errors table above. The fault name is the last part of the fault code. | fault.name Matches "SourceUnavailable" |
jsontoxml.policy_name.failed |
policy_name is the user-specified name of the policy that threw the fault. | jsontoxml.JSON-to-XML-1.failed = true |
Example error response
{ "fault": { "faultstring": "JSONToXML[JSON-to-XML-1]: Source xyz is not available", "detail": { "errorcode": "steps.json2xml.SourceUnavailable" } } }
Example fault rule
<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ı