Criterio XMLtoJSON

Stai visualizzando la documentazione di Apigee Edge.
Vai alla sezione Documentazione di Apigee X.
Informazioni

Cosa

Questo criterio converte i messaggi dal formato Extensible Markup Language (XML) in JavaScript JSON (Object Notation), che offre diverse opzioni per controllare il modo in cui i messaggi vengono convertito.

Supponendo che lo scopo sia convertire una risposta in formato XML in un la risposta, il criterio viene 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 è spesso abbinate a un criterio da XML a JSON sul flusso di risposta in uscita. Combinando i criteri in questo modo, un'API JSON può essere esposta per i servizi di backend che supportano in modo nativo solo XML.

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


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 risposta

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

Questa configurazione, che è la minima richiesta per convertire il file XML JSON: prende un messaggio di risposta in formato XML come origine e poi crea un Messaggio in formato JSON che viene compilato nel campo OutputVariable response. 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.

<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>

&lt;XMLtoJSON&gt; attributi

<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

&lt;Source&gt; elemento

La variabile, la richiesta o la risposta, contenente il messaggio XML da convertire JSON.

L'intestazione Content-type HTTP del messaggio di origine deve essere impostata su application/xml, altrimenti il criterio non viene applicato in modo forzato.

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>response</Source>
Predefinita richiesta o risposta, determinata da dove il criterio viene aggiunto al flusso proxy API
Presenza Facoltativo
Tipo messaggio

&lt;OutputVariable&gt; elemento

Archivia l'output della conversione in formato da XML a JSON. Di solito corrisponde al valore , ovvero di solito la risposta XML viene convertita in una risposta JSON.

Il payload del messaggio XML viene analizzato e convertito in JSON e il tipo di contenuto HTTP l'intestazione del messaggio in formato XML sia impostata su application/json.

Se OutputVariable non viene specificato, source viene considerato OutputVariable. Ad esempio, se source è response, poi il valore predefinito di OutputVariable è response.

<OutputVariable>response</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

&lt;Options&gt;

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 oppure il <Format>, che ti consente di fare riferimento a un modello di predefinite. Non puoi utilizzare sia <Options> che <Format>.

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

&lt;Options&gt;/&lt;RecognizeNumber&gt; elemento

Se impostato su true, i campi numerici nel payload XML mantengono il formato originale.

<RecognizeNumber>true</RecognizeNumber>

Considera l'esempio XML che segue:

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

Se true, converte in:

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

Se false, converte in:

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

&lt;Options&gt;/&lt;RecognizeBoolean&gt; elemento

Consente alla conversione di mantenere i valori booleani vero/falso anziché convertire i valori in stringhe.

<RecognizeBoolean>true</RecognizeBoolean>

Per il seguente esempio XML:

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

Se true, converte in:

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

Se false, converte in:

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

&lt;Options&gt;/&lt;RecognizeNull&gt; elemento

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, converte in:

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

Se false, converte in:

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

&lt;Options&gt;/&lt;NullValue&gt; elemento

Indica il valore a cui devono essere assegnati i valori null riconosciuti nel messaggio di origine convertito. Per impostazione predefinita, il valore è null. Questa opzione è valida solo se RecognizeNull è vero.

<NullValue>not-present</NullValue>

Predefinita null
Presenza Facoltativo
Tipo Stringa

&lt;Options&gt;/&lt;NamespaceBlockName&gt;
&lt;Options&gt;/&lt;DefaultNamespaceNodeName&gt;
&lt;Options&gt;/&lt;NamespaceSeparator&gt; elementi

Usa 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 applicata la seguente struttura JSON generato:

{
    "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 sopra.
Presenza Facoltativo
Tuttavia, se specifichi <NamespaceBlockName>, devi specificare anche i campi altri due elementi.
Tipo Stringa

&lt;Options&gt;/&lt;TextAlwaysAsProperty&gt;
&lt;Options&gt;/&lt;TextNodeName&gt; elementi

Usa questi elementi insieme.

Se impostato su true, i contenuti dell'elemento XML vengono convertiti in una stringa proprietà.

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

Per il seguente XML:

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

Se TextAlwaysAsProperty viene 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 il criterio TextAlwaysAsProperty è impostato su false e TextNodeName specificato come TEXT, la seguente struttura JSON è generato:

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

&lt;Options&gt;/&lt;AttributeBlockName&gt;
&lt;Options&gt;/&lt;AttributePrefix&gt; elementi

Usa 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 specificata 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 applicata la seguente struttura JSON generato:

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

Se viene specificato solo AttributePrefix, viene applicata la seguente struttura JSON generato:

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

Se nessuna delle due opzioni viene specificata, viene generata la seguente struttura JSON:

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

&lt;Options&gt;/&lt;OutputPrefix&gt;
&lt;Options&gt;/&lt;OutputSuffix&gt; elementi

Usa questi elementi insieme.

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

Considera il seguente esempio XML:

<a>value</a>

Se sono specificati entrambi gli attributi (OutputPrefix e OutputSuffix) come definito 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 viene specificato né OutputPrefixOutputSuffix, quanto segue Viene generata la struttura JSON:

{
    "a": "value"
}
Predefinita Guarda gli esempi qui sopra.
Presenza Facoltativo
Tipo Stringa

&lt;Options&gt;/&lt;StripLevels&gt; elemento

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

A volte i payload XML, come SOAP, hanno molti livelli padre che non si desidera includere 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 raggiungere i livelli Stato, Città, Descrizione e Temperatura. Se non utilizzi <StripLevels>, la risposta JSON convertita sarebbe simile a questo:

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

Se vuoi eliminare i primi quattro livelli dalla risposta JSON, devi impostare <StripLevels>4</StripLevels>, che restituisce quanto segue: JSON:

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

Puoi eliminare i livelli fino al primo elemento che contiene più elementi secondari. Che cosa questo significa? Vediamo un esempio 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 ne ha solo uno figlio/a. Pertanto, se utilizzi <StripLevels>3</StripLevels> (rimuovi il primi tre livelli), il codice JSON sarà simile al seguente:

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

Nota che GetCityForecastByZIPResult ha più elementi secondari. Poiché si tratta primo elemento contenente più elementi secondari, puoi rimuovere quest'ultimo livello utilizzando <StripLevels>4</StripLevels>, che ti fornirà quanto segue JSON:

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

Poiché il livello 4 è il primo livello che contiene più livelli secondari, non puoi rimuovere alcun livello inferiore a questo valore. Se imposti il livello della striscia a 5, 6, 7 e così via, continuerai ad avere risposta precedente.

Predefinita 0 (nessuna rimozione dei livelli)
Presenza Facoltativo
Tipo Numero intero

&lt;Options&gt;/&lt;TreatAsArray&gt;/&lt;Path&gt; elemento

<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 file JSON un array di dati. Questo è utile, ad esempio, quando il numero di elementi secondari può variare (da uno a multipli) e vuoi assicurarti che i valori siano sempre in un array. In questo modo e la stabilità del codice, perché i dati dall'array possono essere acquisiti sempre nello stesso modo. Per esempio: $.teachers.teacher.studentnames[0] ottiene il primo valore del nome dello studente a prescindere dal numero di valori nella matrice.

Facciamo un passo indietro e diamo un’occhiata al comportamento predefinito da XML a JSON, quindi scopriamo come controlla l'output utilizzando <TreatAsArray>/<Path>.

Quando un documento XML contiene un elemento con più valori figlio (di solito in base a uno schema) dove maxOccurs='unbounded' dell'elemento), il criterio da XML a JSON automaticamente inserisce 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 convertita automaticamente nel seguente JSON senza criteri speciali configurazione:

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

Nota che i due nomi degli studenti vengono inseriti in un array.

Tuttavia, se nel documento XML compare solo uno studente, il criterio da XML a JSON automaticamente tratta il valore come una singola stringa, non come un array di stringhe, come mostrato di seguito esempio:

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

Negli esempi precedenti, dati simili sono stati convertiti in modo diverso, una volta come array, un'altra come una singola stringa. È qui che l'elemento <TreatAsArray>/<Path> consente controllare l'output. Puoi, ad esempio, assicurarti che i nomi degli studenti siano sempre inseriti anche se è presente un solo valore. La configurazione viene configurata identificando il percorso elemento di cui desideri inserire i valori in un array, in questo modo:

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

La configurazione precedente scriverà il codice JSON in questo modo:

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

Nota che studente1 è ora in un array. Indipendentemente dal fatto che ci siano studenti, puoi recuperarli da un array JSON del tuo codice utilizzando il seguente JSONPath: $.teachers.teacher.studentnames.name[0]

L'elemento <Path> ha anche un attributo unwrap, spiegato in nella prossima sezione.

Predefinita ND
Presenza Facoltativo
Tipo Stringa

Attributi

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

Valore predefinito: false

Rimuove l'elemento dall'output JSON. Utilizzalo per snellire o rendere più appiattito ("unwrap") JSON, che abbrevia anche il JSONPath necessario per recuperare i valori. Ad esempio: anziché $.teachers.teacher.studentnames.name[*], potresti appiattire JSON e utilizzare $.teachers.studentnames[*].

Ecco un esempio in formato JSON:

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

In questo esempio, si potrebbe sostenere che l'elemento teacher e l'elemento L'elemento name studentnames non è necessario. Così puoi rimuovere o sistemare che li rappresentano. 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 i percorsi degli elementi da l'unwrapping. L'output JSON sarà ora simile al seguente:

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

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

Facoltativo Booleano

Per altri esempi e una procedura dettagliata della funzionalità, consulta questo articolo della community Apigee: https://community.apigee.com/content/kbentry/33374/new-edge-minifeature-the-treatasarray-option-in-th.html.

&lt;Format&gt;

Il formato consente di controllare la conversione da XML a JSON. Inserisci il nome di un 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 ciascun 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 e badgerFish
Presenza Obbligatorio se non viene utilizzato <Options>.
Tipo Stringa

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.xmltojson.ExecutionFailed 500 Questo errore si verifica quando il payload di input (XML) è vuoto o il codice XML di input non è valido o è in un formato non corretto.
steps.xmltojson.InCompatibleType 500 Questo errore si verifica se il tipo di variabile definita nell'elemento <Source> e la L'elemento <OutputVariable> non è uguale. È obbligatorio che il tipo di variabili contenuto all'interno dell'elemento <Source> e dell'elemento <OutputVariable> corrisponde.
steps.xmltojson.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 stringa.
steps.xmltojson.OutputVariableIsNotAvailable 500 Questo errore si verifica se la variabile specificata nell'elemento <Source> del codice XML da utilizzare Il criterio JSON è di tipo stringa e l'elemento <OutputVariable> non è definito. L'elemento <OutputVariable> è obbligatorio quando la variabile definita in <Source> è obbligatorio è di tipo stringa.
steps.xmltojson.SourceUnavailable 500 Questo errore si verifica se il messaggio specificata nell'elemento <Source> del criterio da XML a JSON è:
  • fuori ambito (non disponibile nel flusso specifico in cui viene eseguito il criterio) o
  • non può essere risolto (non è definito)

Errori di deployment

Questi errori possono verificarsi quando esegui il deployment di un proxy contenente questo criterio.

Nome errore Causa Correggi
EitherOptionOrFormat Se uno degli elementi <Options> o <Format> non è dichiarato nel criterio da XML a JSON, il deployment del proxy API non va a buon fine.
UnknownFormat Se l'elemento <Format> all'interno del criterio da XML a JSON presenta un valore sconosciuto definito, il deployment del proxy API non va a buon fine. I formati predefiniti includono: xml.com, yahoo, google e badgerFish.

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 = "SourceUnavailable"
xmltojson.policy_name.failed policy_name è il nome specificato dall'utente del criterio che ha generato l'errore. xmltojson.XMLtoJSON-1.failed = true

Esempio di risposta di errore

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

Esempio di regola di errore

<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

Da JSON a XML: da JSON a XML norme