API XML

  • Rversion finale: Yokohama
  • Mis à jour 9 janv. 2026
  • 4 minutes de lecture
  • Les API XML peuvent être utilisées après l’appel de getAsXmlContent()sur l’objet de demande ou une propriété ParameterValue .

    Lorsque vous utilisez des API XML pour écrire votre règle de chiffrement, vous pouvez suivre un format général :
    1. Appelez getAsXmlContent()sur l’objet de demande ou la propriété ParameterValue . Cela renvoie un objet itérable de la classe sous-jacente XMLContent .
    2. Appelez getIterator() ou getIterator(String xPath) sur l’objet XMLContent . Cela renvoie un objet XMLElementIterator qui peut être utilisé pour itérer sur des éléments XML.
    3. Appelez la méthode hasNext() sur l’objet XMLElementIterator pour déterminer si un autre élément est disponible.
    4. Appelez next() sur l’objet XMLElementIterator pour renvoyer l’élément XML suivant. Vous ne pouvez pas appeler next() sans appeler d’abord hasNext().
    5. Appelez valueFor(String tableName, String fieldName) sur l’élément XML. Cette méthode indique au proxy que la valeur de cet élément est mappée au champ spécifié dans la table spécifiée. Le proxy vérifie ensuite si le champ doit être chiffré.
      Remarque :
      Pour déterminer si vous souhaitez appeler valueFor(String tableName, String fieldName) sur un élément XML, vous pouvez utiliser la méthode getName() pour renvoyer le nom de l’élément.

    Mappage à un champ de table connu sur l’instance

    Dans cet exemple, la charge utile XML sera traitée sur l’instance pour insérer des enregistrements dans la table d’incidents. Le champ de description renseignera les short_description sur l’incident.

    <data>
        <record>
            <name>'Test Record 1'</name>
            <description>'Test Record 1 Description'</description>
            <tag>critical</tag>
        </record>
        <record>
            <name>'Test Record 2'</name>
            <description>'Test Record 2 Description'</description>
            <tag>security</tag>
        </record>
    </data>

    L’action de règle de chiffrement suivante peut s’appliquer :

    function sampleXmlAction1() {
        var xmlContent = request.getAsXmlContent();
        // This loop iterates over all description tags that match the given path
        var xmlElementIterator = xmlContent.getIterator('data/record/description');    
        while (xmlElementIterator.hasNext()) {
            var xmlElement = xmlElementIterator.next();
            xmlElement.valueFor('incident', 'short_decription');
        }
    }

    Cette action itère les balises de description et demande au serveur proxy de chiffrer les valeurs et de les insérer dans incident.short_description sur l’instance.

    Remarque :
    Cette règle trouve toutes les balises de description dans toutes les balises d’enregistrement de la charge utile XML. S’il n’y a qu’une seule occurrence d’une balise à chiffrer, la règle utilise toujours la structure xPath et itérateur. Cependant, il n’itére qu’une seule fois dans la boucle.

    Mappage à un champ de table inconnu sur l’instance

    Dans cet exemple, la règle itère sur les balises d’enregistrement , mais ne sait pas à quelles balises s’attendre dans la balise d’enregistrement . La seule chose connue est que les balises dans les balises d’enregistrement correspondent aux noms des colonnes spécifiées dans le paramètre URL de table.

    La règle spécifie également que, si la table est incidente, les données de la balise de description doivent être chiffrées et stockées dans le champ short_description de l’instance.

    function sampleXmlAction2() {
        var xmlContent = request.getAsXmlContent();
        var tableName = request.urlParam.table;
        // This first iterator will iterate over all record elements
        var xmlElementIterator = xmlContent.getIterator('data/record');
        while (xmlElementIterator.hasNext()) {
            encryptFieldsInRecord(xmlElementIterator.next());
        }
    }
    function encryptFieldsInRecord(xmlElement) {
        //Then, iterate over all tags representing fields in the table
        var fieldIterator = xmlElement.getIteratorOverAllChildren();
        while (fieldIterator.hasNext()) {
            var field = fieldIterator.next();
            var fieldName = childElement.getName();
            //if table is incident, then description is encrypted for the short_description field
            if (tableName == 'incident' && fieldName == 'description') {
                field.valueFor(tableName, 'short_description');
            } else {
                //if table is not incident, ask the proxy to check if the given field is encrypted for the given table
                field.valueFor(tableName, fieldName);
            }
        }
    }

    Dans la fonction encryptFieldsInRecord(), la méthode valueFor() est appelée sur une table et un champ qui sont affectés dynamiquement en fonction de la demande. Même si les noms de table et de champ peuvent changer, la règle demande au proxy de vérifier si le champ de la table doit être chiffré en fonction des configurations de chiffrement définies.

    Si le champ n’est pas configuré pour le chiffrement ou si la balise ne correspond pas à un champ de la table, le proxy ignore cette balise. Si la balise correspond à un champ marqué pour le chiffrement, le Chiffrement Edge serveur proxy chiffre la valeur.

    Utilisation d’une requête codée

    Dans cet exemple, toutes les balises ont l’attribut filter , qui indique si la balise contient une requête codée.

    <data>
        <record>
            <name filter="false">'Test Record 1'</name>
            <description filter="false">'Test Record 1 Description'</description>
            <query filter="true">category=1^name=edge</query>
        </record>
        <record>
            <name filter="false">'Test Record 2'</name>
            <description filter="false">'Test Record 2 Description'</description>
            <query filter="true">category=2^severity=3</query>
       </record>
    </data>

    L’action de règle de chiffrement suivante peut s’appliquer :

    function sampleXmlAction3() {
       var xmlContent = request.getAsXmlContent();
       var tableName = request.urlParam.table;
       // This first iterator will iterate over all record elements
       var xmlElementIterator = xmlContent.getIterator('data/record');
       while (xmlElementIterator.hasNext()) {
           encryptFieldsInRecord(xmlElementIterator.next());
       }
    }
    function encryptFieldsInRecord(xmlElement) {
       //this time we want to iterate over all tags representing fields in the table
       var fieldIterator = xmlElement.getIteratorOverAllChildren();
       while (fieldIterator.hasNext()) {
           var field = fieldIterator.next();
           var fieldname = childElement.getName();
           //let's look at the filter attribute, if true, then encrypt as encoded query
           if (field.getAttributeValue('filter') == 'true') {
               field.encodedQueryFor(tableName);
           } else {
               //if it is false then check if the field should be encrypted
               field.valueFor(tableName, fieldName);
           }
       }
    }

    Si la valeur de l’attribut de filtre est définie sur vrai, la règle demande au serveur proxy de chiffrer les valeurs de la requête codée. Si faux, la règle demande au proxy de vérifier si le champ doit être chiffré.