JSONtoXML politikası

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>

&lt;JSONToXML&gt; ö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ı. 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

&lt;Source&gt; öğ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

&lt;OutputVariable&gt; öğ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

&lt;Options&gt;/&lt;OmitXmlDeclaration&gt;

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>

&lt;Options&gt;/&lt;NamespaceBlockName&gt;
&lt;Options&gt;/&lt;DefaultNamespaceNodeName&gt;
&lt;Options&gt;/&lt;NamespaceSeparator&gt; öğ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>

&lt;Options&gt;/&lt;ObjectRootElementName&gt;

&lt;ObjectRootElementName&gt; 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"
}

&lt;ObjectRootElementName&gt; öğ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>

&lt;Options&gt;/&lt;AttributeBlockName&gt;
&lt;Options&gt;/&lt;AttributePrefix&gt; öğ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>

&lt;Options&gt;/&lt;ArrayRootElementName&gt;
&lt;Options&gt;/&lt;ArrayItemElementName&gt; öğ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>

&lt;Options&gt;/&lt;Indent&gt;

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>

&lt;Options&gt;/&lt;TextNodeName&gt; öğ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>

&lt;Options&gt;/&lt;NullValue&gt; öğ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>

&lt;Options&gt;/&lt;InvalidCharsReplacement&gt; öğ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.
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