XML-APIs

  • Freigeben Version: Zurich
  • Aktualisiert 13. März 2026
  • 4 Minuten Lesedauer
  • XML-APIs können nach dem Aufrufen von getAsXmlContent() entweder über das Objekt Anforderung oder eine Eigenschaft ParameterValue verwendet werden.

    Wenn Sie XML-APIs zum Schreiben Ihrer Verschlüsselungsregel verwenden, können Sie ein allgemeines Format verwenden:
    1. Aufrufen von getAsXmlContent() über das Objekt Anforderung oder die Eigenschaft ParameterValue. Dies gibt ein iterierbares Objekt der zugrunde liegenden Klasse XMLContent zurück.
    2. Aufrufen von getIterator() oder getIterator(String xPath) im Objekt XMLContent. Dies gibt ein Objekt XMLElementIterator zurück, das zum Iterieren von XML-Elementen verwendet werden kann.
    3. Aufrufen der Methode hasNext() im Objekt XMLElementIterator, um zu bestimmen, ob ein anderes Element verfügbar ist.
    4. Aufrufen von next() im Objekt XMLElementIterator, um das nächste XML-Element zurückzugeben. Sie können next() erst nach Aufrufen von hasNext() aufrufen.
    5. Aufruf von valueFor(String tableName, String fieldName) auf dem XML-Element. Diese Methode teilt dem Proxy mit, dass der Wert für dieses Element dem angegebenen Feld in der angegebenen Tabelle zugeordnet ist. Der Proxy prüft dann, ob das Feld verschlüsselt werden muss.
      Hinweis:
      Um festzustellen, ob Sie valueFor(String tableName, String fieldName) auf einem XML-Element aufrufen möchten, können Sie die Methode getName() verwenden, um den Namen des Elements zurückzugeben.

    Zu einem bekannten Tabellenfeld in der Instanz zuordnen

    In diesem Beispiel wird die XML-Payload auf der Instanz verarbeitet, um Datensätze in die Incident-Tabelle einzufügen. Das Beschreibungsfeld füllt den Incident mit short_description aus.

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

    Die folgende Verschlüsselungsregelaktion kann angewendet werden:

    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');
        }
    }

    Diese Aktion iteriert das Tag Beschreibung und fordert den Proxy-Server auf, die Werte zu verschlüsseln und sie in der Instanz in instance.short_description einzufügen.

    Hinweis:
    Diese Regel findet alle Tags Beschreibung in allen Tags Datensatz in der XML-Payload. Wenn es nur ein einziges Vorkommen eines zu verschlüsselnden Tags gibt, verwendet die Regel weiterhin die xPath- und Iteratorstruktur. Es iteriert jedoch nur einmal in der Schleife.

    Zu einem unbekannten Tabellenfeld in der Instanz zuordnen

    In diesem Beispiel iteriert die Regel die Tags Datensatz, weiß jedoch nicht, welche Tags innerhalb des Tags Datensatz zu erwarten sind. Es ist nur bekannt, dass die Tags innerhalb der Tags Datensatz mit den Namen der in der Tabelle „URL-Parameter“ angegebenen Spalten übereinstimmen.

    Die Regel legt außerdem fest, dass bei Vorliegen einer Incident-Tabelle, die Daten im Tag Beschreibung verschlüsselt und im Feld short_description der Instanz gespeichert werden sollen.

    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);
            }
        }
    }

    In der Funktion encryptFieldsInRecord() wird die Methode valueFor() für eine Tabelle und ein Feld aufgerufen, die aufgrund der Anforderung dynamisch zugewiesen werden. Obwohl sich die Tabellen- und Feldnamen ändern können, fordert die Regel den Proxy auf, zu prüfen, ob das Feld in der Tabelle aufgrund der definierten Verschlüsselungskonfigurationen verschlüsselt werden muss.

    Wenn das Feld nicht für die Verschlüsselung konfiguriert ist oder das Tag nicht mit einem Feld in der Tabelle übereinstimmt, überspringt der Proxy dieses Tag. Wenn das Tag mit einem für die Verschlüsselung markierten Feld übereinstimmt, verschlüsselt der Edge Encryption Proxy-Server den Wert.

    Eine verschlüsselte Abfrage verwenden

    In diesem Beispiel haben alle Tags das Attribut Filter, das angibt, ob das Tag eine verschlüsselte Abfrage enthält.

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

    Die folgende Verschlüsselungsregelaktion kann angewendet werden:

    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);
           }
       }
    }

    Wenn das Attribut Filter „Wahr“ ist, fordert die Regel den Proxy-Server auf, die Werte in der verschlüsselten Abfrage zu verschlüsseln. Bei „falsch“ fordert die Regel den Proxy auf, zu überprüfen, ob das Feld verschlüsselt werden soll.