Enunciate - Articulate Your Web API

I’ve mentioned this is passing to a few people, but there’s an interesting little project called Enunciateout there that looks extremely interesting for developing web services.

It’s sort of a meta framework in the sense that it allows you to define your web services as annotated Java POJOs and then it internally uses multiple other frameworks to expose those web services with features like:

  • Full user documentation
  • Consolidated, annotated WSDL(s) referencing a common set of schemas
  • The same endpoint(s) published via SOAP, REST, JSON, and GWT-RPC
  • Client-side libraries for download (JDK 1.4, JDK 1.5, GWT, etc)
  • All packaged in a single war (docs, client libs, implementation code, etc)

Here’s the example API page and the example API downloads link.

Currently, it leverages FreeMarker, Spring, XFire and GWT under the hood, but the roadmap is impressive if they get to some of these items (CXF is the major focus for the next release). It’s worth quoting that roadmap here:


These are some ideas for future Enunciate modules:

    Module for deploying via CXF instead of XFire.
  • Axis 2 (ENUNCIATE-20)
    Module that uses Axis 2 as the WS stack instead of XFire.
  • C/C++ (ENUNCIATE-10)
    Create a module for generating C/C++ client libraries and add the libraries as available downloads.
    Create a module that generates client-side AJAX code and make it available via downloads and as a remote script.
    Generate C# client code for accessing the API.
  • WS-Security (ENUNCIATE-17)
    Module that adds support for WS-Security.
    Module that adds integration with/as an enterprise service bus.
  • WS-Addressing (ENUNCIATE-13)
    Module that adds support for WS-Addressing.
  • WS-ReliableMessaging (ENUNCIATE-14)
    Module that supports WS-ReliableMessaging.
  • WS-Coordination (ENUNCIATE-15)
    Module adding support for WS-Coordination.
  • WS-AtomicTransaction (ENUNCIATE-16)
    Module that adds support for WS-Atomic Transaction.
  • Command (ENUNCIATE-12)
    Module that executes commands (executables, Ant tasks, etc) at given points during the build process.
  • Standalone (ENUNCIATE-19)
    Module that generates a standalone Web Service engine (as opposed to just a war).
    Add support for an SMTP transport.
  • Jabber (ENUNCIATE-22)
    Module that adds support for a Jabber transport.
  • HTML Form (ENUNCIATE-23)
    Support for presenting an HTML form for accessing the API.
  • RelaxNG (ENUNCIATE-24)
    Module that describes the API via RelaxNG.


These are some possible future features:

  • WADL Support (ENUNCIATE-25)
    Generate a WADL description of the REST/JSON endpoints.
  • i18n Support (ENUNCIATE-1)
    Add support for internationalization when generating documentation.
  • Endpoint Versioning (ENUNCIATE-2)
    Add support for multiple endpoints (same name, different namespace) at the same endpoint URL.
  • Support for JAXB import by package (ENUNCIATE-5)
    Leverage jaxb.index or ObjectFactory to read the classes in the imported packages.
  • Support for XML Mixed Content (ENUNCIATE-7)
    Add support for the xml-mixed type according to the JAXB spec.
  • Support for Stateful Web Services (ENUNCIATE-49)

This is definitely a framework to keep an eye on, or to possibly consider using today. (The biggest drawback I see is that it would probably be difficult to use features from the underlying frameworks that aren’t already directly supported by Enunciate, e.g. WS-Security, WS-Addressing, etc.).

Topics: Architecture & Design, Java, Software Services, Open Source

Written by Jim LoVerde

Jim is an NVISIA Fellow with 20 years of experience.

Leave a Comment