I got to go to QCon in London this year, and decided to put together something challenging for my presentation. I'd been playing with Unified Business Language (UBL 2.0), and posed the question: how easy would it be to build a Celtix Enterpise server that can accept a UBL invoice in a variety of formats (XML, SOAP, JSON) over a number of transports (AMQP, JMS and HTTP)?
Finding the answer turned out to be a lot of fun: Using Eclipse, WTP and Celtix Enterprise I quickly got a WSDL contract together for the service, along with bindings for XML and SOAP payloads. After that, implementation was straightforward JAX-WS - all the details are provided in my slideware, which I'm attaching to this blog. Using JSON was a little tricky, but thanks to some help from Dan Diephouse (Thanks Dan!) I used the Jettison STAX implementation with an XML binding to produce both Badgerfish and mapped JSON. It's a pragmatic approach, but I'd prefer it if there was a bona-fide JSON binding for WSDL that handles these detail, taking JSON support out of the code and into the contract. Maybe that's something we should get into the Apache CXF roadmap?
While it's always great to put a lovely demo together and have it work on the day, its doubly rewarding to see how relevant this stuff is: AMQP is a hot topic right now and the ability to simply configure AMQP in to a pure-Java JAX-WS client or service is really nice. Also, as Sailesh Panchal of Travelex was keen to point out in his presentation, the ability to support XML and SOAP payloads over multiple transports is hugely important in terms of producing really reusable services, supporting both REST and SOA architectures.
Next up? I'd like to push my demo a little further to get some performance stats over different payload and protocol combinations: I've heard talk that JSON parsing can be up to 100x faster than XML parsing: let's see if that really holds true. Also, I'm keen to test the fundamental premise of AMQP: on-the-wire interoperability between different messaging middlewares. Right now my client, service and broker are all Apache QPID, the AMQP implementation that comes bundled in Celtix enterprise. I'd like to see what happens if when I swap the qpid broker with open-amqp or RabbitMQ... watch this space for more...

Comments (2)
Thanks for blogging about QCon! I just wanted to let you know that we quoted and linked from this entry on the over all QCon 2007 blogger's key takeaway points and lessons learned article: http://www.infoq.com/articles/qcon-2007-bloggers-summary
Feel free to link to it and of course blogging about this articles existence would help even more people learn from your and other bloggers takeaways.
Thanks again!
Diana
InfoQ/QCon
Posted by diana plesa | March 22, 2007 12:57 PM
Posted on March 22, 2007 12:57
Nice set of slides. Would it be possible to share the demo artifacts, so that i can try it out.
Posted by Chandrashekhar | October 17, 2007 7:21 PM
Posted on October 17, 2007 19:21