Przeglądasz dokumentację Apigee Edge.
Otwórz dokumentację Apigee X. Informacje
Co
Ta zasada konwertuje wiadomości z formatu JavaScript Object Notation (JSON) na rozszerzalny język znaczników (XML), dzięki czemu masz kilka opcji kontrolowania sposobu konwertowania wiadomości.
Ta zasada jest szczególnie przydatna, jeśli chcesz przekształcać wiadomości w formacie XSL. Po przekonwertowaniu ładunku JSON na format XML użyj zasady przekształcania XSL z niestandardowym arkuszem stylów, aby wykonać odpowiednie przekształcenie.
Zakładając, że intencją jest konwersja żądania w formacie JSON na żądanie w formacie XML, zasada zostanie dołączona do przepływu żądania (na przykład Request / ProxyEndpoint / PostFlow).
Sample
Szczegółowe omówienie konwertowania między formatami JSON i XML znajdziesz na http://community.apigee.com/articles/1839/converting-between-xml-and-json-what-you-need-to-k.html.
Konwertowanie żądania
<JSONToXML name="jsontoxml"> <Source>request</Source> <OutputVariable>request</OutputVariable> </JSONToXML>
Ta konfiguracja pobiera wiadomość żądania w formacie JSON jako źródło, a następnie tworzy wiadomość w formacie XML, którą wypełnia zmienna wyjściowa request
. Edge automatycznie używa zawartości tej zmiennej jako komunikatu w następnym kroku przetwarzania.
Odwołanie do elementu
Poniżej znajdziesz elementy i atrybuty, które możesz skonfigurować w tej zasadzie.
<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>
Atrybuty <JSONToXML>
Tabela poniżej zawiera opis atrybutów wspólnych dla wszystkich elementów nadrzędnych zasad:
Atrybut | Opis | Domyślne | Obecność |
---|---|---|---|
name |
Wewnętrzna nazwa zasady. Wartość atrybutu Opcjonalnie możesz użyć elementu |
Nie dotyczy | Wymagane |
continueOnError |
Ustaw wartość Ustaw jako |
false | Opcjonalnie |
enabled |
Ustaw jako Ustaw wartość |
prawda | Opcjonalnie |
async |
Ten atrybut został wycofany. |
false | Wycofano |
Element <DisplayName>
Użyj oprócz atrybutu name
, aby oznaczyć zasadę w edytorze serwera proxy interfejsu zarządzania inną nazwą w języku naturalnym.
<DisplayName>Policy Display Name</DisplayName>
Domyślne |
Nie dotyczy Jeśli pominiesz ten element, zostanie użyta wartość atrybutu |
---|---|
Obecność | Opcjonalnie |
Typ | Ciąg znaków |
Element <Source>
Zmienna, żądanie lub odpowiedź zawierające wiadomość w formacie JSON, którą chcesz przekonwertować na format XML.
Jeśli zasada <Source>
nie jest zdefiniowana, jest traktowana jako wiadomość (która przechodzi do żądania, gdy zasada jest dołączona do przepływu żądań lub jako odpowiedź, gdy zasada jest dołączona do procesu odpowiedzi).
Jeśli nie można znaleźć zmiennej źródłowej lub przyjmuje ona typ inny niż wiadomość, zasada zgłasza błąd.
<Source>request</Source>
Domyślnie | żądanie lub odpowiedź, zależnie od tego, gdzie zasada zostanie dodana do procesu serwera proxy interfejsu API |
Obecność | Opcjonalnie |
Typ | wiadomość |
Element <outputVariable>
Przechowuje dane wyjściowe konwersji w formacie JSON na XML. Zwykle jest to wartość taka sama jak wartość źródła, czyli zwykle żądanie JSON jest konwertowane na żądanie XML.
Ładunek wiadomości JSON jest analizowany i konwertowany na format XML, a nagłówek HTTP Content-type
wiadomości w formacie XML jest ustawiony na text/xml;charset=UTF-8
.
Jeśli OutputVariable
nie jest określony, source
jest traktowany jako OutputVariable
. Jeśli np. source
to request
, OutputVariable
przyjmuje wartość domyślną request
.
<OutputVariable>request</OutputVariable>
Domyślnie | żądanie lub odpowiedź, zależnie od tego, gdzie zasada zostanie dodana do procesu serwera proxy interfejsu API |
Obecność | Ten element jest wymagany, gdy zmienna zdefiniowana w elemencie <Source> jest ciągiem znaków. |
Typ | wiadomość |
<Opcje>/<OmitXmlDeklaracja>
Określa pomijanie przestrzeni nazw XML w danych wyjściowych. Wartość domyślna to false
, co oznacza, że w danych wyjściowych trzeba uwzględnić przestrzeń nazw.
Na przykład to ustawienie konfiguruje zasadę pomijania przestrzeni nazw:
<OmitXmlDeclaration>true</OmitXmlDeclaration>
<Options>/<NamespaceBlockName>
<Options>/<DefaultNamespaceNodeName>
<Options>/<NamespaceSeparator> Elementy
Pliki JSON nie obsługują przestrzeni nazw, a dokumenty XML często ich wymagają.
NamespaceBlockName
umożliwia zdefiniowanie właściwości JSON, która służy jako źródło definicji przestrzeni nazw w pliku XML wygenerowanym przez zasadę. Oznacza to, że źródłowy plik JSON musi zawierać właściwość, którą można zmapować na przestrzeń nazw, która jest oczekiwana przez aplikację korzystającą z utworzonego kodu XML.
Mogą to być na przykład te ustawienia:
<NamespaceBlockName>#namespaces</NamespaceBlockName> <DefaultNamespaceNodeName>$default</DefaultNamespaceNodeName> <NamespaceSeparator>:</NamespaceSeparator>
wskazuje, że w źródłowym pliku JSON istnieje właściwość o nazwie #namespaces
, która zawiera co najmniej 1 przestrzeń nazw wyznaczoną jako domyślną. Na przykład:
{ "population": { "#namespaces": { "$default": "http://www.w3.org/1999/people", "exp": "http://www.w3.org/1999/explorers" }, "person": "John Smith", "exp:person": "Pedro Cabral" } }
konwertuje na:
<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> określa nazwę elementu głównego podczas konwersji z formatu JSON, który nie ma nazwanego elementu głównego, na format XML.
Jeśli na przykład plik JSON wygląda tak:
{ "abc": "123", "efg": "234" }
A dla elementu <ObjectRootElementName> ustaw:
<ObjectRootElementName>Root</ObjectRootElementName>
Wynikowy kod XML wygląda tak:
<Root> <abc>123</abc> <efg>234</efg> </Root>
<Opcje>/<AttributeBlockName>
Elementy <Options>/<AttributePrefix>
<AttributeBlockName>
pozwala określić, kiedy elementy JSON mają być konwertowane na atrybuty XML (a nie na elementy XML).
Na przykład to ustawienie konwertuje właściwości wewnątrz obiektu o nazwie #attrs
na atrybuty XML:
<AttributeBlockName>#attrs</AttributeBlockName>
Ten obiekt JSON:
{ "person" : { "#attrs" : { "firstName" : "John", "lastName" : "Smith" }, "occupation" : "explorer", } }
jest konwertowany na następującą strukturę XML:
<person firstName="John" lastName="Smith"> <occupation>explorer</occupation> </person>
<AttributePrefix>
konwertuje właściwość, której nazwa zaczyna się od określonego prefiksu, na atrybuty XML. Gdy prefiks atrybutu jest ustawiony na @
, na przykład:
<AttributePrefix>@</AttributePrefix>
Konwertuje następujący obiekt JSON:
{ "person" : { "@firstName" : "John", "@lastName" : "Smith" "occupation" : "explorer", } }
do następującej struktury XML:
<person firstName="John" lastName="Smith"> <occupation>explorer</occupation> </person>
<Options>/<SlateRootElementName>
<Opcje>/<Element_tablicy_elementu>
Konwertuje tablicę JSON na listę elementów XML o określonych nazwach elementów nadrzędnych i podrzędnych.
Mogą to być na przykład te ustawienia:
<ArrayRootElementName>Array</ArrayRootElementName> <ArrayItemElementName>Item</ArrayItemElementName>
konwertuje tę tablicę JSON:
[ "John Cabot", { "explorer": "Pedro Cabral" }, "John Smith" ]
w następującą strukturę XML:
<Array> <Item>John Cabot</Item> <Item> <explorer>Pedro Cabral</explorer> </Item> <Item>John Smith</Item> </Array>
<Opcje>/<Wcięcie>
Określa wcięcie danych wyjściowych XML. Wartość domyślna to false
, co oznacza, że nie należy dodawać wcięcia.
Na przykład to ustawienie konfiguruje wcięcie danych wyjściowych:
<Indent>true</Indent>
Jeśli dane wejściowe JSON mają postać:
{"n": [1, 2, 3] }
Dane wyjściowe bez wcięć wyglądają tak:
<Array><n>1</n><n>2</n><n>3</n></Array>
Po włączeniu wcięć dane wyjściowe są takie:
<Array> <n>1</n> <n>2</n> <n>3</n> </Array>
Element <Options>/<TextNodeName>
Konwertuje właściwość JSON na węzeł tekstowy XML o określonej nazwie. Na przykład to ustawienie:
<TextNodeName>age</TextNodeName>
konwertuje ten plik JSON:
{ "person": { "firstName": "John", "lastName": "Smith", "age": 25 } }
do tej struktury XML:
<person> <firstName>John</firstName>25<lastName>Smith</lastName> </person>
Jeśli TextNodeName
nie zostanie określony, kod XML zostanie wygenerowany przy użyciu ustawienia domyślnego dla węzła tekstowego:
<person> <firstName>John</firstName> <age>25</age> <lastName>Smith</lastName> </person>
Element <Options>/<NullValue>
Wskazuje wartość null. Wartość domyślna to NULL
.
Na przykład to ustawienie:
<NullValue>I_AM_NULL</NullValue>Konwertuje następujący obiekt JSON:
{"person" : "I_AM_NULL"}
do tego elementu XML:
<person></person>
Jeśli dla wartości null nie określono żadnej wartości (lub wartości innej niż I_AM_NULL
), ten sam ładunek zostanie przekonwertowany na:
<person>I_AM_NULL</person>
Element <Options>/<InvalidCharsReplacement>
Aby ułatwić obsługę nieprawidłowego kodu XML, który może powodować problemy z parserem, to ustawienie zastępuje wszystkie elementy JSON, które generują nieprawidłowy kod XML, ciągiem tekstowym. Na przykład to ustawienie:
<InvalidCharsReplacement>_</InvalidCharsReplacement>
Konwertuje ten obiekt JSON
{ "First%%%Name": "John" }
do tej struktury XML:
<First_Name>John<First_Name>
Zastosowanie
W typowym scenariuszu zapośredniczenia zasady JSON-XML dotyczące przepływu żądań przychodzących są często łączone z zasadą XMLtoJSON na potrzeby przepływu odpowiedzi wychodzących. Dzięki połączeniu zasad w ten sposób interfejs JSON API może zostać ujawniony w przypadku usług, które natywnie obsługują tylko kod XML.
Często przydaje się zastosowanie domyślnego (pustego) pliku JSON do zasady XML i iteracyjnie dodawanie elementów konfiguracji zgodnie z wymaganiami.
W sytuacjach, gdy interfejsy API są używane przez różne aplikacje klienckie, które mogą wymagać formatu JSON i XML, format odpowiedzi można ustawić dynamicznie, konfigurując format JSON jako XML i XML, aby warunkowo wykonywać zasady JSON. Implementację tego scenariusza znajdziesz w sekcji Zmienne i warunki przepływu.
Schematy
Informacje o błędach
W tej sekcji opisujemy kody błędów i komunikaty o błędach, które są zwracane, oraz zmienne błędów ustawiane przez Edge, gdy ta zasada wywołuje błąd. Te informacje są ważne, jeśli opracowujesz reguły dotyczące błędów do obsługi takich błędów. Więcej informacji znajdziesz w sekcjach Co musisz wiedzieć o błędach zasad i Postępowanie w przypadku błędów.
Błędy w czasie wykonywania
Te błędy mogą wystąpić podczas wykonywania zasady.
Kod błędu | Stan HTTP | Przyczyna | Napraw |
---|---|---|---|
steps.jsontoxml.ExecutionFailed |
500 | Ładunek wejściowy (JSON) jest pusty lub dane wejściowe (JSON) przekazane do zasady JSON do XML są nieprawidłowe lub uszkodzone. | build |
steps.jsontoxml.InCompatibleTypes |
500 | Ten błąd występuje, jeśli typ zmiennej zdefiniowanej w elemencie <Source> i elemencie <OutputVariable> są różne. Typ zmiennych w elemencie <Source> i elemencie <OutputVariable> musi być taki sam. Prawidłowe typy to message i string . |
build |
steps.jsontoxml.InvalidSourceType |
500 | Ten błąd występuje, jeśli typ zmiennej użytej do zdefiniowania elementu <Source> jest nieprawidłowy. Prawidłowe typy zmiennych to message i string . |
build |
steps.jsontoxml.OutputVariableIsNotAvailable |
500 | Ten błąd występuje, jeśli zmienna określona w elemencie <Source> zasady JSON to XML jest ciągiem znaków, a element <OutputVariable> nie jest zdefiniowany.
Element <OutputVariable> jest wymagany, gdy zmienna zdefiniowana w elemencie <Source> jest ciągiem znaków. |
build |
steps.jsontoxml.SourceUnavailable |
500 |
Ten błąd występuje, jeśli zmienna message określona w elemencie <Source> zasady JSON to XML ma jedną z tych wartości:
|
build |
Błędy wdrażania
Brak.
Zmienne błędów
Te zmienne są ustawiane, gdy wystąpi błąd środowiska wykonawczego. Więcej informacji znajdziesz w artykule Co musisz wiedzieć o błędach związanych z naruszeniem zasad.
Zmienne | Gdzie | Przykład |
---|---|---|
fault.name="fault_name" |
fault_name to nazwa błędu podana w tabeli Błędy środowiska wykonawczego powyżej. Nazwa błędu to ostatnia część kodu. | fault.name Matches "SourceUnavailable" |
jsontoxml.policy_name.failed |
policy_name to określona przez użytkownika nazwa zasady, która spowodowała błąd. | jsontoxml.JSON-to-XML-1.failed = true |
Przykładowa odpowiedź na błąd
{ "fault": { "faultstring": "JSONToXML[JSON-to-XML-1]: Source xyz is not available", "detail": { "errorcode": "steps.json2xml.SourceUnavailable" } } }
Przykładowa reguła błędu
<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>
Powiązane artykuły
- XML to JSON: zasady z XML na JSON
- Przekształcenie XSL: zasady przekształcania XSL