JSONtoXML politikası

Apigee Edge belgelerini görüntülüyorsunuz.
Apigee X belgelerine gidin.
info

Ne?

Bu politika, iletileri JavaScript Object Notation (JSON) biçiminden genişletilebilir işaretleme dili (XML) biçimine dönüştürerek iletilerin nasıl dönüştürüleceğini kontrol etmenize olanak tanıyan çeşitli seçenekler sunar.

Bu politika, özellikle XSL kullanarak mesajları dönüştürmek istiyorsanız yararlıdır. JSON yükünü XML'ye 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.

JSON biçimli bir isteğin XML biçimli bir isteğe dönüştürülmek istendiği varsayıldığında, politika bir istek akışına (örneğin, İstek / ProxyEndpoint/PostFlow) eklenir.

Örnekler

JSON ile XML arasında dönüştürme hakkında ayrıntılı bilgi için Yanıt nesnesinde JSON dizisini XML dizisine dönüştürme sorunu başlıklı makaleyi inceleyin.

İsteğ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 OutputVariable'da doldurulan XML biçimli bir mesaj oluşturur. Edge, bu değişkenin içeriğini otomatik olarak sonraki işleme adımının mesajı 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çermelidir. Bu değer, 255 karakteri aşmalıdır.

İsteğe bağlı olarak, politikayı<DisplayName> yönetim arayüzü proxy düzenleyicisinde farklı bir doğal dil adı kullanabilir.

Yok Zorunlu
continueOnError

Bir politika başarısız olduğunda hata döndürmesi için false olarak ayarlayın. Bu beklenen bir durumdur çoğu politika için geçerli olur.

Akış yürütmenin bir politikadan sonra bile devam etmesi için true olarak ayarlayın başarısız olur.

false İsteğe bağlı
enabled

Politikayı uygulamak için true olarak ayarlayın.

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

true İsteğe bağlı
async

Bu özelliğin desteği sonlandırıldı.

false Kullanımdan kaldırıldı

&lt;DisplayName&gt; öğ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 name özelliğinin değeri: kullanılır.

Varlık İsteğe bağlı
Tür Dize

<Source> öğesi

Dönüştürmek istediğiniz JSON mesajını içeren değişken, istek veya yanıt.

<Source> tanımlanmamışsa mesaj olarak değerlendirilir (bu, politika bir istek akışına eklendiğinde istek olarak, bir yanıt akışına eklendiğinde ise yanıt olarak çözümlenir).

Kaynak değişken çözümlenemezse veya ileti olmayan bir türde çözümlenirse politika hata verir.

<Source>request</Source>
Varsayılan Politikanın API proxy akışına eklendiği yere göre belirlenen istek veya yanıt
Varlık (Presence) İsteğe bağlı
Tür mesaj

<OutputVariable> öğesi

JSON'dan XML biçimine dönüştürme işleminin sonucunu depolar. Bu değer genellikle kaynakla aynıdır. 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'ye 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 kabul edilir. Örneğin, source değeri request ise OutputVariable varsayılan olarak request olur.

<OutputVariable>request</OutputVariable>
Varsayılan Politikanın API proxy akışına eklendiği yere göre belirlenen istek veya yanıt
Varlık (Presence) <Source> öğesinde tanımlanan değişkenin türü dize olduğunda bu öğe zorunludur.
Tür mesaj

<Options>/<OmitXmlDeclaration>

XML ad alanının çıkıştan çıkarılacağını belirtir. Varsayılan değer false'dır. Bu, ad alanının çıkışa dahil edileceği anlamına gelir.

Ö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ı desteklemezken XML belgeleri genellikle ad alanları gerektirir. NamespaceBlockName, politikadan oluşturulan XML'de ad alanı tanımının kaynağı olarak hizmet veren bir JSON özelliği tanımlamanıza olanak tanır. (Bu, kaynak JSON'ın, sonuçta elde edilen XML'yi kullanan uygulama tarafından beklenen bir ad alanına eşlenebilecek bir özellik sağlaması gerektiği anlamına gelir.)

Örneğin, aşağıdaki ayarlar:

<NamespaceBlockName>#namespaces</NamespaceBlockName>
<DefaultNamespaceNodeName>$default</DefaultNamespaceNodeName>
<NamespaceSeparator>:</NamespaceSeparator>

, kaynak JSON'da #namespaces adlı bir özelliğin bulunduğunu ve bu özelliğin en az bir ad alanı içerdiğini gösterir. Ö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"
   }
}

dönüştürülü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ış bir kök öğesi olmayan JSON'dan XML'ye dönüştürdüğünüzde kök öğe adını belirtir.

Örneğin, JSON şu şekilde görünüyorsa:

{
  "abc": "123",
  "efg": "234"
}

Ayrıca <ObjectRootElementName> öğesini şu şekilde ayarladınız:

<ObjectRootElementName>Root</ObjectRootElementName>

Sonuçta 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 öğeleri yerine XML özelliklerine dönüştürüleceğini belirtmenize olanak tanır.

Ö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",
    }
}

ş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 XML özelliklerine dönüştürür. Örneğin, özelliğin önekinin @ olarak ayarlandığı yerler:

<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ürülür:

<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 bir 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ürülür:

<Array>
  <Item>John Cabot</Item>
  <Item>
    <explorer>Pedro Cabral</explorer>
  </Item>
  <Item>John Smith</Item>
</Array>

<Options>/<Indent>

XML çıkıntısının girintili olacağını belirtir. Varsayılan değer false'dır. Bu, girintileme yapılmayacağı anlamına gelir.

Örneğin, aşağıdaki ayar, politikayı çıktıyı girintileyecek şekilde yapılandırır:

<Indent>true</Indent>

JSON girişi şu biçimdeyse:

{"n": [1, 2, 3] }

Girintileme olmadan çı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> öğ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'ı dönüştürür:

{
    "person": {
        "firstName": "John",
        "lastName": "Smith",
        "age": 25
    }
}

şu XML yapısına dönüştürülür:

<person>
  <firstName>John</firstName>25<lastName>Smith</lastName>
</person>

TextNodeName belirtilmezse XML, 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ğeri gösterir. Varsayılan olarak değer NULL'dır.

Ö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"}

XML öğesine:

<person></person>

Boş değer için değer belirtilmediğinde (veya I_AM_NULL dışında bir değer belirtildiğinde) aynı yük şu şekilde dönüştürülür:

<person>I_AM_NULL</person>

<Options>/<InvalidCharsReplacement> öğesi

Ayrıştırıcıda sorunlara neden olabilecek geçersiz XML'nin işlenmesine yardımcı olmak için bu ayar, 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 dönüştürülür:

<First_Name>John<First_Name>

Kullanım notları

Tipik bir arabuluculuk senaryosunda, gelen istek akışındaki bir JSON-XML politikası genellikle giden yanıt akışındaki bir XML-JSON politikasıyla eşleştirilir. Politikaları bu şekilde birleştirerek, yalnızca XML'i doğal olarak destekleyen hizmetler için bir JSON API'si kullanıma sunulabilir.

Varsayılan (boş) JSON - XML politikasını uygulamak ve yapılandırma öğelerini gerektiği gibi yinelemeli olarak eklemek genellikle yararlıdır.

API'lerin, JSON ve XML gerektirebilecek çeşitli istemci uygulamaları tarafından kullanıldığı senaryolarda, yanıtın biçimi koşullu olarak yürütülecek JSON'dan XML'ye ve XML'den JSON'a politikaları yapılandırılarak 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 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.
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.
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.
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.
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:
  • Kapsam dışında (politikanın yürütüldüğü belirli akışta kullanılamaz) veya
  • çözülemiyor (tanımlanmamış)

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