XSLT Transformations

In an environment with existing SOAP and REST clients, you do not need to modify these clients to work with Virtual DataPort Web services. You can define XSLT stylesheets (XSL Transformations) to transform the incoming requests in order to adapt them to the format that the Denodo Web services expect. You can also define stylesheets to transform the responses of these services, before sending them to the existing clients.

Virtual DataPort uses the Saxon-HE XSLT and XQuery processor to process XSLT transformations. This processor supports the XSLT 2.0 specification.

Follow these steps to define XSLT transformations for a Web service:

  1. In the Settings tab of the “SOAP Web service” or “REST Web service”, select the operation (Operation name) or view (Resource configuration) you want to transform and click XSLT Transformation.

  2. Select the Input XSLT Transformation check box and write the stylesheet. This stylesheet will be applied to the incoming requests, to transform them into the format expected by the Virtual DataPort Web service. If this check box is cleared, the input will not be modified.

  3. Select the Output XSLT Transformation check box and write the stylesheet. This stylesheet will be applied to the responses generated by the Denodo Web service, to transform them into the format expected by the existing SOAP client. If this check box is cleared, the input will not be modified.

  4. Only for SOAP Web services: if the existing SOAP client sends the parameter SOAPAction with its requests and the parameter cannot be changed, select the Incoming SOAPAction check box and write it.

  5. Click Ok and repeat these steps for each operation of the Web service that you want to transform.

By default, the XSLT transformations are applied to data but not to the error messages returned by the Web service. Select Apply output XSLT to error messages if you want the Service to apply the transformations to error messages as well. In REST Web services, this option only affects the XML representation of the views.


Starting with the March 2019 update, the output XSL transformation of the REST web services can include the XSL declaration <xsl:output>. This declaration changes the value of the HTTP header Content-type of the responses of service.

If you configure a REST web service with the output XSL transformation below, when the client requests the XML representation of a view, the HTTP header Content-type of the response will be application/json. Without this declaration, the service returns the default Content-type; that is application/xml; subtype=denodo-7.0; charset=UTF-8.

XSL transformation that converts an XML document into a JSON document
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <xsl:output media-type="application/json"/>

    <xsl:template match="*">

        <xsl:element name="{local-name()}">
            <xsl:apply-templates select="node()|@*"/>
        </xsl:element>
    </xsl:template>

</xsl:stylesheet>

Notes

  • The REST services only apply the output XSL transformation when:

    1. The client requests the XML representation of the data. That is, the URL of the request has the parameter $format=xml or the request includes the HTTP header Accept: application/xml. If the client requests another representation (e.g. HTML), the service does not apply the XSL transformations of the service.

    2. The client requests the data of a view (e.g. http://denodo-server.acme.com/server/customer360/ws_rest_customer360/views/customer). The transformation is not applied over the list of views published by the service.

  • The REST services process the declaration <xsl:output> of the output XSL transformation, not of the input XSL transformation.

  • The xsl:output declaration is optional. If used, it must always appear as a top-level element, not nested within another stylesheet module.

  • SOAP web services ignore the declaration xsl:output.


See appendix Transforming Incoming/Outgoing Soap/Rest Messages with XSLT Stylesheets for more details on how to generate these XSLT stylesheets.