XML APIs

  • Versão de lançamento: Zurich
  • Atualizado 13 de mar. de 2026
  • 4 min. de leitura
  • As XML APIs podem ser usadas depois de chamar getAsXmlContent() no objeto request ou em uma propriedade ParameterValue.

    Ao usar XML APIs para gravar sua regra de criptografia, você pode seguir um formato geral:
    1. Chame getAsXmlContent() no objeto request ou em uma propriedade ParameterValue. Isso retorna um objeto iterável da classe XMLContent subjacente.
    2. Chame getIterator() ou getIterator(cadeia de caracteres "xPath") no objeto XMLContent. Isso retorna um objeto XMLElementIterator que pode ser usado para iterar em elementos "XML".
    3. Chame o método hasNext() no objeto XMLElementIterator para determinar se outro elemento está disponível.
    4. Chame next() no objeto XMLElementIterator para retornar o próximo elemento "XML". Você não pode chamar next() sem primeiro chamar hasNext().
    5. Chame valueFor(cadeia de caracteres "tableName", cadeia de caracteres "fieldName") no elemento "XML". Este método informa ao proxy que o valor desse elemento é mapeado para o campo especificado na tabela especificada. Dessa forma, o proxy verifica se o campo deve ser criptografado.
      Nota:
      Para determinar se você deseja chamar valueFor(cadeia de caracteres "tableName", cadeia de caracteres "fieldName") em um elemento "XML", você pode usar o método getName() para retornar o nome do elemento.

    Mapeamento para um campo-tabela conhecido na instância

    Neste exemplo, a carga XML será processada na instância para inserir registros na tabela de incidentes. O campo de descrição preencherá "short_description" no incidente.

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

    A seguinte ação de regra de criptografia pode ser aplicada:

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

    Esta ação itera por meio de marcadores description e solicita que o servidor proxy criptografe os valores e os insira em "incident.short_description" na instância.

    Nota:
    Esta regra encontra todos os marcadores description em todos os marcadores record na carga XML. Se houver apenas uma ocorrência de um marcador para criptografar, a regra ainda usará a estrutura "xPath" e "iterador". No entanto, ele itera apenas uma vez no loop.

    Mapeamento para um campo-tabela desconhecido na instância

    Neste exemplo, a regra itera sobre os marcadores record, mas não sabe quais marcadores esperar no marcador record. O único conhecido é que os marcadores nos marcadores record correspondem aos nomes das colunas especificadas no parâmetro de URL da tabela.

    A regra também especifica que, se a tabela for incidente, os dados no marcador description devem ser criptografados e armazenados no campo "short_description" na instância.

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

    Na função encryptFieldsInRecord(), o método valueFor() é chamado em uma tabela e em um campo que são atribuídos dinamicamente com base na solicitação. Mesmo que os nomes da tabela e do campo possam mudar, a regra solicita que o proxy verifique se o campo na tabela deve ser criptografado com base nas configurações de criptografia definidas.

    Se o campo não estiver configurado para criptografia ou se o marcador não corresponder a um campo na tabela, o proxy ignorará esse marcador. Se o marcador corresponder a um campo marcado para criptografia, o servidor proxy Edge Encryption criptografará o valor.

    Uso de uma consulta codificada

    Neste exemplo, todos os marcadores têm o atributo filter, que indica se o marcador contém uma consulta codificada.

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

    A seguinte ação de regra de criptografia pode ser aplicada:

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

    Se o valor do atributo filter for verdadeiro, a regra solicitará que o servidor proxy criptografe os valores na consulta codificada. Se for falso, a regra solicitará que o proxy verifique se o campo deve ser criptografado.