Temos uma situação simples porem frequente nos fluxos entre APIS e Backend, onde é preciso realizar manipulações de XML para compor uma melhor resposta a partir das informação extraídas.
Uma forma prática de manipular e compor estes resultados é através do custom interceptor java script, para isso temos um exemplo prático. Temos um XML que queremos manipular e extrair informações, a partir de um trecho de código realizamos o parse do XML e consultamos o valor especifico responseCode .
XML
No nosso XML, retornado por um Backend SOAP, temos algumas informações que queremos utilizar.
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"/>
<soap:Body>
<soap:Fault>
<faultcode>soap:Server</faultcode>
<faultstring>Server validation error</faultstring>
<detail>
<ns2:WsError xmlns:ns2="http://all.wsdl.cms.com/">
<faults>
<responseCode>-2</responseCode>
<responseDesc>notificationId: Id Aviso de viagem inválido</responseDesc>
</faults>
</ns2:WsError>
</detail>
</soap:Fault>
</soap:Body>
</soap:Envelope>
JS
No Java Script abaixo, dentro de um custom interceptor, iremos manipular o XML e consumir o responseCode.
try {
// Recupera o body de response( XML do exemplo).
var body = $response.getBody().getString('utf-8');
// Procurando por elementos no Document utilizando xpath. responseCode
var responseCode = $jdom.findElements($jdom.parse(body), "//*[local-name()='responseCode']");
// Se encontrou, vamos pegar o valor do elements na posição 0.
var body = responseCode.get(0).getValue();
//monta o response
$call.decision.setAccept(false);
$call.stopFlow = true;
$call.response = new com.sensedia.apigateway.services.ApiResponse();
$call.response.setStatus(200);
$call.response.setHeader("Content-type", "text/plain");
$call.response.getBody().setString(body, "utf-8");
} catch (e) {
$call.tracer.trace(e);
throw e;
}
Este é um exemplo de uma das formas que podemos realizar a manipulação dos dados. Tendo por base estes comando basta adaptarmos o script para o cenário que atenda as mais variadas situações e assim compor a resposta ideal.
Comentários
0 comentário
Por favor, entre para comentar.