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ı

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.
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.
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.
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.
steps.jsontoxml.SourceUnavailable 500 This error occurs if the message variable specified in the <Source> element of the JSON to XML policy is either:
  • out of scope (not available in the specific flow where the policy is being executed) or
  • can't be resolved (is not defined)

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