XmlTransformer#
Действие XmlTransformer предназначено для изменения тела Xml-сообщения.
На текущий момент возможно только удаление из тела Xml-сообщения элементов, не прошедших валидацию.
Параметры:
Название |
Обязательность |
Допустимые значения |
Описание |
|---|---|---|---|
elements_to_remove |
+ |
forbidden_in_schema |
Обязательный параметр, содержащий в себе перечень элементов для удаления. На текущий момент поддерживается только значение forbidden_in_schema. |
formatted_output |
- |
true/false |
Необязательный параметр, определяющий необходимость форматирования сообщения после преобразования. |
fragment |
- |
true/false |
Необязательный параметр, определяющий является ли данное сообщение фрагментом. |
validation_schema |
+ |
Элемент вида {type: file, path: путь} |
Обязательный параметр, описывающий относительный путь к схеме валидации от каталога ресурсов профиля, задается в виде: {type: file, path: путь} |
Рассмотрим пример:
system:
optional:
underscores_in_headers: true
log_level: debug
# объявление переменной $result_body, в которой будет содержаться значение тела оригинального запроса
# (в случае, когда удаление элементов не требуется) и значение тела запроса без запрещенных элементов
# (в случае, если какие-либо элементы были удалены из тела запроса)
maps:
- src_var: $clj_trimmed_body
dst_var: $result_body
volatile: true
# по дефолту берем значение из переменной $clj_trimmed_body, а если она пустая, то из переменной $request_body
mapping:
- src_val: ''
dst_val: $request_body
default: $clj_trimmed_body
.......................
service_http_proxy:
- id: xmlTransformer
............
chains:
request_chains:
- actions:
- action: XmlTransformer
params:
validation_schema: {type: file, path: schemes/xsd/XMLTRANSFORMER/soapenvelope.xsd}
elements_to_remove: forbidden_in_schema
conditions:
- var: $request_method
operator: 'in'
val: POST
actions:
- action: XsdValidation
params:
validation_schema: {type: file, path: schemes/xsd/XMLTRANSFORMER/soapenvelope.xsd}
message: $clj_request_body
optional:
# указываем из какой переменной брать тело запроса для его последующей передачи на backend
# ранее в эту переменную мы поместили тело запроса после удаления из него запрещенных элементов
proxy_set_body: $result_body
В приведенном примере осуществляется удаление запрещенных элементов из запроса, не соответствующих схеме.
Заполняемые переменные
По результатам своего выполнения, действие XmlTransformer может заполнять следующие переменные:
clj_trimmed_body - тело сообщения после удаления из него запрещенных элементов;
clj_validation_error_code - код ошибки;
clj_validation_error_description - расшифровка кода ошибки.