Przeglądasz dokumentację Apigee Edge.
Przejdź do
Dokumentacja Apigee X. informacje.
Co
Ta zasada konwertuje wiadomości z formatu JSON (JavaScript Object Notation) na rozszerzalny języka znaczników (XML), który udostępnia kilka opcji kontrolowania konwertowania wiadomości.
Ta zasada jest szczególnie przydatna, jeśli chcesz przekształcać wiadomości przy użyciu formatu XSL. Po do skonwertowania ładunku JSON na format XML, użyj zasady przekształcenia XSL z niestandardowym arkuszem stylów, aby i przeprowadzi odpowiednie przekształcenie.
Zakładając, że intencją jest przekonwertowanie żądania w formacie JSON na żądanie w formacie XML, zasada będzie dołączona do przepływu żądania (np. Request / ProxyEndpoint / (PostFlow).
Przykłady
Szczegółowe informacje o konwertowaniu plików 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 jako źródło wiadomość żądania w formacie JSON, a następnie tworzy
Komunikat w formacie XML umieszczany w zmiennej wyjściowej request
. Krawędź
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>
<JSONToXML> atrybuty
W tej tabeli opisano atrybuty wspólne dla wszystkich elementów nadrzędnych zasad:
Atrybut | Opis | Domyślny | Obecność |
---|---|---|---|
name |
Wewnętrzna nazwa zasady. Wartość atrybutu Opcjonalnie możesz użyć elementu |
Nie dotyczy | Wymagane |
continueOnError |
Ustaw jako Ustaw jako |
fałsz | Opcjonalnie |
enabled |
Aby egzekwować zasadę, ustaw wartość Aby wyłączyć zasadę, ustaw wartość |
prawda | Opcjonalnie |
async |
Ten atrybut został wycofany. |
fałsz | Wycofano |
<DisplayName> element
Używaj oprócz atrybutu name
do oznaczania zasady w
edytor proxy interfejsu zarządzania z inną nazwą w języku naturalnym.
<DisplayName>Policy Display Name</DisplayName>
Domyślny |
Nie dotyczy Jeśli pominiesz ten element, atrybut |
---|---|
Obecność | Opcjonalnie |
Typ | Ciąg znaków |
<Source> element
zmienną, żądanie lub odpowiedź zawierającą wiadomość JSON, na którą chcesz przekonwertować kod. Plik XML:
Jeśli <Source>
nie jest zdefiniowany, jest traktowany jako komunikat (rozwiązujący
żądania, gdy zasada jest połączona z przepływem żądania, lub w odpowiedzi, gdy zasada jest dołączona
w procesie odpowiedzi).
Jeśli zmiennej źródłowej nie można znaleźć lub przechodzi do typu innego niż wiadomość, zasada powoduje zgłoszenie błędu.
<Source>request</Source>
Domyślnie | żądania lub odpowiedzi zależnie od tego, gdzie zasada została dodana do przepływu serwera proxy interfejsu API; |
Obecność | Opcjonalnie |
Typ | wiadomość |
<OutputVariable> element
Przechowuje dane wyjściowe konwersji w formacie JSON na XML. Jest to zwykle ta sama wartość co parametr czyli zwykle żądanie JSON jest konwertowane na żądanie XML.
Ładunek komunikatu JSON jest analizowany i konwertowany na format XML, a tag HTTP Content-type
nagłówek komunikatu w formacie XML jest ustawiony na text/xml;charset=UTF-8
.
Jeśli nie określisz wartości OutputVariable
, source
będzie traktowana jako
OutputVariable
Jeśli np. source
to request
,
to OutputVariable
przyjmuje domyślną wartość request
.
<OutputVariable>request</OutputVariable>
Domyślnie | żądania lub odpowiedzi zależnie od tego, gdzie zasada została dodana do przepływu serwera proxy interfejsu API; |
Obecność | Ten element jest wymagany, gdy zmienna zdefiniowana w elemencie <Source> ma typ „ciąg znaków”. |
Typ | wiadomość |
<Options>/<OmitXmlDeclaration>
Wskazuje pomijanie przestrzeni nazw XML w danych wyjściowych. Wartość domyślna to false
.
co oznacza, że w danych wyjściowych uwzględnij przestrzeń nazw.
Na przykład to ustawienie powoduje, że zasada pomija przestrzeń nazw:
<OmitXmlDeclaration>true</OmitXmlDeclaration>
<Options>/<NamespaceBlockName>
<Options>/<DefaultNamespaceNodeName>
<Options>/<NamespaceSeparator> elementy
Plik JSON nie obsługuje 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 przestrzeni nazw.
definicji w pliku XML generowanym przez tę zasadę. (Oznacza to, że źródłowy plik JSON musi
udostępnia właściwość, którą można zmapować na przestrzeń nazw oczekiwaną przez aplikację, która
pobiera powstały w ten sposób kod XML).
Są to na przykład te ustawienia:
<NamespaceBlockName>#namespaces</NamespaceBlockName> <DefaultNamespaceNodeName>$default</DefaultNamespaceNodeName> <NamespaceSeparator>:</NamespaceSeparator>
wskazuje, że właściwość o nazwie #namespaces
istnieje w źródłowym pliku JSON, który
zawiera co najmniej jedną przestrzeń nazw wyznaczoną jako domyślna. 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 konwertowania z formatu JSON, który nie ma nazwanego elementu głównego do pliku XML.
Jeśli na przykład plik JSON wygląda tak:
{ "abc": "123", "efg": "234" }
a element <ObjectRootElementName> ustawia się jako:
<ObjectRootElementName>Root</ObjectRootElementName>
W wyniku działania kodu XML zostanie wyświetlony następujący tekst:
<Root> <abc>123</abc> <efg>234</efg> </Root>
<Options>/<AttributeBlockName>
<Options>/<AttributePrefix> elementy
<AttributeBlockName>
umożliwia określenie, kiedy elementy JSON mają być
przekonwertowane na atrybuty XML (a nie elementy XML).
Na przykład to ustawienie konwertuje właściwości w obiekcie o nazwie
#attrs
do atrybutów XML:
<AttributeBlockName>#attrs</AttributeBlockName>
Następujący obiekt JSON:
{ "person" : { "#attrs" : { "firstName" : "John", "lastName" : "Smith" }, "occupation" : "explorer", } }
jest konwertowany do następującej struktury XML:
<person firstName="John" lastName="Smith"> <occupation>explorer</occupation> </person>
<AttributePrefix>
konwertuje właściwość, zaczynając od podanego prefiksu
do atrybutów 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>/<ArrayRootElementName>
<Options>/<ArrayItemElementName> element
Konwertuje tablicę JSON na listę elementów XML z określonym elementem nadrzędnym i podrzędnym nazw.
Są to na przykład te ustawienia:
<ArrayRootElementName>Array</ArrayRootElementName> <ArrayItemElementName>Item</ArrayItemElementName>
konwertuje następującą tablicę JSON:
[ "John Cabot", { "explorer": "Pedro Cabral" }, "John Smith" ]
do następującej struktury XML:
<Array> <Item>John Cabot</Item> <Item> <explorer>Pedro Cabral</explorer> </Item> <Item>John Smith</Item> </Array>
<Options>/<Indent>
Określa wcięcie danych wyjściowych XML. Wartość domyślna to false
.
nie dodawaj wcięcia.
Na przykład to ustawienie konfiguruje w zasadzie wcięcie danych wyjściowych:
<Indent>true</Indent>
Jeśli dane wejściowe JSON mają postać:
{"n": [1, 2, 3] }
W takim przypadku wynik bez wcięć będzie wyglądał tak:
<Array><n>1</n><n>2</n><n>3</n></Array>
Gdy włączysz wcięcie, dane wyjściowe będą następujące:
<Array> <n>1</n> <n>2</n> <n>3</n> </Array>
<Options>/<TextNodeName> element
Konwertuje właściwość JSON na węzeł tekstowy XML o podanej nazwie. Na przykład parametr 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 nie określisz wartości TextNodeName
, zostanie wygenerowany plik XML z ustawieniem domyślnym.
dla węzła tekstowego:
<person> <firstName>John</firstName> <age>25</age> <lastName>Smith</lastName> </person>
<Options>/<NullValue> element
Wskazuje wartość null. Domyślną wartością jest NULL
.
Na przykład to ustawienie:
<NullValue>I_AM_NULL</NullValue>Konwertuje ten obiekt JSON:
{"person" : "I_AM_NULL"}
do następującego elementu XML:
<person></person>
Jeśli dla wartości null nie jest określona żadna wartość (lub wartość inna niż I_AM_NULL
),
ten sam ładunek zostanie przekonwertowany na:
<person>I_AM_NULL</person>
<Options>/<InvalidCharsReplacement> element
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 z tym ciągiem znaków. Na przykład: 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 z JSON na XML w przepływie żądań przychodzących są często w połączeniu z zasadą XMLtoJSON dotyczącą przepływu odpowiedzi wychodzących. Łącząc w ten sposób zasady, Interfejs JSON API można udostępniać w przypadku usług, które natywnie obsługują tylko format XML.
Często warto zastosować domyślną (pustą) zasadę JSON do XML i dodać iteracyjnie w razie potrzeby.
W sytuacjach, gdy interfejsy API są wykorzystywane przez różne aplikacje klienckie, które mogą wymagać kodu JSON i XML, format odpowiedzi można dynamicznie ustawić, konfigurując format JSON na XML i XML Zasady JSON wykonywane warunkowo. Zobacz Zmienne i warunki przepływu , by zademonstrować taki scenariusz.
Schematy
Informacje o błędzie
W tej sekcji opisano kody błędów i komunikaty o błędach, które są zwracane, oraz zmienne błędów ustawiane przez Edge, gdy ta zasada wyzwala błąd. Warto o tym wiedzieć, jeśli rozwijasz reguły błędów, aby obsługi błędów. Więcej informacji znajdziesz w artykule Co musisz wiedzieć o błędach związanych z zasadami i postępowaniu z błędami
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 na XML to jest nieprawidłowy lub źle sformułowany. | build |
steps.jsontoxml.InCompatibleTypes |
500 | Ten błąd występuje, jeśli typ zmiennej zdefiniowanej w elemencie <Source> i
elementy <OutputVariable> są różne. Należy koniecznie doprecyzować,
zmiennych zawartych w elementach <Source> i <OutputVariable>
dopasowania. Prawidłowe typy to message i string . |
build |
steps.jsontoxml.InvalidSourceType |
500 | Ten błąd występuje, jeśli typ zmiennej używanej 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> pliku JSON do
Zasada XML jest typu „ciąg znaków”, a element <OutputVariable> nie został zdefiniowany.
Element <OutputVariable> jest wymagany, gdy zmienna zdefiniowana w parametrze <Source>
element jest typu „ciąg znaków”. |
build |
steps.jsontoxml.SourceUnavailable |
500 |
Ten błąd występuje, jeśli komunikat
określona w elemencie <Source> zasady JSON na XML to:
|
build |
Błędy wdrażania
Brak.
Zmienne błędów
Te zmienne są ustawiane po wystąpieniu błędu działania. Więcej informacji znajdziesz w artykule Podstawowe informacje 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 czasu działania powyżej. Nazwa błędu to ostatnia część kodu błędu. | 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
- Z XML na JSON: z XML na JSON
- Transformacja XSL: zasada przekształcania XSL