Index: src/main/java/org/jboss/resteasy/spi/ResteasyProviderFactory.java =================================================================== --- src/main/java/org/jboss/resteasy/spi/ResteasyProviderFactory.java (revision 892) +++ src/main/java/org/jboss/resteasy/spi/ResteasyProviderFactory.java (working copy) @@ -8,6 +8,7 @@ import org.jboss.resteasy.annotations.interception.SecurityPrecedence; import org.jboss.resteasy.annotations.interception.ServerInterceptor; import org.jboss.resteasy.client.core.ClientErrorInterceptor; +import org.jboss.resteasy.core.InjectorFactoryImpl; import org.jboss.resteasy.core.MediaTypeMap; import org.jboss.resteasy.core.PropertyInjectorImpl; import org.jboss.resteasy.core.interception.InterceptorRegistry; @@ -50,6 +51,7 @@ import javax.ws.rs.ext.Providers; import javax.ws.rs.ext.RuntimeDelegate; import java.lang.annotation.Annotation; +import java.lang.reflect.Constructor; import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; import java.net.URI; @@ -85,8 +87,10 @@ public boolean isBuiltin = false; public Class template = null; + + + - private MessageBodyKey(Class intf, T reader, boolean isBuiltin) { this(intf, reader); @@ -434,19 +438,7 @@ public void addMessageBodyReader(Class provider, boolean isBuiltin) { - MessageBodyReader reader = null; - try - { - reader = provider.newInstance(); - } - catch (InstantiationException e) - { - throw new RuntimeException(e); - } - catch (IllegalAccessException e) - { - throw new RuntimeException(e); - } + MessageBodyReader reader = getProviderInstance(provider); addMessageBodyReader(reader, isBuiltin); } @@ -488,19 +480,7 @@ public void addMessageBodyWriter(Class provider, boolean isBuiltin) { - MessageBodyWriter writer = null; - try - { - writer = provider.newInstance(); - } - catch (InstantiationException e) - { - throw new RuntimeException(e); - } - catch (IllegalAccessException e) - { - throw new RuntimeException(e); - } + MessageBodyWriter writer = getProviderInstance(provider); addMessageBodyWriter(writer, isBuiltin); } @@ -551,19 +531,7 @@ public void addExceptionMapper(Class provider) { - ExceptionMapper writer = null; - try - { - writer = provider.newInstance(); - } - catch (InstantiationException e) - { - throw new RuntimeException(e); - } - catch (IllegalAccessException e) - { - throw new RuntimeException(e); - } + ExceptionMapper writer = getProviderInstance(provider); addExceptionMapper(writer); } @@ -610,19 +578,7 @@ public void addContextResolver(Class resolver) { - ContextResolver writer = null; - try - { - writer = resolver.newInstance(); - } - catch (InstantiationException e) - { - throw new RuntimeException(e); - } - catch (IllegalAccessException e) - { - throw new RuntimeException(e); - } + ContextResolver writer = getProviderInstance(resolver); addContextResolver(writer); } @@ -666,19 +622,7 @@ public void addStringConverter(Class resolver) { - StringConverter writer = null; - try - { - writer = resolver.newInstance(); - } - catch (InstantiationException e) - { - throw new RuntimeException(e); - } - catch (IllegalAccessException e) - { - throw new RuntimeException(e); - } + StringConverter writer = getProviderInstance(resolver); addStringConverter(writer); } @@ -736,19 +680,7 @@ { if (stringParameterUnmarshallers.size() == 0) return null; Class un = stringParameterUnmarshallers.get(clazz); - StringParameterUnmarshaller provider = null; - try - { - provider = un.newInstance(); - } - catch (InstantiationException e) - { - throw new RuntimeException(e.getCause()); - } - catch (IllegalAccessException e) - { - throw new RuntimeException(e); - } + StringParameterUnmarshaller provider = getProviderInstance(un); PropertyInjectorImpl injector = new PropertyInjectorImpl(provider.getClass(), this); injector.inject(provider); return provider; @@ -1027,4 +959,14 @@ } }; } + + protected T getProviderInstance(Class clazz) + { + InjectorFactory factory = new InjectorFactoryImpl(this); + Constructor constructor = clazz.getDeclaredConstructors()[0]; + ConstructorInjector constructorInjector = factory.createConstructor(constructor); + + T provider = (T) constructorInjector.construct(); + return provider; + } }