[jboss-as7-dev] How should META-INF/services be dealt with in modules?

Scott Stark sstark at redhat.com
Fri Jun 3 19:42:24 EDT 2011


So I have been looking at what the minimum is for a reasteasy based war 
to work with an application/xml content type since the providers for 
that are bundled in the as7 modules, but the providers are not getting 
registered by default. The war does not include any of the resteasy jars 
in its WEB-INF/lib as it looks like everything should already be 
included in the as7 modules.

In order for this to work, I have to register all of the 
javax.ws.rs.ext.Provider annotated classes from the 
resteasy-jaxb-provider-2.1.0.GA.jar in my resteasy Application:

import javax.ws.rs.core.Application;

public class StatusApplication extends Application {

    @Override
    public Set<Class<?>> getClasses() {
        Class<?>[] classes = {
            
org.jboss.resteasy.plugins.providers.jaxb.JAXBXmlSeeAlsoProvider.class,
            
org.jboss.resteasy.plugins.providers.jaxb.JAXBXmlRootElementProvider.class,
            
org.jboss.resteasy.plugins.providers.jaxb.JAXBElementProvider.class,
            
org.jboss.resteasy.plugins.providers.jaxb.JAXBXmlTypeProvider.class,
            
org.jboss.resteasy.plugins.providers.jaxb.CollectionProvider.class,
            org.jboss.resteasy.plugins.providers.jaxb.MapProvider.class,
            
org.jboss.resteasy.plugins.providers.jaxb.XmlJAXBContextFinder.class
        };
       for(Class<?> c : classes)
         providers.add(c);
       return providers;
    }

Normally resteasy is expecting that it can locate these via the jar 
META-INF/services/javax.ws.rs.ext.Providers mechanism, but when the 
resteasy framework does the following call while processing the application:

       Enumeration<URL> en = 
Thread.currentThread().getContextClassLoader().getResources("META-INF/services/" 
+ Providers.class.getName());

all it sees is the 
resteasy-jaxrs-2.1.0.GA.jar/META-INF/services/javax.ws.rs.ext.Providers 
resources. It looks like many of the other resteasy provider modules 
would not be loaded simply because they are purely extension modules 
with implementations.

What is the correct way to integrate a collection of services using the 
META-INF/services mechanism?



More information about the jboss-as7-dev mailing list