Loading
Print
tapestry-resteasy guide

Version status: 0.4.0 stable - used in production

Icon

Uses RestEASY 3.0.7.Final and Tapestry 5.4.x

for older versions check the version table

 

User guide for Tapestry-resteasy module

tapestry-resteasy provides integration with Tapestry 5 and JBoss' RESTEasy, an implementation JAX-RS (Java API for RESTful Web Services). JAX-RS is a very nice little spec and if you know what it is about, the following should be very easy to understand. Otherwise, read up on it at Jersey's overview (the reference implementation) or the actual specification. JBoss' RESTEasy provides a few more features over the reference implementation.

Outline

Add the tapestry-resteasy dependency to your pom.xml

To use tapestry-resteasy (an independent module of Tynamo), you need to add the following dependency to your pom.xml:

No need to edit your web.xml.

tapestry-resteasy integrates with the Tapestry's HttpServletRequest pipeline.

Create a package named "rest" for your rest services.

tapestry-resteasy will scan the "rest" package and automatically add singleton resources to the configuration.

If you want to add extra packages, besides InternalConstants.TAPESTRY_APP_PACKAGE_PARAM + ".rest", to be scanned for annotated REST resource classes you can contribute your package names to the ResteasyPackageManager.

Code your singleton resource.

Good practices:

  • Name the resource class using the entity name followed by the word "Resource".
  • The @Path should be the entity name in lowercase.

Annotate your entities.

Don't forget to annotate your entities with JAXB annotations. You need at least @XmlRootElement. See: http://www.caucho.com/resin-3.1/doc/jaxb-annotations.xtp

Add a provider library to your pom.xml

Icon

By default tapestry-resteasy does not includes any marshaller/unmarshaller dependency.

You will need to manually add the dependency to your pom.xml

The previous examples use the JSON marshaller/unmarshaller provided by the resteasy-jettison-provider library. This provider allows you to marshall JAXB annotated POJOs to and from JSON, it wraps the Jettison JSON library to accomplish this.

 

If you don't need JAXB and only you only need JSON support, you can use the JSON marshaller/unmarshaller provided by the resteasy-jackson-provider library. I personally find Jackson's output format more intuitive than the format provided by either BadgerFish or Jettison.

You could use JAXB and Jackson together but be aware of the possible conflicts with the JAXB providers

 

Contribute singleton resources

If the rest services autodiscovery is not enough for you, you can manually contribute singleton resources in your AppModule:

Icon

Since the upgrade to Tapestry 5.3 and the move from Javassist to Plastic your JAX-RS annotations must be on the service interface or RESTEasy will not be able to find them.

Live class reloading

Icon

Available since tapestry-resteasy 0.2.1!

Reloading is limited to services that can be proxied, so to enable live class reloading for your REST services you need to create them as regular Tapestry IoC services with an interface and an implementation of that interface. You then have the option to leave them both in the autodiscovery package or explicitly bind them as services and contribute them to javax.ws.rs.core.Application.class. Read more about how service implementation reloading works in: http://tapestry.apache.org/reload.html

Here is an example from the tapestry-resteasy test suite.



Enjoy

 

The default mapping prefix under which your rest resources are available is "rest". You can easily change this by overriding the symbol in your application defaults:

Notes:

If you get this exception:

Add this to your system properties:

like so:

mvn jetty:run

Check google for more information: http://www.google.com/search?hl=en&q=com.sun.xml.stream.ZephyrParserFactory+cannot+be+cast+to+org.codehaus.stax2.XMLInputFactory2&aq=f&oq=&aqi=

 

version table

 

 

tapestry-resteasyTapestryRESTEasynotes:
0.0.15.1.x1.1.GAsee tapestry-resteasy-0.0.1 guide
0.2.15.2.x2.0.1.GA 
0.3.05.3.x2.3.0.GA 
0.3.15.3.x3.0-beta-4 
0.3.25.3.x3.0.1.Final

 

0.4.05.4.x3.0.7.Final 
Powered by Atlassian Confluence