RESTFul Web Service - Seam Component Injection

Posted on March 11, 2014

If you have to incorporate a RESTFul webservice into an existing (or new) Web application, which uses SEAM as one of the technologies in it's tech-stack, then you probably want to use Seam component injections in your RESTFul webservice.

If your RESTFul service's URI's are something like:

    a) GET   /rest/api/get?id=1&user=test
    b) POST   /rest/api/create
    c) PUT   /rest/api/update
    d) PUT   /rest/api/delete
Then, for the Seam injections to work, you need to add a 'Seam Web Context filter' in your Webapp's Seam components.xml file, as shown below:

<web:context-filter url-pattern="/rest/api/*"/>
An alternative to adding web:context-filter is to add a 'Seam Servlet Filter' in web.xml of your web application, as shown below:

    <filter-name>Seam Servlet Filter</filter-name> 
    <filter-name>Seam Servlet Filter</filter-name> 
The reason you need to add these filters is to make Seam intercept your request, initialize itself and then allow the injections to work. Similarly, EJB interceptors are needed for injections to work in EJB's. As for JSF pages, Seam uses EL Resolvers for dependency injections. These EL Resolvers are installed by default, when Seam's libraries (jars) are included in the classpath.

BTW, depending on how I use the Seam component, instead of using @In, I prefer using Component.getInstance("seamComp");

If you are using multiple URL patterns (different URI's) for which you want Seam injections to work, you can use "regex-url-pattern". For example, if you have want to create a new SOAP webservice, along with your RESTFul service...and you want the Seam injections to work in both the services, you can simply use the 'regex-url-pattern' attribute for 'web:context-filter' tag.

SOAP Service URI : TestSOAPService (Enpoint Address URI: webappContext/TestSOAPService)
REST API URI's : /rest/api/*

Then, your 'web:context-filter' tag in Seam components.xml file should look like:

<web:context-filter regex-url-pattern="/rest/api/.*|/TestSOAPService"/>

Blog Categories
The views expressed on this blog are my personal views and do not reflect the views of my employer or campaigns I am supporting.

All sample code is provided for illustrative purposes only. These examples have not been thoroughly tested under all conditions. The writer therefore, cannot guarantee or imply reliability, serviceability, or function of these programs.

All programs contained herein are provided to you "AS IS" without any warranties of any kind. The implied warranties of non-infringement, merchantability and fitness for a particular purpose are expressly disclaimed.