XSLT

Este interceptor permite a execução de transformações nas requisições e respostas através de XSLT 2.0 (Extensible Stylesheet Language Transformations).

Funcionamento

O interceptor deve ser configurado com um script, que, por sua vez, será executado sobre o body da requisição.

O interceptor XSLT permite executar transformações somente sobre XML. Caso o body esteja no formato JSON, ele será convertido automaticamente para XML antes da execução do XSLT*.

Configurando o interceptor

Para configurar o interceptor, é necessário incluir o script a ser executado no campo Content.

É possível utilizar parâmetros do header, path ou query na execução do interceptor. Para isso, utilize as variáveis $header.NOME_HEADER, $queryParam.NOME_QUERY and $pathParam.NOME_PATH.

Você pode consultar um exemplo de script abaixo

A opção Abort request if fail pode ser selecionada; ela aborta a requisição em caso de falha.

xslt

Exemplo de script

Abaixo temos um exemplo de transformação que monta um novo body na requisição, a partir de um valor de um JSON que foi enviado pelo cliente e um valor de cada tipo de parâmetro:

<xsl:stylesheet
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:wsx="http://www.webservicex.net"
        exclude-result-prefixes="xs xsi xsl"
        version="2.0">
    <xsl:output method="xml" encoding="UTF-8" indent="yes"/>
    <xsl:template match="/" >
        <soap:Envelope>
            <soap:Header/>
            <soap:Body>
                <wsx:GetWeatherByPlaceName>
                    <wsx:ValorBody>
                        <xsl:value-of select="tool/name" />
                    </wsx:BodyValue>
                    <wsx:HeaderValue>
                        <xsl:value-of select="$header.content-type" />
                    </wsx:HeaderValue>
                    <wsx:QueryValue>
                        <xsl:value-of select="$queryParam.id" />
                    </wsx:QueryValue>
                </wsx:GetWeatherByPlaceName>
            </soap:Body>
        </soap:Envelope>
    </xsl:template>
</xsl:stylesheet>

Imaginando que o interceptor XSLT esteja configurado no fluxo, ele transformará o body da seguinte requisição:

POST /api?id=123
Header Content-Type:application/json
{
  "tool": {
    "name": "API Suite",
    "since": "2012"
  }
}

E este será o novo body criado:

<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope
    xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:wsx="http://www.webservicex.net">
    <soap:Header/>
    <soap:Body>
        <wsx:GetWeatherByPlaceName>
            <wsx:ValorBody>API Suite</wsx:ValorBody>
            <wsx:ValorHeader>application/json</wsx:ValorHeader>
            <wsx:ValorQuery>123</wsx:ValorQuery>
        </wsx:GetWeatherByPlaceName>
    </soap:Body>
</soap:Envelope>
Thanks for your feedback!
EDIT
How useful was this article to you?