Risoluzione dei problemi relativi al runtime dei criteri da JSON a XML

Stai visualizzando la documentazione di Apigee X.
Visualizza la documentazione di Apigee Edge.

Sorgente non disponibile

Codice di errore

steps.json2xml.SourceUnavailable

Corpo della risposta all'errore

{
    "fault": {
        "faultstring": "JSONToXML[policy_name]: Source [source_variable] is not available",
        "detail": {
            "errorcode": "steps.json2xml.SourceUnavailable"
        }
    }
}

Errore di esempio

{
    "fault": {
        "faultstring": "JSONToXML[Convert-JSONToXML]: Source response is not available",
        "detail": {
            "errorcode": "steps.json2xml.SourceUnavailable"
        }
    }
}

Causa

Questo errore si verifica se la variabile message specificata nell'elemento <Source> del criterio JSON to XML è:

  • Fuori ambito (non disponibile nel flusso specifico in cui il criterio è in esecuzione) oppure
  • Non può essere risolto (non è definito)

Ad esempio, si verifica questo errore se si deve eseguire il criterio JSON in XML nel flusso di richiesta, ma l'elemento <Source> è impostato sulla variabile response, che non esiste nel flusso di richiesta.

Diagnosi

  1. Identifica il criterio JSON in XML in cui si è verificato l'errore e il nome della variabile non disponibile. Puoi trovare entrambi questi elementi nell'elemento faultstring della risposta di errore. Ad esempio, nei seguenti faultstring, il nome del criterio è Convert-JSONToXML e la variabile è response:

    "faultstring": "JSONToXML[Convert-JSONToXML]: Source response is not available"
    
  2. Nel criterio XML da JSON a XML non riuscito, verifica che il nome della variabile impostato nell'elemento <Source> corrisponda al nome della variabile identificato nella stringa di errore (passaggio 1 sopra). Ad esempio, il seguente criterio JSON in XML specifica una variabile denominata response nell'elemento <Source>, che corrisponde a quanto's in faultstring:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <JSONToXML async="false" continueOnError="false" enabled="true" name="Convert-JSONToXML">
        <DisplayName>Convert-JSONToXML</DisplayName>
        <Properties/>
        <Options>
            <NullValue>NULL</NullValue>
            <NamespaceBlockName>#namespaces</NamespaceBlockName>
        <DefaultNamespaceNodeName>$default</DefaultNamespaceNodeName>
            <NamespaceSeparator>:</NamespaceSeparator>
            <TextNodeName>#text</TextNodeName>
            <AttributeBlockName>#attrs</AttributeBlockName>
            <AttributePrefix>@</AttributePrefix>
            <InvalidCharsReplacement>_</InvalidCharsReplacement>
            <ObjectRootElementName>Root</ObjectRootElementName>
            <ArrayRootElementName>Array</ArrayRootElementName>
            <ArrayItemElementName>Item</ArrayItemElementName>
        </Options>
        <OutputVariable>request</OutputVariable>
        <Source>response</Source>
    </JSONToXML>
    
  3. Determina se la variabile utilizzata nell'elemento <Source> è definita e disponibile nel flusso in cui viene eseguito il criterio JSON in XML.

  4. Se la variabile è:

    • Fuori ambito (non disponibile nel flusso specifico in cui il criterio è in esecuzione) oppure
    • Non può essere risolto (non è definito)

    allora è questa la causa dell'errore.

    Ad esempio, supponiamo che il criterio JSON in XML mostrato sopra debba essere eseguito nel flusso request. Ricorda che la variabile response viene usata nell'elemento <Source> del criterio JSON in XML. La variabile di risposta è disponibile solo nel flusso di risposta.

    Poiché la variabile response non esiste nel flusso di richiesta, riceverai il codice di errore:

    steps.json2xml.SourceUnavailable
    

Risoluzione

Assicurati che la variabile impostata nell'elemento <Source> del criterio JSON to XML con errori sia definita e esista nel flusso in cui viene eseguito il criterio.

Per correggere il criterio JSON in XML di esempio mostrato sopra, puoi modificare l'elemento <Source> in modo che utilizzi la variabile request, perché esiste nel flusso della richiesta:

  <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
  <JSONToXML async="false" continueOnError="false" enabled="true" name="Convert-JSONToXML">
      <DisplayName>Convert-JSONToXML</DisplayName>
      <Properties/>
      <Options>
          <NullValue>NULL</NullValue>
          <NamespaceBlockName>#namespaces</NamespaceBlockName>
          <DefaultNamespaceNodeName>$default</DefaultNamespaceNodeName>
          <NamespaceSeparator>:</NamespaceSeparator>
          <TextNodeName>#text</TextNodeName>
          <AttributeBlockName>#attrs</AttributeBlockName>
          <AttributePrefix>@</AttributePrefix>
          <InvalidCharsReplacement>_</InvalidCharsReplacement>
          <ObjectRootElementName>Root</ObjectRootElementName>
          <ArrayRootElementName>Array</ArrayRootElementName>
          <ArrayItemElementName>Item</ArrayItemElementName>
      </Options>
      <OutputVariable>request</OutputVariable>
      <Source>request</Source>
  </JSONToXML>

Esecuzione non riuscita

Codice di errore

steps.json2xml.ExecutionFailed

Corpo della risposta all'errore

{
   "fault": {
        "faultstring": "JSONToXML[policy_name]: Execution failed due to reason: Expecting { or [ at line 1",
        "detail": {
            "errorcode": "steps.json2xml.ExecutionFailed"
        }
    }
}

Cause possibili

Le possibili cause di questo errore sono:

Causa Descrizione
Payload input mancante Il payload di input (JSON) è vuoto.
Input non valido o non corretto L'input (JSON) passato al criterio JSON in XML non è valido o non è valido.

Causa: payload di input mancante

Nel criterio JSON to XML se il contenuto (payload) della variabile specificata nell'elemento <Source> è vuoto, si verifica questo errore.

Ad esempio, se l'elemento <Source> nel criterio JSON per XML è impostato come variabile request o response e dovrebbe contenere un payload JSON, ma se il payload è vuoto, si verifica l'errore.

Diagnosi

  1. Identifica il criterio da JSON a XML in cui si è verificato l'errore. Puoi trovare queste informazioni nell'elemento faultstring della risposta di errore. Ad esempio, nei seguenti faultstring, il nome del criterio è Convert-JSONToXML:

    "faultstring": "JSONToXML[Convert-JSONToXML]: Execution failed due to reason: Expecting { or [ at line 1"
    
  2. Esamina l'elemento <Source> nel file XML del criterio JSON per XML non riuscito e determina la variabile specificata. Ad esempio, il seguente criterio JSON per XML ha l'elemento <Source> impostato su request:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <JSONToXML async="false" continueOnError="false" enabled="true" name="Convert-JSONToXML">
    <DisplayName>Convert-JSONToXML</DisplayName>
    <Properties/>
    <Options>
        <NullValue>NULL</NullValue>
        <NamespaceBlockName>#namespaces</NamespaceBlockName>
        <DefaultNamespaceNodeName>$default</DefaultNamespaceNodeName>
        <NamespaceSeparator>:</NamespaceSeparator>
        <TextNodeName>#text</TextNodeName>
        <AttributeBlockName>#attrs</AttributeBlockName>
        <AttributePrefix>@</AttributePrefix>
        <InvalidCharsReplacement>_</InvalidCharsReplacement>
        <ObjectRootElementName>Root</ObjectRootElementName>
        <ArrayRootElementName>Array</ArrayRootElementName>
        <ArrayItemElementName>Item</ArrayItemElementName>
    </Options>
    <OutputVariable>request</OutputVariable>
    <Source>request</Source>
    </JSONToXML>
    
  3. Verifica se la variabile specificata per l'elemento <Source> nel criterio è vuota. Se è vuoto, questa è la causa dell'errore.

    Nel criterio JSON-XML di esempio mostrato sopra, il payload della richiesta (ovvero il corpo della richiesta) inviato dal client è vuoto.

    Ad esempio:

    curl -v "http://your_host_alias/v1/testjsontoxml" -H "Content-Type: application/json"
    

    Dove your_host_alias è un dominio visibile pubblicamente utilizzato per accedere alle tue API, come configurato nella proprietà virtualhosts.hostAliases nel file delle sostituzioni. Consulta la pagina Specificare le sostituzioni di configurazione.

    Poiché il payload della risposta JSON è vuoto, ricevi il codice di errore:

    steps.json2xml.ExecutionFailed
    

    Questo errore può verificarsi anche se l'elemento <Source> è impostato su risposta, ma il server di backend trasmette un payload vuoto.

Risoluzione

Assicurati che l'input trasmesso al criterio JSON in XML nell'elemento <Source> sia un payload JSON valido e non vuoto.

Per risolvere il problema relativo al criterio JSON di esempio per XML, passa un payload JSON valido. Ad esempio:

  1. Crea un file denominato city.json con il seguente contenuto:

    {
      "Name":"Apigee",
      "City":"Bengaluru",
      "Pincode":"560016"
    }
    
  2. Effettua la chiamata API utilizzando un comando curl come segue:

    curl -v "http://your_host_alias/v1/testxmltojson" -H "Content-Type: application/json" -X POST -d @company.json
    

    Dove your_host_alias è un dominio visibile pubblicamente utilizzato per accedere alle tue API, come configurato nella proprietà virtualhosts.hostAliases nel file delle sostituzioni. Consulta la pagina Specificare le sostituzioni di configurazione.

Causa: input non valido o non corretto

Se il criterio JSON to XML analizza un input non valido o non valido, viene visualizzato questo errore.

Ad esempio, se il seguente JSON non valido viene fornito come input per il criterio JSON in XML,

[
    "args": ["name" : "Google" ]
]

viene visualizzato l'errore:

"faultstring": "JSONToXML[Convert-JSONToXML]: Execution failed due to reason: Expecting { or [ at line 1"

Diagnosi

  1. Identifica il criterio da JSON a XML in cui si è verificato l'errore. Puoi trovare queste informazioni nell'elemento faultstring della risposta di errore. Ad esempio, nei seguenti faultstring, il nome del criterio è Convert-JSONToXML:

    "faultstring": "JSONToXML[Convert-JSONToXML]: Execution failed due to reason: Expecting { or [ at line 1"
    
  2. Esamina l'elemento <Source> specificato nel file XML del criterio JSON in XML non riuscito. Ad esempio, il seguente criterio JSON per XML ha l'elemento <Source> impostato sulla variabile request:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <JSONToXML async="false" continueOnError="false" enabled="true" name="Convert-JSONToXML">
      <DisplayName>Convert-JSONToXML</DisplayName>
      <Properties/>
      <Options>
          <NullValue>NULL</NullValue>
          <NamespaceBlockName>#namespaces</NamespaceBlockName>
          <DefaultNamespaceNodeName>$default</DefaultNamespaceNodeName>
          <NamespaceSeparator>:</NamespaceSeparator>
          <TextNodeName>#text</TextNodeName>
          <AttributeBlockName>#attrs</AttributeBlockName>
          <AttributePrefix>@</AttributePrefix>
          <InvalidCharsReplacement>_</InvalidCharsReplacement>
          <ObjectRootElementName>Root</ObjectRootElementName>
          <ArrayRootElementName>Array</ArrayRootElementName>
          <ArrayItemElementName>Item</ArrayItemElementName>
      </Options>
      <OutputVariable>request</OutputVariable>
      <Source>request</Source>
    </JSONToXML>
    
  3. Verifica se l'input specificato nell'elemento <Source> è un payload JSON valido. Se il valore inserito non è valido o non è valido, allora la causa dell'errore è questa.

    Supponiamo che sia stato trasmesso al criterio il seguente codice JSON non valido

    [
        "args": ["name" : "Google" ]
    ]
    

    Ecco una chiamata API di esempio che mostra come è stata trasmessa la richiesta:

    curl -v "http://your_host_alias/v1/testjsontoxml" -H "Content-Type:
    application/json" -X POST -d '[ "args" : ["name" : "Google" ]]'
    

    Dove your_host_alias è un dominio visibile pubblicamente utilizzato per accedere alle tue API, come configurato nella proprietà virtualhosts.hostAliases nel file delle sostituzioni. Consulta la pagina Specificare le sostituzioni di configurazione.

    Il payload JSON passato nella richiesta non è valido perché l'oggetto JSON inizia e termina con parentesi quadre ([ ]). Per questo motivo, ricevi il codice di errore:

    steps.json2xml.ExecutionFailed

    Questo errore può verificarsi anche se l'elemento <Source> è stato impostato su risposta, ma il payload JSON della risposta non è valido o il suo formato non è corretto.

Risoluzione

Assicurati che l'input trasmesso al criterio JSON in XML nell'elemento <Source> sia valido e non valido.

Per risolvere il problema relativo al criterio JSON in XML di esempio discusso in precedenza, passa una richiesta di payload JSON valida come segue:

{
  "args"  : {

        "name"  :  "Google"
   }
}

Variabile di output non disponibile

Codice di errore

steps.json2xml.OutputVariableIsNotAvailable

Corpo della risposta all'errore

{
    "fault": {
        "faultstring": "JSONToXML[policy_name]: Output variable is not available.",
        "detail": {
            "errorcode": "steps.json2xml.OutputVariableIsNotAvailable"
        }
    }
}

Errore di esempio

{
    "fault": {
        "faultstring": "JSONToXML[Check-JSONToXML]: Output variable is not available.",
        "detail": {
            "errorcode": "steps.json2xml.OutputVariableIsNotAvailable"
        }
    }
}

Causa

Questo errore si verifica se la variabile specificata nell'elemento <Source> del criterio JSON per XML è di tipo stringa e l'elemento <OutputVariable> non è definito. L'elemento <OutputVariable> è obbligatorio quando la variabile definita nell'elemento <Source> è di tipo stringa.

Diagnosi

  1. Identifica il criterio da JSON a XML in cui si è verificato l'errore. Puoi trovarlo nell'elemento faultstring della risposta di errore. Ad esempio, nei seguenti faultstring, il nome del criterio è Check-JSONToXML:

    "faultstring": "JSONToXML[Check-JSONToXML]: Output variable is not available."
    
  2. Nel criterio JSON to XML con esito negativo la convalida è mancante in <OutputVariable>.

    Nel seguente criterio JSONToXML di esempio manca un elemento <OutputVariable>:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <JSONToXML async="false" continueOnError="false" enabled="true" name="JSONToXML">
        <DisplayName>Check-JSONToXML</DisplayName>
        <Properties/>
        <Options>
            <NullValue>NULL</NullValue>
            <NamespaceBlockName>#namespaces</NamespaceBlockName>
            <DefaultNamespaceNodeName>$default</DefaultNamespaceNodeName>
            <NamespaceSeparator>:</NamespaceSeparator>
            <TextNodeName>#text</TextNodeName>
            <AttributeBlockName>#attrs</AttributeBlockName>
            <AttributePrefix>@</AttributePrefix>
            <InvalidCharsReplacement>_</InvalidCharsReplacement>
            <ObjectRootElementName>Root</ObjectRootElementName>
            <ArrayRootElementName>Array</ArrayRootElementName>
            <ArrayItemElementName>Item</ArrayItemElementName>
        </Options>
        <Source>PostalCode</Source>
    </JSONToXML>
    
  3. Determina il tipo di variabile specificato nell'elemento <Source>:

    1. Individua il codice all'interno del proxy API in cui la variabile è stata definita per prima.
    2. Dopo aver definito il criterio in cui la variabile è definita e compilata per prima, devi determinare il tipo di variabile nel seguente modo:
      1. Verifica il valore dell'attributo tipo (se presente).
      2. Se l'attributo "type" non è presente, la variabile viene considerata come una stringa.
    3. Se il tipo di variabile è stringa, la causa dell'errore è questa. Per informazioni sulle variabili comuni e sui relativi tipi, consulta il riferimento sulle variabili.

    Ad esempio, controlla la variabile PostalCode nel criterio JSON per XML riportato sopra.

    Ad esempio, supponiamo che un criterio di assegnazione messaggio venga utilizzato per assegnare un valore a una variabile chiamata PostalCode come mostrato di seguito:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <AssignMessage async="false" continueOnError="false" enabled="true" name="Assign_PostalCode">
        <DisplayName>Assign_PostalCode</DisplayName>
        <Properties/>
        <AssignVariable>
            <Name>PostalCode</Name>
            <Value>{"value":"56008"}</Value>
            <Ref/>
        </AssignVariable>
        <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
        <AssignTo createNew="false" transport="http" type="request"/>
    </AssignMessage>
    

    Tieni presente che il tipo di variabile impostato in <AssignVariable> è stringa. Di conseguenza, la variabile PostalCode è di tipo stringa.

    Ora, ricorda che la variabile PostalCode viene usata nell'elemento <Source> del criterio JSONToXML:

    <Source>PostalCode</Source>
    

    Poiché PostalCode è di tipo stringa e manca l'elemento <OutputVariable>, riceverai il codice di errore:

    steps.json2xml.OutputVariableIsNotAvailable
    

Risoluzione

Assicurati che se la variabile specificata nell'elemento <Source> del criterio JSONToXML è di tipo stringa, l'elemento <OutputVariable> è definito all'interno del criterio.

Per correggere il criterio JSONToXML descritto in precedenza, includi un elemento <OutputVariable> come mostrato di seguito.

  <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
  <JSONToXML async="false" continueOnError="false" enabled="true" name="JSONToXML">
      <DisplayName>Check-JSONToXML</DisplayName>
      <Properties/>
      <Options>
          <NullValue>NULL</NullValue>
          <NamespaceBlockName>#namespaces</NamespaceBlockName>
          <DefaultNamespaceNodeName>$default</DefaultNamespaceNodeName>
          <NamespaceSeparator>:</NamespaceSeparator>
          <TextNodeName>#text</TextNodeName>
          <AttributeBlockName>#attrs</AttributeBlockName>
          <AttributePrefix>@</AttributePrefix>
          <InvalidCharsReplacement>_</InvalidCharsReplacement>
          <ObjectRootElementName>Root</ObjectRootElementName>
          <ArrayRootElementName>Array</ArrayRootElementName>
          <ArrayItemElementName>Item</ArrayItemElementName>
      </Options>
      <OutputVariable>response</OutputVariable>
      <Source>PostalCode</Source>
  </JSONToXML>

Tipi non compatibili

Codice di errore

steps.json2xml.InCompatibleTypes

Corpo della risposta all'errore

{
    "fault": {
        "faultstring": "JSONToXML[policy_name]: String can not be assigned to message type.",
        "detail": {
            "errorcode": "steps.json2xml.InCompatibleTypes"
        }
    }
}

Errore di esempio

{
    "fault": {
        "faultstring": "JSONToXML[JSONToXML_checktype]: String can not be assigned to message type.",
        "detail": {
            "errorcode": "steps.json2xml.InCompatibleTypes"
        }
    }
}

Causa

Questo errore si verifica se il tipo di variabile definito nell'elemento <Source> e nell'elemento <OutputVariable> non corrispondono. È obbligatorio che il tipo di variabili contenute nell'elemento <Source> e l'elemento <OutputVariable> corrispondano.

I tipi validi sono message e string.

Diagnosi

  1. Identifica il criterio da JSON a XML in cui si è verificato l'errore. Puoi trovarlo nell'elemento faultstring della risposta di errore. Ad esempio, nei seguenti faultstring, il nome del criterio è JSONToXML_checktype:

    "faultstring": "JSONToXML[JSONToXML_checktype]: String can not be assigned to message type."
    
  2. Nel criterio JSON per XML non riuscito prendi nota dei valori specificati in <OutputVariable> e <Source>.

    Considera le norme di esempio che seguono:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <JSONToXML async="false" continueOnError="false" enabled="true" name="JSONToXML_checktype">
        <DisplayName>JSONToXML_checktype</DisplayName>
        <Properties/>
        <Options>
            <NullValue>NULL</NullValue>
            <NamespaceBlockName>#namespaces</NamespaceBlockName>
            <DefaultNamespaceNodeName>$default</DefaultNamespaceNodeName>
            <NamespaceSeparator>:</NamespaceSeparator>
            <TextNodeName>#text</TextNodeName>
            <AttributeBlockName>#attrs</AttributeBlockName>
            <AttributePrefix>@</AttributePrefix>
            <InvalidCharsReplacement>_</InvalidCharsReplacement>
            <ObjectRootElementName>Root</ObjectRootElementName>
            <ArrayRootElementName>Array</ArrayRootElementName>
            <ArrayItemElementName>Item</ArrayItemElementName>
        </Options>
        <OutputVariable>response</OutputVariable>
        <Source>PostalCode</Source>
    </JSONToXML>
    
    
  3. Determina il tipo di variabile specificato negli elementi <Source> e <OutputVariable>:

    1. Individua il codice all'interno del proxy API in cui ciascuna di queste variabili è stata definita per prima.
    2. Dopo aver definito il criterio in cui la variabile è definita e compilata per prima, devi determinare il tipo di variabile nel seguente modo:
      1. Verifica il valore dell'attributo tipo (se presente).
      2. Se l'attributo "type" non è presente, la variabile viene considerata come una stringa.
    3. Se il tipo di variabile specificata in <Source> è stringa e il tipo di <OutputVariable> è message o viceversa, questa è la causa dell'errore. Per informazioni sulle variabili comuni e sui relativi tipi, consulta il riferimento sulle variabili.

    Ad esempio, prendi in considerazione un criterio Assegna messaggio che viene utilizzato per assegnare un valore a una variabile denominata PostalCode, come mostrato di seguito:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <AssignMessage async="false" continueOnError="false" enabled="true" name="Assign_PostalCode">
        <DisplayName>Assign_PostalCode</DisplayName>
        <Properties/>
        <AssignVariable>
            <Name>PostalCode</Name>
            <Value>{"value":"56008"}</Value>
            <Ref/>
        </AssignVariable>
        <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
        <AssignTo createNew="false" transport="http" type="request"/>
    </AssignMessage>
    

    Tieni presente che il tipo di variabile impostato in <AssignVariable> è stringa; pertanto la variabile PostalCode è di tipo stringa.

    Ora, ricorda che la variabile PostalCode viene usata nell'elemento <Source> del criterio JSONToXML:

    <Source>PostalCode</Source>
    

    Ricorda inoltre che la variabile response viene utilizzata nell'elemento <OutputVariable> del criterio JSONToXML:

    <OutputVariable>response</OutputVariable>
    

    Poiché PostalCode è di tipo stringa, mentre la variabile response è di tipo messaggio, i tipi non sono compatibili, quindi riceverai il codice di errore:

    steps.json2xml.InCompatibleTypes
    

    L'errore riportato sopra può verificarsi anche se la variabile nell'elemento <Source> è di tipo message, ma la variabile nell'elemento <OutputVariable> è di tipo stringa.

Risoluzione

Assicurati che il tipo di variabile definito nell'elemento <Source> e nell'elemento <OutputVariable> siano sempre uguali. È obbligatorio che il tipo di variabili contenute nell'elemento <Source> e l'elemento <OutputVariable> corrispondano. In altre parole, assicurati che il tipo di elemento <Source> e gli elementi <OutputVariable> siano entrambi di tipo stringa o messaggio.

Per correggere il criterio JSON in XML descritto sopra, puoi dichiarare un'altra variabile PostalCode_output di stringa di tipo utilizzando il criterio di assegnazione messaggio e utilizzare questa variabile nell'elemento <OutputVariable> del criterio JSON in XML.

Criterio di assegnazione messaggio modificato:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AssignMessage async="false" continueOnError="false" enabled="true" name="Assign_PostalCode">
    <DisplayName>Assign_PostalCode</DisplayName>
    <Properties/>
    <AssignVariable>
        <Name>PostalCode</Name>
        <Value>{"value":"56008"}</Value>
        <Ref/>
    </AssignVariable>
    <AssignVariable>
        <Name>PostalCode_output</Name>
        <Ref/>
    </AssignVariable>
    <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
    <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

Criterio JSONToXML modificato:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<JSONToXML async="false" continueOnError="false" enabled="true" name="JSONToXML">
    <DisplayName>JSONToXML_checktype</DisplayName>
    <Properties/>
    <Options>
        <NullValue>NULL</NullValue>
        <NamespaceBlockName>#namespaces</NamespaceBlockName>
        <DefaultNamespaceNodeName>$default</DefaultNamespaceNodeName>
        <NamespaceSeparator>:</NamespaceSeparator>
        <TextNodeName>#text</TextNodeName>
        <AttributeBlockName>#attrs</AttributeBlockName>
        <AttributePrefix>@</AttributePrefix>
        <InvalidCharsReplacement>_</InvalidCharsReplacement>
        <ObjectRootElementName>Root</ObjectRootElementName>
        <ArrayRootElementName>Array</ArrayRootElementName>
        <ArrayItemElementName>Item</ArrayItemElementName>
    </Options>
    <OutputVariable>PostalCode_output</OutputVariable>
    <Source>PostalCode</Source>
</JSONToXML>

TipoOrigine non valido

Codice di errore

steps.json2xml.InvalidSourceType

Corpo della risposta all'errore

{
    "fault": {
        "faultstring": "JSONToXML[class invalid_class]: Invalid source type class invalid_class. Valid source types are [message, string].",
        "detail": {
            "errorcode": "steps.json2xml.InvalidSourceType"
        }
    }
}

Errore di esempio

{
    "fault": {
        "faultstring": "JSONToXML[class java.lang.Integer]: Invalid source type class java.lang.Integer. Valid source types are [message, string].",
        "detail": {
            "errorcode": "steps.json2xml.InvalidSourceType"
        }
    }
}

Causa

Questo errore si verifica se il tipo di variabile utilizzato per definire l'elemento <Source> non è valido.I tipi validi di variabile sono message e string.

Diagnosi

  1. Identifica il tipo di origine non valido utilizzato nel criterio da JSON a XML. Puoi trovare queste informazioni nel messaggio di errore. Ad esempio, nell'errore seguente il tipo non valido è Numero intero.

    "faultstring": "JSONToXML[class java.lang.Integer]: Invalid source type class java.lang.Integer. Valid source types are [message, string]."
    
  2. Esamina tutti i criteri JSON in XML nel proxy API specifico in cui si è verificato l'errore. Nel criterio JSON to XML con errori, prendi nota del nome della variabile specificata in <Source>.

    Di seguito è riportato un esempio di criterio con la variabile denominata EmployeeID specificata nell'elemento <Source>:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<JSONToXML async="false" continueOnError="false" enabled="true" name="JSONToXML">
    <DisplayName>Check_SourceType</DisplayName>
    <Properties/>
    <Options>
        <NullValue>NULL</NullValue>
        <NamespaceBlockName>#namespaces</NamespaceBlockName>
        <DefaultNamespaceNodeName>$default</DefaultNamespaceNodeName>
        <NamespaceSeparator>:</NamespaceSeparator>
        <TextNodeName>#text</TextNodeName>
        <AttributeBlockName>#attrs</AttributeBlockName>
        <AttributePrefix>@</AttributePrefix>
        <InvalidCharsReplacement>_</InvalidCharsReplacement>
        <ObjectRootElementName>Root</ObjectRootElementName>
        <ArrayRootElementName>Array</ArrayRootElementName>
        <ArrayItemElementName>Item</ArrayItemElementName>
    </Options>
    <OutputVariable>request</OutputVariable>
    <Source>EmployeeID</Source>
</JSONToXML>
  1. Determina il tipo di variabile specificato nell'elemento <Source>:

    1. Individua il codice all'interno del proxy API in cui questa variabile è stata definita per prima.
    2. Dopo aver definito il criterio in cui la variabile è definita e compilata per prima, devi determinare il tipo di variabile nel seguente modo:
      1. Verifica il valore dell'attributo tipo (se presente).
      2. Se l'attributo "type" non è presente, la variabile viene considerata come una stringa.
    3. Se il tipo di variabile specificata in <Source> non è né di tipo messaggio né di tipo stringa, è questa la causa dell'errore. Per informazioni sulle variabili comuni e sui relativi tipi, consulta il riferimento sulle variabili.

    Ad esempio, supponiamo che il criterio ExtractVariables venga utilizzato per estrarre il valore da un payload JSON e impostare il valore sulla variabile EmployeeID di tipo intero come mostrato di seguito:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <ExtractVariables name="ExtractJSONVariables">
        <Source>request</Source>
        <JSONPayload>
            <Variable name="EmployeeID" type="integer">
                <JSONPath>$.ID</JSONPath>
            </Variable>
        </JSONPayload>
    </ExtractVariables>
    

    Ora, ricorda che la variabile EmployeeID viene usata nell'elemento <Source> del criterio JSONToXML:

    <Source>EmployeeID</Source>
    

    Poiché il tipo di questa variabile è Integer, che non è un tipo <Source> valido, il proxy API non riesce e restituisce l'errore:

    steps.json2xml.InvalidSourceType
    

Risoluzione

Assicurati che il tipo di variabile utilizzata per specificare l'elemento <Source> sia valido. I tipi di <Source> validi sono message e string.

Per evitare l'errore sopra riportato con il criterio JSONToXML, puoi utilizzare la variabile della richiesta, di tipo messaggio o qualsiasi altra stringa che corrisponda a un payload JSON valido.