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
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. | build |
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 . |
build |
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 . |
build |
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. |
build |
steps.jsontoxml.SourceUnavailable |
500 |
This error occurs if the message
variable specified in the <Source> element of the JSON to XML policy is either:
|
build |
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>
Powiązane artykuły
- Z XML na JSON: z XML na JSON
- Transformacja XSL: zasada przekształcania XSL