Dépannage des erreurs d'exécution de la règle JSON vers XML

Vous consultez la documentation d'Apigee X.
Consultez la documentation d'Apigee Edge.

SourceUnavailable

Code d'erreur

steps.json2xml.SourceUnavailable

Corps de la réponse d'erreur

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

Exemple d'erreur

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

Cause

Cette erreur se produit si la variable message spécifiée dans l'élément <Source> de la règle JSON est XML :

  • hors du champ d'application (non disponible dans le flux spécifique où la règle est exécutée) ou
  • impossible à résoudre (non définie).

Par exemple, cette erreur se produit si la règle JSON vers XML est censée être exécutée dans le flux de requête, mais que l'élément <Source> est défini sur la variable response, qui n'existe pas dans le flux de requête.

Diagnostic

  1. Identifiez la règle JSON vers XML où l'erreur s'est produite et le nom de la variable indisponible. Vous pouvez trouver ces deux éléments dans l'élément faultstring de la réponse d'erreur. Par exemple, dans le fichier faultstring suivant, le nom de la règle est Convert-JSONToXML et celui de la variable est response :

    "faultstring": "JSONToXML[Convert-JSONToXML]: Source response is not available"
    
  2. Dans le fichier XML de la règle JSON vers XML défaillante, vérifiez que le nom de la variable définie dans l'élément <Source> correspond au nom de la variable identifiée dans la chaîne d'erreur (étape 1 ci-dessus). Par exemple, la règle JSON vers XML suivante spécifie une variable nommée response dans l'élément <Source>, ce qui correspond au contenu de 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. Déterminez si la variable utilisée dans l'élément <Source> est définie et disponible dans le flux dans lequel la règle JSON vers XML est exécutée.

  4. Si la variable est :

    • hors du champ d'application (non disponible dans le flux spécifique où la règle est exécutée) ou
    • impossible à résoudre (non définie).

    alors il s'agit de la cause de l'erreur.

    Par exemple, supposons que la règle XML vers JSON présentée ci-dessus soit censée être exécutée dans le flux de requête. Rappelez-vous que la variable response est utilisée dans l'élément <Source> de la règle JSON vers XML. La variable de réponse n'est disponible que dans le flux de réponse.

    Comme la variable response n'existe pas dans le flux de requête, vous recevez le code d'erreur :

    steps.json2xml.SourceUnavailable
    

Solution

Assurez-vous que la variable définie dans l'élément <Source> de la règle JSON vers XML défaillante est définie et qu'elle existe dans le flux où la règle est exécutée.

Pour corriger la règle JSON vers XML indiquée ci-dessus, vous pouvez modifier l'élément <Source> afin d'utiliser la variable request, car il existe dans le flux de requête :

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

Code d'erreur

steps.json2xml.ExecutionFailed

Corps de la réponse d'erreur

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

Causes possibles

Les causes possibles de cette erreur sont les suivantes :

Cause Description
Charge utile d'entrée manquante La charge utile d'entrée (JSON) est vide.
Entrée invalide ou incorrecte L'entrée (JSON) transmise à la règle JSON vers la règle XML est non valide ou incorrecte.

Cause : charge utile d'entrée manquante

Dans la règle JSON vers XML, si le contenu (charge utile) de la variable spécifiée dans l'élément <Source> est vide, cette erreur se produit.

Par exemple, si l'élément <Source> de la règle JSON vers XML est défini en tant que variable request ou response et qu'il est censé contenir une charge utile JSON, mais que la charge utile est vide, l'erreur se produit.

Diagnostic

  1. Identifiez la règle JSON vers XML où l'erreur s'est produite. Vous trouverez ces informations dans l'élément faultstring de la réponse d'erreur. Par exemple, dans le fichier faultstring suivant, le nom de la règle est Convert-JSONToXML :

    "faultstring": "JSONToXML[Convert-JSONToXML]: Execution failed due to reason: Expecting { or [ at line 1"
    
  2. Examinez l'élément <Source> dans le fichier XML de la règle JSON vers XML défaillante, puis déterminez la variable spécifiée. Par exemple, l'élément <Source> est défini sur request pour la règle JSON vers XML suivante :

    <?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. Vérifiez si la variable spécifiée pour l'élément <Source> de la règle est vide. Si c'est le cas, il s'agit de la cause de l'erreur.

    Dans l'exemple de règle JSON vers XML ci-dessus, la charge utile de la requête (c'est-à-dire le corps de la requête) envoyée par le client est vide.

    Exemple :

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

    your_host_alias est un domaine public utilisé pour accéder à vos API, tel que configuré dans la propriété virtualhosts.hostAliases de votre fichier de remplacement. Consultez la section Spécifier des remplacements de configuration.

    Comme la charge utile de la réponse JSON est vide, vous recevez le code d'erreur :

    steps.json2xml.ExecutionFailed
    

    Cette erreur peut également se produire si l'élément <Source> est défini sur "réponse", alors que le serveur backend transmet une charge utile vide.

Solution

Assurez-vous que l'entrée transmise à la règle JSON vers XML dans l'élément <Source> est une charge utile JSON valide et non vide.

Pour résoudre le problème dans l'exemple de règle JSON vers XML, transmettez une charge JSON valide. Exemple :

  1. Créez un fichier nommé city.json avec le contenu suivant :

    {
      "Name":"Apigee",
      "City":"Bengaluru",
      "Pincode":"560016"
    }
    
  2. Effectuez l'appel d'API à l'aide d'une commande curl comme suit :

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

    your_host_alias est un domaine public utilisé pour accéder à vos API, tel que configuré dans la propriété virtualhosts.hostAliases de votre fichier de remplacement. Consultez la section Spécifier des remplacements de configuration.

Cause : entrée invalide ou incorrecte

Si la règle JSON vers XML analyse une entrée non valide ou incorrecte, cette erreur s'affiche.

Par exemple, si l'entrée JSON non valide suivante est fournie en tant qu'entrée dans une règle JSON vers XML,

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

vous obtenez l'erreur suivante :

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

Diagnostic

  1. Identifiez la règle JSON vers XML où l'erreur s'est produite. Vous trouverez ces informations dans l'élément faultstring de la réponse d'erreur. Par exemple, dans le fichier faultstring suivant, le nom de la règle est Convert-JSONToXML :

    "faultstring": "JSONToXML[Convert-JSONToXML]: Execution failed due to reason: Expecting { or [ at line 1"
    
  2. Examinez l'élément <Source> spécifié dans le fichier XML de la règle JSON vers XML défaillante. Par exemple, l'élément <Source> est défini sur la variable request pour la règle JSON vers XML suivante :

    <?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. Vérifiez que l'entrée spécifiée dans l'élément <Source> correspond à une charge utile JSON valide. Si l'entrée est invalide ou incorrecte, il s'agit de la cause de l'erreur.

    Supposons que la charge utile JSON non valide suivante a été transmis à la règle.

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

    Voici un exemple d'appel d'API qui illustre comment la requête a été transmise :

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

    your_host_alias est un domaine public utilisé pour accéder à vos API, tel que configuré dans la propriété virtualhosts.hostAliases de votre fichier de remplacement. Consultez la section Spécifier des remplacements de configuration.

    La charge utile JSON transmise dans la requête n'est pas valide, car l'objet JSON commence et se termine par des crochets ([ ]). Vous recevez donc le code d'erreur suivant :

    steps.json2xml.ExecutionFailed

    Cette erreur peut également se produire si l'élément <Source> a été défini sur la réponse, mais que la charge utile de la réponse JSON est incorrecte ou non valide.

Solution

Assurez-vous que l'entrée transmise à la règle JSON vers XML de l'élément <Source> est valide et n'est pas incorrecte.

Pour résoudre le problème dans l'exemple de règle JSON vers XML décrit ci-dessus, transmettez une requête de charge utile JSON valide comme suit :

{
  "args"  : {

        "name"  :  "Google"
   }
}

OutputVariableIsNotAvailable

Code d'erreur

steps.json2xml.OutputVariableIsNotAvailable

Corps de la réponse d'erreur

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

Exemple d'erreur

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

Cause

Cette erreur se produit si la variable spécifiée dans l'élément <Source> de la règle JSON vers XML est de type chaîne et que l'élément <OutputVariable> n'est pas défini. L'élément <OutputVariable> est obligatoire lorsque la variable définie dans l'élément <Source> est de type chaîne.

Diagnostic

  1. Identifiez la règle JSON vers XML où l'erreur s'est produite. Vous trouverez ces informations dans l'élément faultstring de la réponse d'erreur. Par exemple, dans le fichier faultstring suivant, le nom de la règle est Check-JSONToXML :

    "faultstring": "JSONToXML[Check-JSONToXML]: Output variable is not available."
    
  2. Dans la règle JSON vers XML défaillante, vérifiez si le champ <OutputVariable> est manquant.

    L'exemple de règle JSON vers XML suivant contient un élément <OutputVariable> manquant :

    <?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. Déterminez le type de variable spécifié dans l'élément <Source> :

    1. Recherchez le code dans le proxy d'API où la variable a été définie en premier.
    2. Une fois que vous avez identifié la règle où la variable est définie et renseignée en premier, vous devez déterminer le type de cette variable comme suit :
      1. Vérifiez la valeur de l'attribut "type" (le cas échéant).
      2. En l'absence d'attribut "type", la variable est considérée comme une chaîne.
    3. Si la variable est de type chaîne, il s'agit de la cause de l'erreur. Pour en savoir plus sur les variables courantes et leurs types, consultez la documentation de référence sur les variables.

    Par exemple, examinez la variable PostalCode dans la règle JSON vers XML ci-dessus.

    Prenons l'exemple d'une règle d'attribution de message qui permet d'attribuer une valeur à une variable appelée PostalCode, comme illustré ci-dessous :

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

    Notez que le type de variable défini dans <AssignVariable> est "chaîne". Ainsi, la variable PostalCode est de type "chaîne".

    Rappelez-vous que la variable PostalCode est utilisée dans l'élément <Source> de la règle JSON vers XML :

    <Source>PostalCode</Source>
    

    Comme PostalCode est de type chaîne et que l'élément <OutputVariable> est manquant, vous recevez le code d'erreur :

    steps.json2xml.OutputVariableIsNotAvailable
    

Solution

Assurez-vous que si la variable spécifiée dans l'élément <Source> de la règle JSON vers XML est de type chaîne, l'élément <OutputVariable> est défini dans la règle.

Pour corriger la règle JSON vers XML décrite ci-dessus, incluez un élément <OutputVariable> comme indiqué ci-dessous.

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

Code d'erreur

steps.json2xml.InCompatibleTypes

Corps de la réponse d'erreur

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

Exemple d'erreur

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

Cause

Cette erreur se produit si le type de la variable définie dans l'élément <Source> et dans l'élément <OutputVariable> n'est pas le même. Il est obligatoire que les types des variables contenues dans l'élément <Source> et dans l'élément <OutputVariable> correspondent.

Les types valides sont message et string.

Diagnostic

  1. Identifiez la règle JSON vers XML où l'erreur s'est produite. Vous trouverez ces informations dans l'élément faultstring de la réponse d'erreur. Par exemple, dans le fichier faultstring suivant, le nom de la règle est JSONToXML_checktype :

    "faultstring": "JSONToXML[JSONToXML_checktype]: String can not be assigned to message type."
    
  2. Dans la règle d'échec JSON vers XML défaillante, notez les valeurs spécifiées dans <OutputVariable> et <Source>.

    Prenons l'exemple de règle suivant :

    <?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. Déterminez le type de variable spécifié dans les éléments <Source> et <OutputVariable> :

    1. Recherchez le code dans le proxy d'API où chacune de ces variables a été définie en premier.
    2. Une fois que vous avez identifié la règle où la variable est définie et renseignée en premier, vous devez déterminer le type de cette variable comme suit :
      1. Vérifiez la valeur de l'attribut "type" (le cas échéant).
      2. En l'absence d'attribut "type", la variable est considérée comme une chaîne.
    3. Si le type de la variable spécifiée dans <Source> est "chaîne" alors que le type de <OutputVariable> est "message", ou inversement, il s'agit de la cause de l'erreur. Pour en savoir plus sur les variables courantes et leurs types, consultez la documentation de référence sur les variables.

    Prenons l'exemple d'une règle d'attribution de message qui permet d'attribuer une valeur à une variable appelée PostalCode, comme illustré ci-dessous :

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

    Notez que le type de variable défini dans <AssignVariable> est chaîne ; la variable PostalCode est donc de type chaîne.

    Rappelez-vous que la variable PostalCode est utilisée dans l'élément <Source> de la règle JSON vers XML :

    <Source>PostalCode</Source>
    

    De même, n'oubliez pas que la variable response est utilisée dans l'élément <OutputVariable> de la règle JSON vers XML :

    <OutputVariable>response</OutputVariable>
    

    Étant donné que PostalCode est de type chaîne et que la variable response est de type message, il s'agit de types incompatibles. Vous recevez donc le code d'erreur :

    steps.json2xml.InCompatibleTypes
    

    L'erreur ci-dessus peut également se produire si la variable de l'élément <Source> est de type message, alors que la variable de l'élément <OutputVariable> est de type chaîne.

Solution

Assurez-vous que le type de la variable définie dans l'élément <Source> et dans l'élément <OutputVariable> est le même. Il est obligatoire que les types des variables contenues dans l'élément <Source> et dans l'élément <OutputVariable> correspondent. Autrement dit, assurez-vous que les éléments <Source> et <OutputVariable> sont à la fois de type de chaîne ou de message.

Pour corriger la règle JSON vers XML mentionnée ci-dessus, vous pouvez déclarer une autre variable PostalCode_output de type chaîne à l'aide de la règle d'attribution de message et utiliser cette variable dans l'élément <OutputVariable> de la règle JSON vers XML.

Modification de la règle Assign Message :

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

Règle JSON vers XML modifiée :

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

Code d'erreur

steps.json2xml.InvalidSourceType

Corps de la réponse d'erreur

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

Exemple d'erreur

{
    "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"
        }
    }
}

Cause

Cette erreur se produit si le type de la variable utilisé pour définir l'élément <Source> est invalide. Les types de variables valides sont message et string.

Diagnostic

  1. Identifiez le type de source non valide utilisé dans la règle JSON vers XML. Vous trouverez cette information dans le message d'erreur. Par exemple, dans l'erreur suivante, le type invalide est "entier".

    "faultstring": "JSONToXML[class java.lang.Integer]: Invalid source type class java.lang.Integer. Valid source types are [message, string]."
    
  2. Examinez toutes les règles JSON vers XML dans le proxy d'API spécifique où l'échec a eu lieu. Dans la règle JSON vers XML défaillante, notez le nom de la variable spécifiée dans <Source>.

    Voici un exemple de règle dont la variable nommée EmployeeID est spécifiée dans l'élément <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. Déterminez le type de variable spécifié dans l'élément <Source> :

    1. Recherchez le code dans le proxy d'API où la variable a été définie en premier.
    2. Une fois que vous avez identifié la règle où la variable est définie et renseignée en premier, vous devez déterminer le type de cette variable comme suit :
      1. Vérifiez la valeur de l'attribut "type" (le cas échéant).
      2. En l'absence d'attribut "type", la variable est considérée comme une chaîne.
    3. Si le type de la variable spécifiée dans <Source> n'est ni message ni chaîne, il s'agit de la cause de l'erreur. Pour en savoir plus sur les variables courantes et leurs types, consultez la documentation de référence sur les variables.

    À titre d'exemple, considérons une règle ExtractVariables utilisée pour extraire la valeur d'une charge utile JSON et qui définit la valeur sur la variable EmployeeID du type entier, comme indiqué ci-dessous :

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

    Rappelez-vous que la variable EmployeeID est utilisée dans l'élément <Source> de la règle JSON vers XML :

    <Source>EmployeeID</Source>
    

    Comme le type de cette variable est Integer, qui n'est pas un type <Source> valide, le proxy d'API échoue et renvoie l'erreur :

    steps.json2xml.InvalidSourceType
    

Solution

Assurez-vous que le type de la variable utilisée pour spécifier l'élément <Source> est valide. Les types valides <Source> sont message et string.

Afin d'éviter l'erreur ci-dessus dans une règle JSON vers XML, vous pouvez utiliser la variable de requête de type message ou toute autre chaîne correspondant à une charge utile JSON valide.