Index: src/test/java/org/jboss/resteasy/test/core/injection/SimpleMessageBodyWriter.java =================================================================== --- src/test/java/org/jboss/resteasy/test/core/injection/SimpleMessageBodyWriter.java (revision 0) +++ src/test/java/org/jboss/resteasy/test/core/injection/SimpleMessageBodyWriter.java (revision 0) @@ -0,0 +1,69 @@ +package org.jboss.resteasy.test.core.injection; + +import java.io.IOException; +import java.io.OutputStream; +import java.io.OutputStreamWriter; +import java.io.Writer; +import java.lang.annotation.Annotation; +import java.lang.reflect.Type; +import java.util.HashSet; +import java.util.Set; + +import javax.ws.rs.Produces; +import javax.ws.rs.WebApplicationException; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.MultivaluedMap; +import javax.ws.rs.ext.MessageBodyWriter; +import javax.ws.rs.ext.Provider; +import javax.ws.rs.ext.Providers; + +@Provider +@Produces("text/plain") +public class SimpleMessageBodyWriter implements MessageBodyWriter +{ + + @Context + private Providers fieldProviders = null; + private Providers constructorProviders = null; + // just in case there was a pool of instances - we want to test all of them + private static Set instances = new HashSet(); + + public SimpleMessageBodyWriter(@Context Providers providers) + { + constructorProviders = providers; + instances.add(this); + } + + public long getSize(String t, Class type, Type genericType, Annotation[] annotations, MediaType mediaType) + { + return 3; + } + + public boolean isWriteable(Class type, Type genericType, Annotation[] annotations, MediaType mediaType) + { + return true; + } + + public void writeTo(String t, Class type, Type genericType, Annotation[] annotations, MediaType mediaType, MultivaluedMap httpHeaders, OutputStream entityStream) throws IOException, WebApplicationException + { + Writer writer = new OutputStreamWriter(entityStream); + writer.write("bar"); + writer.flush(); + } + + public Providers getFieldProviders() + { + return fieldProviders; + } + + public Providers getConstructorProviders() + { + return constructorProviders; + } + + public static Set getInstances() + { + return instances; + } +} Index: src/test/java/org/jboss/resteasy/test/core/injection/ProviderInjectionTest.java =================================================================== --- src/test/java/org/jboss/resteasy/test/core/injection/ProviderInjectionTest.java (revision 0) +++ src/test/java/org/jboss/resteasy/test/core/injection/ProviderInjectionTest.java (revision 0) @@ -0,0 +1,72 @@ +package org.jboss.resteasy.test.core.injection; + +import static org.jboss.resteasy.test.TestPortProvider.generateBaseUrl; + +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; + +import static junit.framework.Assert.assertEquals; +import static junit.framework.Assert.assertTrue; + +import org.jboss.resteasy.client.ProxyFactory; +import org.jboss.resteasy.test.BaseResourceTest; +import org.junit.Before; +import org.junit.Test; + +/** + * This test verifies that Providers instance can be injected into a Provider + * using constructor or field injection. + * + * @author Jozef Hartinger + * + */ +public class ProviderInjectionTest extends BaseResourceTest +{ + + @Before + public void setUp() throws Exception + { + getProviderFactory().registerProvider(SimpleMessageBodyWriter.class); + addPerRequestResource(SimpleResourceImpl.class); + + // do a request (force provider instantiation if providers were created + // lazily) + SimpleResource proxy = ProxyFactory.create(SimpleResource.class, generateBaseUrl()); + assertEquals(proxy.foo(), "bar"); + } + + @Test + public void testConstructorInjection() + { + for (SimpleMessageBodyWriter writer : SimpleMessageBodyWriter.getInstances()) + { + assertTrue(writer.getConstructorProviders() != null); + } + } + + @Test + public void testFieldInjection() + { + for (SimpleMessageBodyWriter writer : SimpleMessageBodyWriter.getInstances()) + { + assertTrue(writer.getFieldProviders() != null); + } + } + + @Path("/test") + public static interface SimpleResource + { + @GET + @Produces("text/plain") + String foo(); + } + + public static class SimpleResourceImpl implements SimpleResource + { + public String foo() + { + return "foo"; + } + } +}