I recently came across this requirement where a xsd:datetime in the payload is needed to be converted to a different date time format as follows,

Original format : 2015-01-07T09:30:10+02:00
Required date: 2015/01/07 09:30:10

In WSO2 ESB, I found that this transformation can be achieved through a XSLT mediator, class mediator or a script mediator. In an overview, XSLT mediator uses a XSL stylesheet to format the xml payload passed to the mediator whereas in class mediator and script mediator we use java code and javascript code respectively to manipulate the message context. In this blog post I am going to present how this transformation can be achieved by means of the XSLT mediator.

XSL Stylesheet
<?xml version="1.0" encoding="UTF-8"?>
<localEntry xmlns="http://ws.apache.org/ns/synapse" key="dateTime.xsl">
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" version="2.0">
        <xsl:output method="xml" omit-xml-declaration="yes" indent="yes" />
        <xsl:param name="date_time" />
        <xsl:template match="/">
            <dateTime>
                <required>
                    <xsl:value-of select="format-dateTime(xs:dateTime($date_time), '[Y0001]/[M01]/[D01] [H01]:[m01]:[s01] [z]')" />
                </required>
            </dateTime>
        </xsl:template>
    </xsl:stylesheet>
    <description />
</localEntry>


Proxy configuration
<?xml version="1.0" encoding="UTF-8"?>
<proxy xmlns="http://ws.apache.org/ns/synapse" xmlns:xs="http://www.w3.org/2001/XMLSchema" name="DateTimeTransformation" transports="https http" startOnLoad="true" trace="disable">
    <target>
        <inSequence>
            <property name="originalFormat" expression="$body/dateTime/original" />
            <xslt key="dateTime.xsl">
                <property name="date_time" expression="get-property('originalFormat')" />
            </xslt>
            <log level="full" />
        </inSequence>
    </target>
</proxy>

dateTime.xsl XLS style sheet is stored as an inline xml local entry in ESB.

In the proxy, the original date is passed as an parameter ("date_time") to the XLS style sheet. I have used format-dateTime function, a function of XSL 2.0, to do the transformation.

Sample request
<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
    <soap:Header />
    <soap:Body>
        <dateTime>
            <original>2015-01-07T09:30:10+02:00</original>
        </dateTime>
    </soap:Body>
</soap:Envelope>

Console output
<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
    <soap:Body>
        <dateTime xmlns="http://ws.apache.org/ns/synapse" xmlns:xs="http://www.w3.org/2001/XMLSchema">
            <required>2015/01/07 09:30:10 GMT+2</required>
        </dateTime>
    </soap:Body>
</soap:Envelope>
0

Add a comment

A late announcement, a little more than 2 years, I moved to Medium. I won't be making any new posts here in this blog. Please refer/follow https://medium.com/@callkalpa for the latest articles.

Welcome to WSO2 Application Server 6.0.0, the successor of WSO2 Carbon based Application Server. WSO2 Application Server 6.0.0 is a complete revamp and is based on vanilla Apache Tomcat. WSO2 provides a number of features by means of extensions to Tomcat to add/enhance the functionality. It provides first class support for generic web applications and JAX-RS/JAX-WS web applications.

Welcome to WSO2 Application Server, the successor of WSO2 Carbon based Application Server. WSO2 Application Server 6.0.0 is a complete revamp and is based on vanilla Apache Tomcat. WSO2 provides a number of features by means of extensions to Tomcat to add/enhance the functionality. It provides first class support for generic web applications and JAX-RS/JAX-WS web applications.

FAD Singapore 2015 was held on 5th and 6th of December in Singapore and I participated at the event. FAD (Fedora Activity Day) is supposed to be an event of one day or multiple days with the intention of working on a specific task(s) related to Fedora Project. So FAD Singapore 2015 was organized in order to discuss the way forward and the issues APAC region.

Introduction to Go for Java Programmers" is a tech talk I delivered recently at WSO2.

In this talk I briefly introduced Go (aka golang) and compared Go with Java in key aspects I thought are important. Slide deck used is embedded below. Source code of the demos alone with additional samples are here.

There are a number of resources to learn Go. If you are worried about from where to start, try A Tour of Go.

We are pleased to announce the alpha release of WSO2 Carbon Kernel 5.0.0. It is now available to download from here. The source and tag location for this release are available here.

WSO2 Carbon Kernel 5.0.0 is the core of the next-generation WSO2 Carbon platform. We have completely rearchitected Carbon Kernel from the ground up with the latest technologies and patterns.

We are pleased to announce that the sixth milestone release of Carbon Kernel 5.0.0 is now available to download from here. The Source and Tag Location for this release are available here.

Carbon Kernel 5.0.0 is the core of the next-generation WSO2 Carbon platform. We have completely rearchitected Carbon Kernel from the ground up with the latest technologies and patterns.

The WSO2 Application Server is an enterprise-ready cloud-enabled application server, powered by Apache Tomcat, and Apache TomEE, it integrates Apache CXF framework. It provides first class support for standard Web applications, JAX-WS/JAX-RS applications and Jaggery scripting applications. Coupled with features of WSO2 Carbon, users can now manage their applications including JAX-WS and JAX-RS to web applications in a unified manner within the management console itself.

I was using enrich mediator in WSO2 ESB to add a child to a parent element in the payload. The new element got added as the last element of the children where I wanted it as the first. I tried action="sibling" but as per the synapse code it also adds the element after the target element [1]. So I decided to make use of XSLT and following is a sample stylesheet along with the input and expected messages.

After using Ubuntu (13.10) for like almost one year I decided to move back to Fedora (Fedora 21). This is going to be a short post on my experience on mounting the same /home I used in Ubuntu for Fedora.

I had a separate partition for /home in Ubuntu which I needed to be mounted as the /home in Fedora as well. In anaconda (Fedora installer) I choose to configure the partitions manually.
About Me
About Me
Subscribe
Subscribe
Loading