JSONtoXML politikası

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ı. name özelliğinin değeri harf, sayı, boşluk, kısa çizgi, alt çizgi ve nokta içerebilir. Bu değer 255 karakterden uzun olamaz.

İ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 <DisplayName> öğesini kullanın.

Yok Gerekli
continueOnError

Bir politika başarısız olduğunda hata döndürülmesi için false olarak ayarlayın. Bu, çoğu politika için beklenen davranıştır.

Bir politika başarısız olduktan sonra bile akış yürütülmesinin devam etmesi için true değerine ayarlayın.

false İsteğe bağlı
enabled

Politikayı uygulamak için true değerine ayarlayın.

Politikayı devre dışı bırakmak için false olarak ayarlayın. Bu politika, bir akışa bağlı kalsa bile uygulanmaz.

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 name özelliğinin değeri kullanılır.

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ş.
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.
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.
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.
steps.jsontoxml.SourceUnavailable 500 Bu hata, JSON-XML politikasının <Source> öğesinde belirtilen message değişkeni şunlardan biriyse ortaya çıkar:
  • kapsam dışında (politikanın yürütüldüğü belirli akışta kullanılamaz) veya
  • çözülemiyor (tanımlanmadı)

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