Risoluzione dei problemi relativi agli errori di runtime dei criteri JSON to XML

Stai visualizzando la documentazione di Apigee e Apigee hybrid.
Visualizza la documentazione di Apigee Edge.

SourceUnavailable

Codice di errore

steps.json2xml.SourceUnavailable

Corpo della risposta di errore

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

Esempio di errore

{
    "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 è:

  • Al di fuori dell'ambito (non disponibile nel flusso specifico in cui viene eseguito il criterio) o
  • Non può essere risolto (non è definito)

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

Diagnosi

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

    "faultstring": "JSONToXML[Convert-JSONToXML]: Source response is not available"
    
  2. Nel file XML della policy JSON to XML non riuscito, verifica che il nome della variabile impostata nell'elemento <Source> corrisponda al nome della variabile identificato nella stringa di errore (passaggio 1 sopra). Ad esempio, il seguente criterio JSON to XML specifica una variabile denominata response nell'elemento <Source>, che corrisponde a quanto contenuto 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 to XML.

  4. Se la variabile è:

    • Al di fuori dell'ambito (non disponibile nel flusso specifico in cui viene eseguito il criterio) o
    • Non può essere risolto (non è definito)

    allora è la causa dell'errore.

    Ad esempio, supponiamo che il criterio di conversione da JSON a XML mostrato sopra debba essere eseguito nel flusso di richiesta. Ricorda che la variabile response viene utilizzata nell'elemento <Source> del criterio JSON to XML. La variabile di risposta è disponibile solo nel flusso di risposta.

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

    steps.json2xml.SourceUnavailable
    

Risoluzione

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

Per correggere il criterio JSON to XML di esempio mostrato sopra, puoi modificare l'elemento <Source> in modo da utilizzare la variabile request, perché esiste nel flusso di 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>

ExecutionFailed

Codice di errore

steps.json2xml.ExecutionFailed

Corpo della risposta di 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 di input mancante Il payload di input (JSON) è vuoto.
Input non valido o con formato non corretto L'input (JSON) passato al criterio JSON to XML non è valido o non è formattato correttamente.

Causa: payload di input mancante

Questo errore si verifica nel criterio di conversione da JSON a XML se i contenuti (payload) della variabile specificata nell'elemento <Source> sono vuoti.

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

Diagnosi

  1. Identifica il criterio JSON to XML in cui si è verificato l'errore. Puoi trovare queste informazioni nell'elemento faultstring della risposta all'errore. Ad esempio, nel seguente 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 criterio XML da JSON non riuscito e determina la variabile specificata. Ad esempio, il seguente criterio JSON to 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. Controlla se la variabile specificata per l'elemento <Source> nel criterio è vuota. Se è vuoto, è la causa dell'errore.

    Nell'esempio di norme relative al passaggio da JSON a XML 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 pubblico utilizzato per accedere alle API, come configurato nella proprietà virtualhosts.hostAliases del file delle sostituzioni. Consulta Specificare le sostituzioni della 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 response, ma il server di backend passa un payload vuoto.

Risoluzione

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

Per risolvere il problema con il criterio JSON to XML di esempio, passa un payload JSON valido. Ad esempio:

  1. Crea un file denominato city.json con i seguenti contenuti:

    {
      "Name":"Apigee",
      "City":"Bengaluru",
      "Pincode":"560016"
    }
    
  2. Esegui la chiamata all'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 pubblico utilizzato per accedere alle API, come configurato nella proprietà virtualhosts.hostAliases del file delle sostituzioni. Consulta Specificare le sostituzioni della configurazione.

Causa: input non valido o con formato non corretto

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

Ad esempio, se il seguente JSON non valido viene fornito come input al criterio JSON to XML,

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

verrà visualizzato l'errore:

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

Diagnosi

  1. Identifica il criterio JSON to XML in cui si è verificato l'errore. Puoi trovare queste informazioni nell'elemento faultstring della risposta all'errore. Ad esempio, nel seguente 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 to XML non riuscito. Ad esempio, il seguente criterio JSON to 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 l'input non è valido o ha un formato non corretto, è la causa dell'errore.

    Supponiamo che il seguente JSON non valido sia stato passato al criterio

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

    Ecco la chiamata API di esempio che mostra come è stata passata 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 pubblico utilizzato per accedere alle API, come configurato nella proprietà virtualhosts.hostAliases del file delle sostituzioni. Consulta Specificare le sostituzioni della 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 response, ma il payload della risposta JSON non è valido o non ha un formato corretto.

Risoluzione

Assicurati che l'input passato al criterio JSON to XML nell'elemento <Source> sia valido e non con formato non corretto.

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

{
  "args"  : {

        "name"  :  "Google"
   }
}

OutputVariableIsNotAvailable

Codice di errore

steps.json2xml.OutputVariableIsNotAvailable

Corpo della risposta di errore

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

Esempio di errore

{
    "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 to 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 JSON to XML in cui si è verificato l'errore. Puoi trovarlo nell'elemento faultstring della risposta all'errore. Ad esempio, nel seguente faultstring, il nome del criterio è Check-JSONToXML:

    "faultstring": "JSONToXML[Check-JSONToXML]: Output variable is not available."
    
  2. Nella policy di conversione da JSON a XML non riuscita, verifica se manca <OutputVariable>.

    Il seguente criterio JSONToXML di esempio manca dell'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 è stata definita per la prima volta la variabile.
    2. Una volta individuato il criterio in cui la variabile è definita e compilata per la prima volta, devi determinare il tipo di variabile come segue:
      1. Controlla il valore dell'attributo type (se presente).
      2. Se l'attributo type non è presente, la variabile viene considerata una stringa.
    3. Se il tipo della variabile è stringa, questa è la causa dell'errore. Per saperne di più sulle variabili comuni e sui relativi tipi, consulta la documentazione di riferimento sulle variabili.

    Ad esempio, esamina la variabile PostalCode nel criterio JSON to XML riportato sopra.

    Ad esempio, considera che un criterio Assegna messaggio 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 utilizzata nell'elemento <Source> del criterio JSONToXML:

    <Source>PostalCode</Source>
    

    Poiché PostalCode è di tipo stringa e manca l'elemento <OutputVariable>, ricevi 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> sia definito all'interno del criterio.

Per correggere il criterio JSONToXML discusso sopra, 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>

InCompatibleTypes

Codice di errore

steps.json2xml.InCompatibleTypes

Corpo della risposta di errore

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

Esempio di errore

{
    "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 è lo stesso. È obbligatorio che il tipo di variabili contenute nell'elemento <Source> e nell'elemento <OutputVariable> corrisponda.

I tipi validi sono message e string.

Diagnosi

  1. Identifica il criterio JSON to XML in cui si è verificato l'errore. Puoi trovarlo nell'elemento faultstring della risposta all'errore. Ad esempio, nel seguente faultstring, il nome del criterio è JSONToXML_checktype:

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

    Considera il seguente criterio di esempio:

    <?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 sono state definite per la prima volta tutte queste variabili.
    2. Una volta individuato il criterio in cui la variabile è definita e compilata per la prima volta, devi determinare il tipo di variabile come segue:
      1. Controlla il valore dell'attributo type (se presente).
      2. Se l'attributo type non è presente, la variabile viene considerata una stringa.
    3. Se il tipo della variabile specificata in <Source> è stringa, mentre il tipo di <OutputVariable> è messaggio o viceversa, questa è la causa dell'errore. Per saperne di più sulle variabili comuni e sui relativi tipi, consulta la documentazione di riferimento sulle variabili.

    Ad esempio, prendi in considerazione un criterio Assegna messaggio 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 utilizzata nell'elemento <Source> del criterio JSONToXML:

    <Source>PostalCode</Source>
    

    Analogamente, ricorda 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, si tratta di tipi incompatibili, quindi ricevi 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> sia sempre lo stesso. È obbligatorio che il tipo di variabili contenute nell'elemento <Source> e nell'elemento <OutputVariable> corrisponda. In altre parole, assicurati che il tipo di elementi <Source> e <OutputVariable> sia di tipo stringa o messaggio.

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

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

Norme JSONToXML modificate:

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

InvalidSourceType

Codice di errore

steps.json2xml.InvalidSourceType

Corpo della risposta di errore

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

Esempio di errore

{
    "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 di variabili validi sono message e string.

Diagnosi

  1. Identifica il tipo di origine non valido utilizzato nel criterio JSON to XML. Puoi trovare queste informazioni nel messaggio di errore. Ad esempio, nel seguente errore, il tipo non valido è Integer.

    "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 to XML nel proxy API specifico in cui si è verificato l'errore. Nel criterio JSON to XML non riuscito, prendi nota del nome della variabile specificata in <Source>.

    Ecco un criterio di esempio con la variabile 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 è stata definita per la prima volta questa variabile.
    2. Una volta individuato il criterio in cui la variabile è definita e compilata per la prima volta, devi determinare il tipo di variabile come segue:
      1. Controlla il valore dell'attributo type (se presente).
      2. Se l'attributo type non è presente, la variabile viene considerata una stringa.
    3. Se il tipo di variabile specificato in <Source> non è né di tipo messaggio né di tipo stringa, è questa la causa dell'errore. Per saperne di più sulle variabili comuni e sui relativi tipi, consulta la documentazione di riferimento sulle variabili.

    Ad esempio, supponiamo che il criterio ExtractVariables venga utilizzato per estrarre il valore da un payload JSON e lo imposti 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 utilizzata 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 con l'errore:

    steps.json2xml.InvalidSourceType
    

Risoluzione

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

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