XML APIs
As XML APIs podem ser usadas depois de chamar getAsXmlContent() no objeto request ou em uma propriedade ParameterValue.
- Chame getAsXmlContent() no objeto request ou em uma propriedade ParameterValue. Isso retorna um objeto iterável da classe XMLContent subjacente.
- 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".
- Chame o método hasNext() no objeto XMLElementIterator para determinar se outro elemento está disponível.
- Chame next() no objeto XMLElementIterator para retornar o próximo elemento "XML". Você não pode chamar next() sem primeiro chamar hasNext().
- 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.
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.