Norme di XMLtoJSON

Stai visualizzando la documentazione di Apigee Edge.
Consulta la documentazione di Apigee X.
info

Cosa

Questo criterio converte i messaggi dal formato XML (Extensible Markup Language) a JSON (JavaScript Object Notation), offrendoti diverse opzioni per controllare la modalità di conversione dei messaggi.

Supponendo che l'intento sia quello di convertire una risposta in formato XML in una risposta in formato JSON, il criterio verrà collegato a un flusso di risposta (ad esempio, Response / ProxyEndpoint/PostFlow).

Informazioni

In uno scenario di mediazione tipico, un criterio da JSON a XML nel flusso di richieste in entrata viene spesso abbinato a un criterio da XML a JSON nel flusso di risposte in uscita. Combinando i criteri in questo modo, è possibile esporre un'API JSON per i servizi di backend che supportano in modo nativo solo XML.

Per gli scenari in cui le API vengono utilizzate da diverse app client che potrebbero richiedere JSON o XML, il formato della risposta può essere impostato dinamicamente configurando i criteri di conversione da JSON a XML e da XML a JSON da eseguire in modo condizionale. Per un'implementazione di questo scenario, consulta la sezione Variabili e condizioni del flusso.


Esempi

Per una discussione dettagliata sulla conversione tra JSON e XML, consulta Conversione tra XML e JSON con Apigee: cosa devi sapere.

Conversione di una risposta

<XMLToJSON name="ConvertToJSON">
  <Options>
  </Options>
  <OutputVariable>response</OutputVariable>
  <Source>response</Source>
</XMLToJSON>

Questa configurazione, che è la configurazione minima richiesta per convertire XML in JSON, prende un messaggio di risposta in formato XML come origine e poi crea un messaggio in formato JSON che viene compilato in response OutputVariable. Edge utilizza automaticamente i contenuti di questa variabile come messaggio per il passaggio di elaborazione successivo.


Riferimento elemento

Di seguito sono riportati gli elementi e gli attributi che puoi configurare in queste norme.

<XMLToJSON async="false" continueOnError="false" enabled="true" name="XML-to-JSON-1">
    <DisplayName>XML to JSON 1</DisplayName>
    <Source>response</Source>
    <OutputVariable>response</OutputVariable>
    <Options>
        <RecognizeNumber>true</RecognizeNumber>
        <RecognizeBoolean>true</RecognizeBoolean>
        <RecognizeNull>true</RecognizeNull>
        <NullValue>NULL</NullValue>
        <NamespaceBlockName>#namespaces</NamespaceBlockName>
        <DefaultNamespaceNodeName>&</DefaultNamespaceNodeName>
        <NamespaceSeparator>***</NamespaceSeparator>
        <TextAlwaysAsProperty>true</TextAlwaysAsProperty>
        <TextNodeName>TEXT</TextNodeName>
        <AttributeBlockName>FOO_BLOCK</AttributeBlockName>
        <AttributePrefix>BAR_</AttributePrefix>
        <OutputPrefix>PREFIX_</OutputPrefix>
        <OutputSuffix>_SUFFIX</OutputSuffix>
        <StripLevels>2</StripLevels>
        <TreatAsArray>
            <Path unwrap="true">teachers/teacher/studentnames/name</Path>
        </TreatAsArray>
    </Options>
    <!-- Use Options or Format, not both -->
    <Format>yahoo</Format>
</XMLToJSON>

Attributi <XMLtoJSON>

<XMLtoJSON async="false" continueOnError="false" enabled="true" name="XML-to-JSON-1">

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 name può Deve contenere lettere, numeri, spazi, trattini, trattini bassi e punti. Questo valore non può superare i 255 caratteri.

Se vuoi, puoi utilizzare l'elemento <DisplayName> per etichettare il criterio in l'editor proxy della UI di gestione con un nome diverso in linguaggio naturale.

N/D Obbligatorio
continueOnError

Imposta il valore su false per restituire un errore quando un criterio non viene eseguito. Si tratta di un comportamento previsto per la maggior parte dei criteri.

Imposta su true per fare in modo che l'esecuzione del flusso continui anche dopo un criterio non riesce.

falso Facoltativo
enabled

Imposta il valore su true per applicare il criterio.

Imposta false per disattivare il criterio. Il criterio non verrà applicata anche se rimane collegata a un flusso.

true Facoltativo
async

Questo attributo è obsoleto.

falso Deprecato

&lt;DisplayName&gt; 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 name del criterio è in uso.

Presenza Facoltativo
Tipo Stringa

Elemento <Source>

La variabile, la richiesta o la risposta che contiene il messaggio XML che vuoi convertire in JSON.

L'intestazione del tipo di contenuto HTTP del messaggio di origine deve essere impostata su application/xml, altrimenti la policy non viene applicata.

Se <Source> non è definito, viene trattato come messaggio (che viene risolto come richiesta quando la policy è collegata a un flusso di richieste o come risposta quando la policy è collegata a un flusso di risposte).

Se la variabile di origine non può essere risolta o viene risolta in un tipo non di messaggio, il criterio genera un errore.

<Source>response</Source>
Predefinita richiesta o risposta, a seconda di dove viene aggiunta la policy al flusso del proxy API
Presenza Facoltativo
Tipo messaggio

Elemento <OutputVariable>

Memorizza l'output della conversione dal formato XML a JSON. In genere, questo valore è uguale a quello dell'origine, ovvero la risposta XML viene convertita in una risposta JSON.

Il payload del messaggio XML viene analizzato e convertito in JSON e l'intestazione Content-type HTTP del messaggio in formato XML è impostata su application/json.

Se OutputVariable non è specificato, source viene trattato come OutputVariable. Ad esempio, se source è response, OutputVariable è impostato su response per impostazione predefinita.

<OutputVariable>response</OutputVariable>
Predefinita richiesta o risposta, a seconda di dove viene aggiunta la policy al flusso del proxy API
Presenza Questo elemento è obbligatorio quando la variabile definita nell'elemento <Source> è di tipo stringa.
Tipo messaggio

<Opzioni>

Le opzioni ti consentono di controllare la conversione da XML a JSON. Utilizza il gruppo <Options>, che ti consente di aggiungere impostazioni di conversione specifiche, o l'elemento <Format>, che ti consente di fare riferimento a un modello di opzioni predefinite. Non puoi utilizzare sia <Options> che <Format>.

<Options> è obbligatorio se non viene utilizzato <Format>.

Elemento <Options>/<RecognizeNumber>

Se è vero, i campi numerici nel payload XML mantengono il formato originale.

<RecognizeNumber>true</RecognizeNumber>

Considera il seguente esempio XML:

<a>
  <b>100</b>
  <c>value</c>
</a>

Se true, viene convertito in:

{
    "a": {
        "b": 100,
        "c": "value"
    }
}

Se false, viene convertito in:

{
    "a": {
        "b": "100",
        "c": "value"
    }
}
Predefinita falso
Presenza Facoltativo
Tipo Booleano

Elemento <Options>/<RecognizeBoolean>

Consente alla conversione di mantenere i valori booleani true/false anziché trasformarli in stringhe.

<RecognizeBoolean>true</RecognizeBoolean>

Per il seguente esempio XML:

<a>
  <b>true</b>
  <c>value</c>
</a>

Se true, viene convertito in:

{
    "a": {
        "b": true,
        "c": "value"
    }
}

Se false, viene convertito in:

{
    "a": {
        "b": "true",
        "c": "value"
    }
}
Predefinita falso
Presenza Facoltativo
Tipo Booleano

Elemento <Options>/<RecognizeNull>

Consente di convertire i valori vuoti in valori null.

<RecognizeNull>true</RecognizeNull>

Per il seguente XML:

<a>
  <b></b>
  <c>value</c>
</a>

Se true, viene convertito in:

{
  "a": {
    "b": null,
    "c": "value"
  }
}

Se false, viene convertito in:

{
  "a": {
    "b": {},
    "c": "value"
  }
}
Predefinita falso
Presenza Facoltativo
Tipo Booleano

Elemento <Options>/<NullValue>

Indica il valore a cui devono essere convertiti i valori null riconosciuti nel messaggio di origine. Per impostazione predefinita, il valore è null. Questa opzione è efficace solo se RecognizeNull è true.

<NullValue>not-present</NullValue>

Predefinita null
Presenza Facoltativo
Tipo Stringa

<Options>/<NamespaceBlockName>
<Options>/<DefaultNamespaceNodeName>
<Options>/<NamespaceSeparator> elements

Utilizza questi elementi insieme.

<NamespaceBlockName>#namespaces</NamespaceBlockName>
<DefaultNamespaceNodeName>&</DefaultNamespaceNodeName>
<NamespaceSeparator>***</NamespaceSeparator>

Considera il seguente esempio XML:

<a xmlns="http://ns.com" xmlns:ns1="http://ns1.com">
  <ns1:b>value</ns1:b>
</a>

Se NamespaceSeparator non è specificato, viene generata la seguente struttura JSON:

{
    "a": {
        "b": "value"
    }
}

Se gli elementi NamespaceBlockName, DefaultNamespaceNodeName e NamespaceSeparator sono specificati come #namespaces, & e ***, rispettivamente, viene generata la seguente struttura JSON:

{
    "a": {
        "#namespaces": {
            "&": "http://ns.com",
            "ns1": "http://ns1.com"
        },
        "ns1***b": "value"
    }
}
Predefinita Vedi gli esempi riportati sopra.
Presenza Facoltativo
Tuttavia, se specifichi <NamespaceBlockName>, devi specificare anche gli altri due elementi.
Tipo Stringa

Elementi <Options>/<TextAlwaysAsProperty>
<Options>/<TextNodeName>

Utilizza questi elementi insieme.

Se impostato su true, il contenuto dell'elemento XML viene convertito in una proprietà stringa.

<TextAlwaysAsProperty>true</TextAlwaysAsProperty>
<TextNodeName>TEXT</TextNodeName>

Per il seguente XML:

<a>
  <b>value1</b>
  <c>value2<d>value3</d>value4</c>
</a>

Se TextAlwaysAsProperty è impostato su true e TextNodeName specificato come TEXT, viene generata la seguente struttura JSON:

{
  "a": {
    "b": {
      "TEXT": "value1"
    },
    "c": {
      "TEXT": [
        "value2",
        "value4"
        ],
        "d": {
          "TEXT": "value3"
        }
      }
    }
}

Se TextAlwaysAsProperty è impostato su false e TextNodeName specificato come TEXT, viene generata la seguente struttura JSON:

{
  "a": {
    "b": "value1",
    "c": {
      "TEXT": [
        "value2",
        "value4"
      ],
      {
        "d": "value3",
      }
    }
}
Predefinita <TextAlwaysAsProperty>: false
<TextNodeName>: N/A
Presenza Facoltativo
Tipo <TextAlwaysAsProperty>: booleano
<TextNodeName>: stringa

Elementi <Options>/<AttributeBlockName>
<Options>/<AttributePrefix>

Utilizza questi elementi insieme.

Consente di raggruppare i valori in un blocco JSON e aggiungere prefissi ai nomi degli attributi.

<AttributeBlockName>FOO_BLOCK</AttributeBlockName>
<AttributePrefix>BAR_</AttributePrefix>

Considera il seguente esempio XML:

<a attrib1="value1" attrib2="value2"/>

Se entrambi gli attributi (AttributeBlockName e AttributePrefix) sono specificati come definito nell'esempio da XML a JSON, viene generata la seguente struttura JSON:

{
  "a": {
    "FOO_BLOCK": {
      "BAR_attrib1": "value1",
      "BAR_attrib2": "value2"
    }
  }
}

Se viene specificato solo AttributeBlockName, viene generata la seguente struttura JSON:

{
    "a": {
        "FOO_BLOCK": {
            "attrib1": "value1",
            "attrib2": "value2"
        }
    }
}

Se viene specificato solo AttributePrefix, viene generata la seguente struttura JSON:

{
    "a": {
        "BAR_attrib1": "value1",
        "BAR_attrib2": "value2"
    }
}

Se non viene specificato nessuno dei due, viene generata la seguente struttura JSON:

{
    "a": {
        "attrib1": "value1",
        "attrib2": "value2"
    }
}
Predefinita Vedi gli esempi riportati sopra.
Presenza Facoltativo
Tipo Stringa

Elementi <Options>/<OutputPrefix>
<Options>/<OutputSuffix>

Utilizza questi elementi insieme.

<OutputPrefix>PREFIX_</OutputPrefix>
<OutputSuffix>_SUFFIX</OutputSuffix>

Considera il seguente esempio XML:

<a>value</a>

Se entrambi gli attributi (OutputPrefix e OutputSuffix) sono specificati come definiti nell'esempio da XML a JSON, viene generata la seguente struttura JSON:

PREFIX_{
    "a": "value"
}_SUFFIX

Se viene specificato solo OutputPrefix, viene generata la seguente struttura JSON:

PREFIX_{
  "a" : "value"
}

Se viene specificato solo OutputSuffix, viene generata la seguente struttura JSON:

{
  "a" : "value"
}_SUFFIX

Se non vengono specificati né OutputPrefixOutputSuffix, viene generata la seguente struttura JSON:

{
    "a": "value"
}
Predefinita Vedi gli esempi riportati sopra.
Presenza Facoltativo
Tipo Stringa

Elemento <Options>/<StripLevels>

<Options>
    <StripLevels>4</StripLevels>
</Options>

A volte i payload XML, come SOAP, hanno molti livelli principali che non vuoi includere nel JSON convertito. Ecco un esempio di risposta SOAP contenente molti livelli:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/Schemata-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <soap:Body>
      <GetCityWeatherByZIPResponse xmlns="http://ws.cdyne.com/WeatherWS/">
          <GetCityWeatherByZIPResult>
              <State>CO</State>
              <City>Denver</City>
              <Description>Sunny</Description>
              <Temperature>62</Temperature>
          </GetCityWeatherByZIPResult>
      </GetCityWeatherByZIPResponse>
  </soap:Body>
</soap:Envelope>

Ci sono 4 livelli prima di arrivare al livello Stato, Città, Descrizione e Temperatura. Senza utilizzare <StripLevels>, la risposta JSON convertita sarebbe simile a questa:

{
   "Envelope" : {
      "Body" : {
         "GetCityWeatherByZIPResponse" : {
            "GetCityWeatherByZIPResult" : {
               "State" : "CO",
               "City" : "Denver",
               "Description" : "Sunny",
               "Temperature" : "62"
            }
         }
      }
   }
}

Se vuoi rimuovere i primi quattro livelli nella risposta JSON, imposta <StripLevels>4</StripLevels>, che ti darà il seguente JSON:

{
  "State" : "CO",
  "City" : "Denver",
  "Description" : "Sunny",
  "Temperature" : "62"
}

Puoi rimuovere i livelli fino al primo elemento che contiene più elementi secondari. Che cosa significa? Vediamo un esempio di JSON più complesso:

{
   "Envelope" : {
      "Body" : {
         "GetCityForecastByZIPResponse" : {
            "GetCityForecastByZIPResult" : {
               "ResponseText" : "City Found",
               "ForecastResult" : {
                  "Forecast" : [
                     {
                        "ProbabilityOfPrecipiation" : {
                           "Nighttime" : "00",
                           "Daytime" : 10
                        }  ...

Il livello 3 in questo esempio è GetCityForecastByZIPResponse, che ha un solo figlio. Quindi, se utilizzi <StripLevels>3</StripLevels> (rimuovi i primi tre livelli), il JSON avrà il seguente aspetto:

{
   "GetCityForecastByZIPResult" : {
      "ResponseText" : "City Found",
      "ForecastResult" : {
         "Forecast" : [
            {
               "ProbabilityOfPrecipiation" : {
                  "Nighttime" : "00",
                  "Daytime" : 10
               }  ...

Tieni presente che GetCityForecastByZIPResult ha più figli. Poiché è il primo elemento contenente più elementi secondari, puoi rimuovere questo ultimo livello utilizzando <StripLevels>4</StripLevels>, che ti darà il seguente JSON:

{
   "ResponseText" : "City Found",
   "ForecastResult" : {
      "Forecast" : [
         {
            "ProbabilityOfPrecipiation" : {
               "Nighttime" : "00",
               "Daytime" : 10
            }  ...

Poiché il livello 4 è il primo livello contenente più figli, non puoi rimuovere livelli inferiori. Se imposti il livello della striscia su 5, 6, 7 e così via, continuerai a ricevere la risposta riportata sopra.

Predefinita 0 (nessuna rimozione del livello)
Presenza Facoltativo
Tipo Numero intero

Elemento <Options>/<TreatAsArray>/<Path>

<Options>
    <TreatAsArray>
        <Path unwrap="true">teachers/teacher/studentnames/name</Path>
    </TreatAsArray>
</Options>

Questa combinazione di elementi ti consente di assicurarti che i valori di un documento XML vengano inseriti in un array JSON. Ciò è utile, ad esempio, quando il numero di elementi secondari può variare (da uno a più) e vuoi assicurarti che i valori siano sempre in un array. In questo modo, il codice rimane stabile perché puoi ottenere i dati dall'array sempre nello stesso modo. Ad esempio: $.teachers.teacher.studentnames[0] ottiene il primo valore del nome dello studente nell'array, indipendentemente dal numero di valori nell'array.

Facciamo un passo indietro ed esaminiamo il comportamento predefinito di XML in JSON, quindi scopriamo come controllare l'output utilizzando <TreatAsArray>/<Path>.

Quando un documento XML contiene un elemento con più valori secondari (di solito in base a uno schema in cui l'elemento maxOccurs='unbounded'), il criterio XML in JSON inserisce automaticamente questi valori in un array. Ad esempio, il seguente blocco XML

<teacher>
    <name>teacherA</name>
    <studentnames>
        <name>student1</name>
        <name>student2</name>
    </studentnames>
</teacher>

...viene convertito automaticamente nel seguente JSON senza una configurazione speciale dei criteri:

{
  "teachers" : {
      "teacher" : {
          "name" : "teacherA",
          "studentnames" : {
              "name" : [
                 "student1",
                 "student2"
              ]}
           }
      }
}

Tieni presente che i due nomi degli studenti sono inseriti in un array.

Tuttavia, se nel documento XML è presente un solo studente, il criterio XML in JSON considera automaticamente il valore come una singola stringa, non come un array di stringhe, come mostrato nel seguente esempio:

{
  "teachers" : {
      "teacher" : {
          "name" : "teacherA",
          "studentnames" : {
              "name" : "student1"
              }
          }
      }
}

Negli esempi precedenti, dati simili sono stati convertiti in modo diverso, una volta come array e un'altra come singola stringa. È qui che l'elemento <TreatAsArray>/<Path> ti consente di controllare l'output. Ad esempio, puoi assicurarti che i nomi degli studenti vengano sempre inseriti in un array anche se è presente un solo valore. Per configurare questa opzione, identifica il percorso dell'elemento di cui vuoi inserire i valori in un array, come segue:

<Options>
    <TreatAsArray>
        <Path>teachers/teacher/studentnames/name</Path>
    </TreatAsArray>
</Options>

La configurazione precedente scriverebbe il file JSON nel seguente modo:

{
  "teachers" : {
      "teacher" : {
          "name" : "teacherA",
          "studentnames" : {
              "name" : ["student1"]
              }
            ]
          }
      }
}

Nota che student1 ora si trova in un array. Ora, indipendentemente dal fatto che ci siano uno o più studenti, puoi recuperarli da un array JSON nel tuo codice utilizzando il seguente JSONPath: $.teachers.teacher.studentnames.name[0]

L'elemento <Path> ha anche un attributo unwrap, illustrato nella sezione successiva.

Predefinita ND
Presenza Facoltativo
Tipo Stringa

Attributi

 <Options>
    <TreatAsArray>
        <Path unwrap="true">teachers/teacher/studentnames/name</Path>
    </TreatAsArray>
</Options>
Attributo Descrizione Presenza Tipo
unwrap

Valore predefinito: false

Rimuove l'elemento dall'output JSON. Utilizza questa opzione per semplificare o appiattire ("spacchettare") il JSON, il che abbrevia anche il JSONPath necessario per recuperare i valori. Ad esempio, anziché $.teachers.teacher.studentnames.name[*], potresti appiattire il JSON e utilizzare $.teachers.studentnames[*].

Ecco un esempio di JSON:

{
  "teachers" : {
      "teacher" : {
          "name" : "teacherA",
          "studentnames" : {
              "name" : [
                 "student1",
                 "student2"
              ]}...

In questo esempio, potresti sostenere che l'elemento teacher e l'elemento studentnames name non sono necessari. Quindi puoi rimuoverli o scartarli. Ecco come configurare l'elemento <Path> per farlo:

<TreatAsArray>
    <Path unwrap="true">teachers/teacher</Path>
    <Path unwrap="true">teachers/teacher/studentnames/name</Path>
</TreatAsArray>

L'attributo unwrap è impostato su true e vengono forniti i percorsi degli elementi da spacchettare. L'output JSON ora avrà il seguente aspetto:

{
  "teachers" : [{
      "name" : "teacherA",
      "studentnames" : ["student1","student2"]
      }]...

Tieni presente che poiché l'elemento <Path> si trova nell'elemento <TreatAsArray>, entrambi gli elementi nel percorso verranno trattati come array nell'output JSON.

Facoltativo Booleano

Per altri esempi e una procedura dettagliata della funzionalità, consulta questo articolo della community Apigee: Tutorial della community: l'opzione TreatAsArray nel criterio XML to JSON.

<Format>

Il formato ti consente di controllare la conversione da XML a JSON. Inserisci il nome di un modello predefinito che contiene una combinazione specifica di elementi Opzioni descritti in questo argomento. I formati predefiniti includono: xml.com, yahoo, google, badgerFish.

Utilizza l'elemento <Format> o il gruppo <Options>. Non puoi utilizzare sia <Format> che <Options>.

Di seguito sono riportate le definizioni del formato di ogni modello predefinito.

xml.com

<RecognizeNull>true</RecognizeNull>
<TextNodeName>#text</TextNodeName>
<AttributePrefix>@</AttributePrefix>

yahoo

<RecognizeNumber>true</RecognizeNumber>
<TextNodeName>content</TextNodeName>

google

<TextNodeName>$t</TextNodeName>
<NamespaceSeparator>$</NamespaceSeparator>
<TextAlwaysAsProperty>true</TextAlwaysAsProperty>

badgerFish

<TextNodeName>$</TextNodeName>
<TextAlwaysAsProperty>true</TextAlwaysAsProperty>
<AttributePrefix>@</AttributePrefix>
<NamespaceSeparator>:</NamespaceSeparator>
<NamespaceBlockName>@xmlns</NamespaceBlockName>
<DefaultNamespaceNodeName>$</DefaultNamespaceNodeName>

Sintassi dell'elemento:

<Format>yahoo</Format>
Predefinita Inserisci il nome di un formato disponibile:
xml.com, yahoo, google, badgerFish
Presenza Obbligatorio se non viene utilizzato <Options>.
Tipo Stringa

Schemi


Messaggi di errore

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.xmltojson.ExecutionFailed 500 This error occurs when the input payload (XML) is empty or the input XML is invalid or malformed.
steps.xmltojson.InCompatibleType 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.
steps.xmltojson.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.
steps.xmltojson.OutputVariableIsNotAvailable 500 This error occurs if the variable specified in the <Source> element of the XML to JSON 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.
steps.xmltojson.SourceUnavailable 500 This error occurs if the message variable specified in the <Source> element of the XML to JSON policy is either:
  • out of scope (not available in the specific flow where the policy is being executed) or
  • can't be resolved (is not defined)

Deployment errors

These errors can occur when you deploy a proxy containing this policy.

Error name Cause Fix
EitherOptionOrFormat If one of the elements <Options> or <Format> is not declared in the XML to JSON Policy, then the deployment of the API proxy fails.
UnknownFormat If the <Format> element within the XML to JSON policy has an unknown format defined, then the deployment of the API proxy fails. Predefined formats include: xml.com, yahoo, google, and badgerFish.

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 = "SourceUnavailable"
xmltojson.policy_name.failed policy_name is the user-specified name of the policy that threw the fault. xmltojson.XMLtoJSON-1.failed = true

Example error response

{
  "fault": {
    "faultstring": "XMLToJSON[XMLtoJSON-1]: Source xyz is not available",
    "detail": {
      "errorcode": "steps.xml2json.SourceUnavailable"
    }
  }
}

Example fault rule

<faultrule name="VariableOfNonMsgType"></faultrule><FaultRule name="XML to JSON Faults">
    <Step>
        <Name>AM-SourceUnavailableMessage</Name>
        <Condition>(fault.name Matches "SourceUnavailable") </Condition>
    </Step>
    <Step>
        <Name>AM-BadXML</Name>
        <Condition>(fault.name = "ExecutionFailed")</Condition>
    </Step>
    <Condition>(xmltojson.XMLtoJSON-1.failed = true) </Condition>
</FaultRule>

Argomenti correlati

JSON to XML: JSON to XML policy