Stai visualizzando la documentazione di Apigee Edge.
Vai alla sezione
Documentazione di Apigee X. Informazioni
Cosa
Questo criterio converte i messaggi dal formato JSON (JavaScript Object Notation) in messaggi estensibili linguaggio di markup (XML), che offre varie opzioni per controllare la modalità di conversione dei messaggi.
Il criterio è particolarmente utile se vuoi trasformare i messaggi utilizzando XSL. Dopo il giorno convertendo un payload JSON in XML, utilizza il criterio XSL Transform con un foglio di stile personalizzato per eseguire la trasformazione di cui hai bisogno.
Supponendo che l'intento sia convertire una richiesta in formato JSON in una richiesta in formato XML, il criterio verrà collegato a un Flusso di richiesta (ad esempio Request / ProxyEndpoint / PostFlow).
Esempi
Per una discussione dettagliata sulla conversione tra JSON e XML, visita http://community.apigee.com/articles/1839/converting-between-xml-and-json-what-you-need-to-k.html.
Conversione di una richiesta in corso...
<JSONToXML name="jsontoxml"> <Source>request</Source> <OutputVariable>request</OutputVariable> </JSONToXML>
Questa configurazione prende il messaggio di richiesta in formato JSON come origine e poi crea un
Messaggio in formato XML compilato nell'elemento OutputVariable request
. Dispositivi periferici
utilizza automaticamente i contenuti di questa variabile come messaggio per la successiva fase di elaborazione.
Riferimento elemento
Di seguito sono riportati gli elementi e gli attributi che puoi configurare in questo criterio.
<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> attributi
La tabella seguente descrive gli attributi comuni a tutti gli elementi principali del criterio:
Attributo | Descrizione | Predefinito | Presenza |
---|---|---|---|
name |
Il nome interno del criterio. Il valore dell'attributo Se vuoi, puoi utilizzare l'elemento |
N/D | Obbligatorio |
continueOnError |
Imposta il valore su Imposta su |
falso | Facoltativo |
enabled |
Imposta il valore su Imposta |
true | Facoltativo |
async |
Questo attributo è obsoleto. |
falso | Deprecato |
<DisplayName> elemento
Da utilizzare in aggiunta all'attributo name
per etichettare il criterio in
editor proxy della UI di gestione con un nome diverso e in linguaggio naturale.
<DisplayName>Policy Display Name</DisplayName>
Predefinito |
N/D Se ometti questo elemento, il valore dell'attributo |
---|---|
Presenza | Facoltativo |
Tipo | Stringa |
<Source> elemento
La variabile, la richiesta o la risposta, che contiene il messaggio JSON in cui vuoi convertire XML.
Se <Source>
non viene definito, viene considerato come messaggio (e viene risolto
da richiedere quando il criterio è collegato a un flusso di richiesta o una risposta quando il criterio è collegato.
a un flusso di risposta).
Se la variabile di origine non può essere risolta o si risolve in un tipo non messaggio, il criterio genera un errore.
<Source>request</Source>
Predefinita | richiesta o risposta, determinata da dove il criterio viene aggiunto al flusso proxy API |
Presenza | Facoltativo |
Tipo | messaggio |
<OutputVariable> elemento
Archivia l'output della conversione in formato JSON in XML. Di solito corrisponde al valore cioè una richiesta JSON viene convertita in una richiesta XML.
Il payload del messaggio JSON viene analizzato e convertito in XML e il tipo di contenuto HTTP
l'intestazione del messaggio in formato XML sia impostata su text/xml;charset=UTF-8
.
Se OutputVariable
non viene specificato, source
viene considerato
OutputVariable
. Ad esempio, se source
è request
,
poi il valore predefinito di OutputVariable
è request
.
<OutputVariable>request</OutputVariable>
Predefinita | richiesta o risposta, determinata da dove il criterio viene aggiunto al flusso proxy API |
Presenza | Questo elemento è obbligatorio quando la variabile definita nell'elemento <Source> è di tipo stringa. |
Tipo | messaggio |
<Options>/<OmitXmlDeclaration>
Specifica di omettere lo spazio dei nomi XML dall'output. Il valore predefinito è false
e quindi includere lo spazio dei nomi nell'output.
Ad esempio, la seguente impostazione configura il criterio in modo da omettere lo spazio dei nomi:
<OmitXmlDeclaration>true</OmitXmlDeclaration>
<Options>/<NamespaceBlockName>
<Options>/<DefaultNamespaceNodeName>
<Options>/<NamespaceSeparator> elementi
JSON non supporta gli spazi dei nomi, mentre i documenti XML spesso li richiedono.
NamespaceBlockName
consente di definire una proprietà JSON che funge da origine di uno spazio dei nomi
nel codice XML prodotto dal criterio. Ciò significa che il file JSON di origine deve
forniscono una proprietà che può essere mappata in uno spazio dei nomi previsto dall'applicazione
consuma il file XML risultante.
Ad esempio, le seguenti impostazioni:
<NamespaceBlockName>#namespaces</NamespaceBlockName> <DefaultNamespaceNodeName>$default</DefaultNamespaceNodeName> <NamespaceSeparator>:</NamespaceSeparator>
indica che nel JSON di origine è presente una proprietà denominata #namespaces
che
contiene almeno uno spazio dei nomi designato come predefinito. Ad esempio:
{ "population": { "#namespaces": { "$default": "http://www.w3.org/1999/people", "exp": "http://www.w3.org/1999/explorers" }, "person": "John Smith", "exp:person": "Pedro Cabral" } }
converte in:
<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> specifica il nome dell'elemento radice quando esegui la conversione da JSON, che non ha un nome root in XML.
Ad esempio, se il codice JSON viene visualizzato come:
{ "abc": "123", "efg": "234" }
E imposti <ObjectRootElementName> come:
<ObjectRootElementName>Root</ObjectRootElementName>
Il codice XML risultante viene visualizzato come:
<Root> <abc>123</abc> <efg>234</efg> </Root>
<Options>/<AttributeBlockName>
<Options>/<AttributePrefix> elementi
<AttributeBlockName>
consente di specificare quando gli elementi JSON vengono
convertiti in attributi XML (anziché in elementi XML).
Ad esempio, la seguente impostazione converte le proprietà all'interno di un oggetto denominato
#attrs
in attributi XML:
<AttributeBlockName>#attrs</AttributeBlockName>
Il seguente oggetto JSON:
{ "person" : { "#attrs" : { "firstName" : "John", "lastName" : "Smith" }, "occupation" : "explorer", } }
viene convertita nella seguente struttura XML:
<person firstName="John" lastName="Smith"> <occupation>explorer</occupation> </person>
<AttributePrefix>
converte la proprietà iniziando con il prefisso specificato
in attributi XML. In cui il prefisso dell'attributo è impostato su @
, ad esempio:
<AttributePrefix>@</AttributePrefix>
Converte il seguente oggetto JSON:
{ "person" : { "@firstName" : "John", "@lastName" : "Smith" "occupation" : "explorer", } }
alla seguente struttura XML:
<person firstName="John" lastName="Smith"> <occupation>explorer</occupation> </person>
<Options>/<ArrayRootElementName>
<Options>/<ArrayItemElementName> elemento
Converte un array JSON in un elenco di elementi XML con l'elemento principale e secondario specificati i nomi degli utenti.
Ad esempio, le seguenti impostazioni:
<ArrayRootElementName>Array</ArrayRootElementName> <ArrayItemElementName>Item</ArrayItemElementName>
converte il seguente array JSON:
[ "John Cabot", { "explorer": "Pedro Cabral" }, "John Smith" ]
nella seguente struttura XML:
<Array> <Item>John Cabot</Item> <Item> <explorer>Pedro Cabral</explorer> </Item> <Item>John Smith</Item> </Array>
<Options>/<Indent>
Specifica di applicare il rientro all'output XML. Il valore predefinito è false
senza rientro.
Ad esempio, la seguente impostazione configura il criterio in modo da applicare il rientro all'output:
<Indent>true</Indent>
Se l'input JSON è nel formato:
{"n": [1, 2, 3] }
Quindi l'output senza rientro è:
<Array><n>1</n><n>2</n><n>3</n></Array>
Con il rientro attivato, l'output è:
<Array> <n>1</n> <n>2</n> <n>3</n> </Array>
<Options>/<TextNodeName> elemento
Converte una proprietà JSON in un nodo di testo XML con il nome specificato. Ad esempio, la seguente impostazione:
<TextNodeName>age</TextNodeName>
converte questo JSON:
{ "person": { "firstName": "John", "lastName": "Smith", "age": 25 } }
a questa struttura XML:
<person> <firstName>John</firstName>25<lastName>Smith</lastName> </person>
Se TextNodeName
non viene specificato, viene generato il file XML utilizzando l'impostazione predefinita
per un nodo di testo:
<person> <firstName>John</firstName> <age>25</age> <lastName>Smith</lastName> </person>
<Options>/<NullValue> elemento
Indica un valore nullo. Per impostazione predefinita, il valore è NULL
.
Ad esempio, la seguente impostazione:
<NullValue>I_AM_NULL</NullValue>Converte il seguente oggetto JSON:
{"person" : "I_AM_NULL"}
al seguente elemento XML:
<person></person>
Dove non viene specificato nessun valore (o un valore diverso da I_AM_NULL
) per il valore Null,
lo stesso payload viene convertito in:
<person>I_AM_NULL</person>
<Options>/<InvalidCharsReplacement> elemento
Per facilitare la gestione di XML non validi che potrebbero causare problemi con un parser, questa impostazione sostituisce qualsiasi elemento JSON che produce XML non valido con la stringa. Ad esempio, dell'impostazione:
<InvalidCharsReplacement>_</InvalidCharsReplacement>
Converte questo oggetto JSON
{ "First%%%Name": "John" }
a questa struttura XML:
<First_Name>John<First_Name>
Note sull'utilizzo
In uno scenario di mediazione tipico, un criterio da JSON a XML nel flusso di richieste in entrata è spesso abbinate a un criterio XMLtoJSON sul flusso di risposta in uscita. Combinando i criteri in questo modo, L'API JSON può essere esposta per i servizi che supportano in modo nativo solo XML.
Spesso è utile applicare il criterio JSON predefinito (vuoto) al criterio XML e aggiungere iterativamente di configurazione degli utenti, se necessario.
Per scenari in cui le API vengono utilizzate da diverse app dei clienti che potrebbero richiedere JSON e XML, il formato della risposta può essere impostato dinamicamente configurando da JSON a XML e XML a Criteri JSON da eseguire in modo condizionale. Consulta Variabili e condizioni di flusso per un'implementazione di questo scenario.
Schemi
Messaggi di errore
Questa sezione descrive i codici e i messaggi di errore restituiti, nonché le variabili di errore impostate da Edge quando questo criterio attiva un errore. È importante sapere se stai sviluppando regole di errore per per gestire gli errori. Per saperne di più, consulta Cosa devi sapere sugli errori relativi ai criteri e sulla gestione di errore.
Errori di runtime
Questi errori possono verificarsi quando il criterio viene eseguito.
Codice di errore | Stato HTTP | Causa | Correggi |
---|---|---|---|
steps.jsontoxml.ExecutionFailed |
500 | Il payload di input (JSON) è vuoto oppure l'input (JSON) passato al criterio JSON-XML è non valido o in un formato non valido. | build |
steps.jsontoxml.InCompatibleTypes |
500 | Questo errore si verifica se il tipo di variabile definita nell'elemento <Source> e
L'elemento <OutputVariable> non sono uguali. È obbligatorio che il tipo
variabili contenute negli elementi <Source> e <OutputVariable>
corrispondenze. I tipi validi sono message e string . |
build |
steps.jsontoxml.InvalidSourceType |
500 | Questo errore si verifica se il tipo di variabile utilizzato per definire l'elemento <Source>
non è valido. I tipi di variabili validi sono message e string . |
build |
steps.jsontoxml.OutputVariableIsNotAvailable |
500 | Questo errore si verifica se la variabile specificata nell'elemento <Source> del file JSON per
Il criterio XML è di tipo stringa e l'elemento <OutputVariable> non è definito.
L'elemento <OutputVariable> è obbligatorio quando la variabile definita in <Source> è obbligatorio
è di tipo stringa. |
build |
steps.jsontoxml.SourceUnavailable |
500 |
Questo errore si verifica se il messaggio
specificata nell'elemento <Source> del criterio da JSON a XML è:
|
build |
Errori di deployment
Nessuno.
Variabili di errore
Queste variabili vengono impostate quando si verifica un errore di runtime. Per ulteriori informazioni, vedi Cosa devi sapere sugli errori relativi alle norme.
Variabili | Dove | Esempio |
---|---|---|
fault.name="fault_name" |
fault_name è il nome dell'errore, come elencato nella precedente tabella Errori di runtime. Il nome dell'errore è l'ultima parte del codice di errore. | fault.name Matches "SourceUnavailable" |
jsontoxml.policy_name.failed |
policy_name è il nome specificato dall'utente del criterio che ha generato l'errore. | jsontoxml.JSON-to-XML-1.failed = true |
Esempio di risposta di errore
{ "fault": { "faultstring": "JSONToXML[JSON-to-XML-1]: Source xyz is not available", "detail": { "errorcode": "steps.json2xml.SourceUnavailable" } } }
Esempio di regola di errore
<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>
Argomenti correlati
- Da XML a JSON: da XML a JSON norme
- Trasformazione XSL: criterio di trasformazione XSL