<ph type="x-smartling-placeholder"></ph>
Sie sehen die Dokumentation zu Apigee Edge.
Gehen Sie zur
Apigee X-Dokumentation. Weitere Informationen

Was
Mit dieser Richtlinie werden Nachrichten aus dem JSON-Format (JavaScript Object Notation) in das erweiterbare XML-Format konvertiert. Sie haben dabei mehrere Möglichkeiten, die Konvertierung von Nachrichten zu steuern.
Diese Richtlinie ist insbesondere nützlich, wenn Sie Nachrichten mit XSL transformieren möchten. Nachdem Sie eine JSON-Nutzlast in XML konvertiert haben, verwenden Sie die XSL-Transformationsrichtlinie mit einem benutzerdefinierten Stylesheet, um die gewünschte Transformation durchzuführen.
Wenn Sie also eine Anfrage im JSON-Format in eine XML-formatierte Anfrage konvertieren, wird die Richtlinie an einen Anfrageablauf angehängt (z. B. Request / ProxyEndpoint/PostFlow).
Beispiele
Ausführliche Informationen zum Konvertieren von JSON und XML finden Sie unter http://community.apigee.com/articles/1839/converting-between-xml-and-json-what-you-need-to-k.html.
Anfrage konvertieren
<JSONToXML name="jsontoxml"> <Source>request</Source> <OutputVariable>request</OutputVariable> </JSONToXML>
Diese Konfiguration verwendet eine JSON-formatierte Anfragenachricht als Quelle und erstellt eine XML-formatierte Nachricht, die in die request
OutputVariable eingetragen wird. Rand
verwendet den Inhalt dieser Variablen automatisch als Nachricht für den nächsten Verarbeitungsschritt.
Elementverweis
Die folgenden Elemente und Attribute können Sie für diese Richtlinie konfigurieren:
<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>-Attribute
In der folgenden Tabelle werden Attribute beschrieben, die für alle übergeordneten Richtlinienelemente gelten:
Attribut | Beschreibung | Standard | Präsenz |
---|---|---|---|
name |
Der interne Name der Richtlinie. Der Wert des Attributs Optional können Sie das Element |
– | Erforderlich |
continueOnError |
Legen Sie Legen Sie |
false | Optional |
enabled |
Setzen Sie den Wert auf Legen Sie |
true | Optional |
async |
Dieses Attribut wurde verworfen. |
false | Veraltet |
<DisplayName>-Element
Wird zusätzlich zum Attribut name
verwendet, um die Richtlinie im Proxy-Editor der Verwaltungs-UI mit einem anderen Namen in einer natürlichen Sprache zu versehen.
<DisplayName>Policy Display Name</DisplayName>
Standardeinstellung |
– Wenn Sie dieses Element weglassen, wird der Wert des Namensattributs |
---|---|
Präsenz | Optional |
Typ | String |
<Source>-Element
Die Variable, Anfrage oder Antwort, die die JSON-Nachricht enthält, die Sie in XML konvertieren möchten.
Wenn <Source>
nicht definiert ist, wird sie als Nachricht behandelt. Diese löst sich in eine Anfrage auf, wenn die Richtlinie an einen Anfragefluss angehängt ist, oder in eine Antwort, wenn die Richtlinie an einen Antwortablauf angehängt ist.
Wenn die Quellvariable nicht aufgelöst werden kann oder in einen Nicht-Nachrichtentyp aufgelöst wird, gibt die Richtlinie einen Fehler aus.
<Source>request</Source>
Standard | Anfrage oder Antwort, je nachdem, wo die Richtlinie dem API-Proxy-Ablauf hinzugefügt wird |
Präsenz | Optional |
Typ | message |
<OutputVariable>-Element
Speichert die Ausgabe der Konversion von JSON in das XML-Format. Dies ist in der Regel derselbe Wert wie die Quelle, d. h. normalerweise wird eine JSON-Anfrage in eine XML-Anfrage konvertiert.
Die Nutzlast der JSON-Nachricht wird geparst und in XML konvertiert. Der Header für den HTTP-Inhaltstyp der XML-formatierten Nachricht wird auf text/xml;charset=UTF-8
gesetzt.
Wenn OutputVariable
nicht angegeben ist, wird source
als OutputVariable
behandelt. Beispiel: Wenn source
request
ist, dann wird OutputVariable
standardmäßig auf request
gesetzt.
<OutputVariable>request</OutputVariable>
Standard | Anfrage oder Antwort, je nachdem, wo die Richtlinie dem API-Proxy-Ablauf hinzugefügt wird |
Präsenz | Das Element ist obligatorisch, wenn die im <Source> -Element definierte Variable vom Typ „String“ ist. |
Typ | message |
<Options>/<OmitXmlDeclaration>
Gibt an, dass der XML-Namespace aus der Ausgabe ausgelassen wird. Der Standardwert ist false
. Das bedeutet, dass der Namespace in der Ausgabe enthalten ist.
Folgende Einstellung konfiguriert die Richtlinie beispielsweise so, dass der Namespace weggelassen wird:
<OmitXmlDeclaration>true</OmitXmlDeclaration>
<Options>/<NamespaceBlockName>
<Options>/<DefaultNamespaceNodeName>
<Options>/<NamespaceSeparator>-Elemente
JSON unterstützt keine Namespaces, während XML-Dokumente diese häufig benötigen.
Mit NamespaceBlockName
können Sie ein JSON-Attribut definieren, das als Quelle einer Namespace-Definition in der durch die Richtlinie erstellten XML-Datei dient. (Die Quell-JSON muss also ein Attribut bereitstellen, das einem Namespace zugeordnet werden kann, der von der die resultierende XML aufnehmenden Anwendung erwartet wird.)
Zum Beispiel die folgenden Einstellungen:
<NamespaceBlockName>#namespaces</NamespaceBlockName> <DefaultNamespaceNodeName>$default</DefaultNamespaceNodeName> <NamespaceSeparator>:</NamespaceSeparator>
Gibt an, dass das Attribut #namespaces
in der JSON-Quelldatei vorhanden ist, in der mindestens ein Namespace als Standard ausgewiesen ist. Beispiel:
{ "population": { "#namespaces": { "$default": "http://www.w3.org/1999/people", "exp": "http://www.w3.org/1999/explorers" }, "person": "John Smith", "exp:person": "Pedro Cabral" } }
konvertiert zu:
<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> gibt bei der Konvertierung von JSON (in dem kein benanntes Root-Element existiert) zu XML den Namen des Root-Elements an.
Wenn die JSON-Datei beispielsweise so aussieht:
{ "abc": "123", "efg": "234" }
Und Sie <ObjectRootElementName> so festlegen:
<ObjectRootElementName>Root</ObjectRootElementName>
Dann wird die resultierende XML folgendermaßen aussehen:
<Root> <abc>123</abc> <efg>234</efg> </Root>
<Options>/<AttributeBlockName>
<Options>/<AttributePrefix>-Elemente
Mit <AttributeBlockName>
können Sie angeben, wann JSON-Elemente in XML-Attribute (und nicht in XML-Elemente) konvertiert werden.
Folgende Einstellung wandelt beispielsweise Attribute in einem Objekt namens #attrs
in XML-Attribute um:
<AttributeBlockName>#attrs</AttributeBlockName>
Das folgende JSON-Objekt:
{ "person" : { "#attrs" : { "firstName" : "John", "lastName" : "Smith" }, "occupation" : "explorer", } }
wird in folgende XML-Struktur konvertiert:
<person firstName="John" lastName="Smith"> <occupation>explorer</occupation> </person>
<AttributePrefix>
konvertiert das Attribut, das mit dem angegebenen Präfix beginnt, in XML-Attribute. Wenn das Attributpräfix beispielsweise auf @
gesetzt ist:
<AttributePrefix>@</AttributePrefix>
Konvertiert das folgende JSON-Objekt:
{ "person" : { "@firstName" : "John", "@lastName" : "Smith" "occupation" : "explorer", } }
zu der folgenden XML-Struktur:
<person firstName="John" lastName="Smith"> <occupation>explorer</occupation> </person>
<Options>/<ArrayRootElementName>
<Options>/<ArrayItemElementName>-Element
Wandelt ein JSON-Array in eine Liste von XML-Elementen mit angegebenen übergeordneten und untergeordneten Elementnamen um.
Zum Beispiel die folgenden Einstellungen:
<ArrayRootElementName>Array</ArrayRootElementName> <ArrayItemElementName>Item</ArrayItemElementName>
konvertiert das folgende JSON-Array:
[ "John Cabot", { "explorer": "Pedro Cabral" }, "John Smith" ]
in die folgende XML-Struktur:
<Array> <Item>John Cabot</Item> <Item> <explorer>Pedro Cabral</explorer> </Item> <Item>John Smith</Item> </Array>
<Options>/<Indent>
Gibt an, dass die XML-Ausgabe eingerückt werden soll. Der Standardwert ist false
, d. h. nicht einrücken.
Folgende Einstellung konfiguriert die Richtlinie zum Einrücken der Ausgabe:
<Indent>true</Indent>
Wenn die JSON-Eingabe folgendes Format hat:
{"n": [1, 2, 3] }
Dann sieht die Ausgabe ohne Einrückung so aus:
<Array><n>1</n><n>2</n><n>3</n></Array>
Ist die Einrückung aktiviert, lautet die Ausgabe:
<Array> <n>1</n> <n>2</n> <n>3</n> </Array>
<Options>/<TextNodeName>-Element
Wandelt ein JSON-Attribut in einen XML-Textknoten mit dem angegebenen Namen um. Zum Beispiel die folgende Einstellung:
<TextNodeName>age</TextNodeName>
konvertiert diesen JSON-Code:
{ "person": { "firstName": "John", "lastName": "Smith", "age": 25 } }
zu dieser XML-Struktur:
<person> <firstName>John</firstName>25<lastName>Smith</lastName> </person>
Wenn TextNodeName
nicht angegeben ist, wird die XML unter Verwendung der Standardeinstellung für Textknoten generiert:
<person> <firstName>John</firstName> <age>25</age> <lastName>Smith</lastName> </person>
<Options>/<NullValue>-Element
Gibt einen Nullwert an. Der Standardwert ist NULL
.
Zum Beispiel die folgende Einstellung:
<NullValue>I_AM_NULL</NullValue>
{"person" : "I_AM_NULL"}
zum folgenden XML-Element:
<person></person>
Wenn für den Nullwert kein Wert (oder ein anderer Wert als I_AM_NULL
) angegeben ist, wird die gleiche Nutzlast folgendermaßen konvertiert:
<person>I_AM_NULL</person>
<Options>/<InvalidCharsReplacement>-Element
Um ungültige XML zu vermeiden, die zu Problemen mit Parsern führen können, ersetzt diese Einstellung alle JSON-Elemente, die ungültige XML-Daten erzeugen, durch den String. Zum Beispiel die folgende Einstellung:
<InvalidCharsReplacement>_</InvalidCharsReplacement>
Konvertiert dieses JSON-Objekt
{ "First%%%Name": "John" }
zu dieser XML-Struktur:
<First_Name>John<First_Name>
Verwendungshinweise
In einem typischen Vermittlungsszenario wird eine JSON-zu-XML-Richtlinie für den eingehenden Anfragefluss häufig mit einer XMLtoJSON-Richtlinie im ausgehenden Antwortfluss kombiniert. Durch die Kombination der Richtlinien kann eine JSON API für Dienste verfügbar gemacht werden, die nativ nur XML unterstützen.
Es ist oft sinnvoll, die leere Standard-JSON-XML-Richtlinie anzuwenden und die Konfigurationselemente nach Bedarf schrittweise hinzuzufügen.
In Szenarien, in denen APIs von verschiedenen Client-Apps genutzt werden, die entweder JSON und XML erfordern, kann das Format der Antwort dynamisch konfiguriert werden. Dazu konfigurieren Sie JSON-to-XML- und XML-to-JSON-Richtlinien für die bedingte Ausführung. Eine Implementierung dieses Szenarios finden Sie unter Ablaufvariablen und -bedingungen.
Schemas
Fehlerreferenz
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>
Weitere Informationen
- XML zu JSON: XML-zu-JSON-Richtlinie
- XSL-Transformation: XSL-Transformationsrichtlinie