by Robert Cooper

Ok, it has been a while since I have seen a tool that made me go, "Wow, why am I not using this," but I have a new one: Enuciate. This is a "cooker" that will take a Java service implementation as a set of POJOs, or JSR-181 annotated stuff, and spit out a WAR file with an Xfire backed SOAP service, a REST service, a JSON service and some fairly nice looking Docs scraped off the JavaDoc. The rest stuff is annotation based, and I wonder if there are plans to move it to a JSR-311 based system. The cook system is broken out into modules, and I am thinking making a GWT RPC service module would be a cool thing too.


Ryan Heaton
2007-03-31 08:55:03
I'm happy you like it, thanks for the review!

Without doubt, Enunciate will provide support for the JSR-311 annotations when the spec is more solidified. In fact, I'm being considered for the expert group.

And I'd love to see your GWT RPC service module. I'm very interested in getting feedback on the experience of extending Enunciate. Keep me posted!

Frank Wilhoit
2007-04-02 05:51:18
The cart has seldom been so dramatically placed before the horse. The whole point of service interfaces is to conceal the underlying technology. Define the service interface contract first along with a global, neutral representation for the payloads. Then adapt to the endpoints, using whatever horrible expedients are necessary, but make sure that no one outside of each endpoint's space ever sees any of that. The code should not come first but last.
2007-04-02 12:35:19
What is "Enuciate"? Do you mean "Enunciate"?
Patrick Carroll
2007-04-03 12:49:30
Hi Frank,

I've never written WSDL. I wouldn't want to try. I mean, have you looked at that stuff? Yuck! Instead, I've written interfaces and then applied axis2wsdl. Bottom line: the applicaton came first and the WSDL was a by-product to provide the SOAP interface.

If I've failed to abide by the dogma of the Church of SOAP, well, burn me at the stake. Along with many others.

Anyway, these guys have just taken the inverson to its logical conclusion: write the implementation, and then let a really comprehensive generator take care of putting the web service fiddly bits in place.

I think this is a brilliant piece of work. I'm not sure how it performs relative to Axis, but I think the approach to deployment is much better.


2007-04-03 13:02:09
I agree completely Patrick.

Especially since the introduction of the JAX-WS and JAX-B 2.0 annotations, there is little that you can't specify in Java. Moreoever, it is possible to do things with XSD that don't actually map to an idiom in anny OOP language. Let's face it, whether in .Net, PHP or Java, people expect to generate a client for a SOAP service, and doing something, like a choose with differing base types, makes it impossible to do. That only angers your users. I know some people thing SOAP should be about Document processing, but it isn't Simple Document Access Protocol.

Also, I will say, the Xfire base for Enunciate is much MUCH better than Axis. We finally expunged Axis from our development stack at work, and we are all the better for it. Xfire is faster, interoperates with other clients (.NET, Flash, PHP) better than Axis and gives you a number of options for mapping, though I have found the JAX-B stuff is all you really need.

Patrick Carroll
2007-04-04 08:25:44
I should have written "java2wsdl" above. I apologize for any confusion.