Modified: tuscany/sca-java-2.x/trunk/modules/interface-java-jaxrs/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxrs/RootResourceClassGenerator.java URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/interface-java-jaxrs/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxrs/RootResourceClassGenerator.java?rev=945980&r1=945979&r2=945980&view=diff ============================================================================== --- tuscany/sca-java-2.x/trunk/modules/interface-java-jaxrs/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxrs/RootResourceClassGenerator.java (original) +++ tuscany/sca-java-2.x/trunk/modules/interface-java-jaxrs/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxrs/RootResourceClassGenerator.java Wed May 19 00:53:52 2010 @@ -19,6 +19,7 @@ package org.apache.tuscany.sca.interfacedef.java.jaxrs; +import java.lang.reflect.Field; import java.lang.reflect.Method; import org.objectweb.asm.AnnotationVisitor; @@ -33,19 +34,27 @@ public class RootResourceClassGenerator private static final String DELEGATE_FIELD = "delegate"; - public static Class<?> generateRootResourceClass(Class<?> interfaze, String path) throws Exception { + public static Class<?> generateRootResourceClass(Class<?> interfaze, String path, String consumes, String produces) throws Exception { + if (!interfaze.isInterface()) { + throw new IllegalArgumentException(interfaze + " is not an interface."); + } GeneratedClassLoader classLoader = new GeneratedClassLoader(interfaze.getClassLoader()); String interfaceName = interfaze.getName(); int index = interfaze.getName().lastIndexOf('.'); String className = interfaceName.substring(0, index) + ".Generated" + interfaceName.substring(index + 1) + "Impl"; - byte[] content = generate(interfaze, path); + byte[] content = generate(interfaze, path, consumes, produces); Class<?> cls = classLoader.getGeneratedClass(className, content); return cls; } + + public static void injectProxy(Class<?> generatedResourceClass, Object proxy) throws Exception { + Field field = generatedResourceClass.getField("delegate"); + field.set(null, proxy); + } - public static byte[] generate(Class<?> interfaze, String path) throws Exception { + public static byte[] generate(Class<?> interfaze, String path, String consumes, String produces) throws Exception { String interfaceName = Type.getInternalName(interfaze); int index = interfaceName.lastIndexOf('/'); String className = @@ -56,6 +65,7 @@ public class RootResourceClassGenerator declareClass(cw, interfaceName, className); annotatePath(cw, path); + annotateContentTypes(cw, consumes, produces); declareField(cw, interfaceName); declareConstructor(cw, className); @@ -142,4 +152,28 @@ public class RootResourceClassGenerator av.visit("value", path); av.visitEnd(); } + + // @Consumes(<contentTypes>) + // @Provides(<contentTypes>) + private static void annotateContentTypes(ClassWriter cw, String consumes, String produces) { + AnnotationVisitor av = null; + if (consumes != null) { + av = cw.visitAnnotation("Ljavax/ws/rs/Consumes;", true); + AnnotationVisitor av1 = av.visitArray("value"); + for (String s : consumes.split("(,| )")) { + av1.visit(null, s.trim()); + } + av1.visitEnd(); + av.visitEnd(); + } + if (produces != null) { + av = cw.visitAnnotation("Ljavax/ws/rs/Produces;", true); + AnnotationVisitor av1 = av.visitArray("value"); + for (String s : produces.split("(,| )")) { + av1.visit(null, s.trim()); + } + av1.visitEnd(); + av.visitEnd(); + } + } }
Modified: tuscany/sca-java-2.x/trunk/modules/interface-java-jaxrs/src/test/java/org/apache/tuscany/sca/interfacedef/java/jaxrs/ResourceWrapper.java URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/interface-java-jaxrs/src/test/java/org/apache/tuscany/sca/interfacedef/java/jaxrs/ResourceWrapper.java?rev=945980&r1=945979&r2=945980&view=diff ============================================================================== --- tuscany/sca-java-2.x/trunk/modules/interface-java-jaxrs/src/test/java/org/apache/tuscany/sca/interfacedef/java/jaxrs/ResourceWrapper.java (original) +++ tuscany/sca-java-2.x/trunk/modules/interface-java-jaxrs/src/test/java/org/apache/tuscany/sca/interfacedef/java/jaxrs/ResourceWrapper.java Wed May 19 00:53:52 2010 @@ -19,10 +19,14 @@ package org.apache.tuscany.sca.interfacedef.java.jaxrs; +import javax.ws.rs.Consumes; import javax.ws.rs.Path; +import javax.ws.rs.Produces; @Path("myURI") +...@produces({"application/xml", "application/json"}) +...@consumes({"application/xml", "application/json"}) public class ResourceWrapper implements Resource { public static Resource delegate; Modified: tuscany/sca-java-2.x/trunk/modules/interface-java-jaxrs/src/test/java/org/apache/tuscany/sca/interfacedef/java/jaxrs/RootResourceClassGeneratorTestCase.java URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/interface-java-jaxrs/src/test/java/org/apache/tuscany/sca/interfacedef/java/jaxrs/RootResourceClassGeneratorTestCase.java?rev=945980&r1=945979&r2=945980&view=diff ============================================================================== --- tuscany/sca-java-2.x/trunk/modules/interface-java-jaxrs/src/test/java/org/apache/tuscany/sca/interfacedef/java/jaxrs/RootResourceClassGeneratorTestCase.java (original) +++ tuscany/sca-java-2.x/trunk/modules/interface-java-jaxrs/src/test/java/org/apache/tuscany/sca/interfacedef/java/jaxrs/RootResourceClassGeneratorTestCase.java Wed May 19 00:53:52 2010 @@ -22,7 +22,9 @@ package org.apache.tuscany.sca.interface import java.lang.reflect.Field; import java.lang.reflect.Modifier; +import javax.ws.rs.Consumes; import javax.ws.rs.Path; +import javax.ws.rs.Produces; import org.junit.Assert; import org.junit.Test; @@ -33,10 +35,17 @@ import org.junit.Test; public class RootResourceClassGeneratorTestCase { @Test public void testGenerator() throws Exception { - Class<?> cls = RootResourceClassGenerator.generateRootResourceClass(Resource.class, "myURI"); + Class<?> cls = RootResourceClassGenerator.generateRootResourceClass(Resource.class, "myURI", "application/xml,application/json", "application/xml,application/json"); Assert.assertTrue(cls.isAnnotationPresent(Path.class)); Path path = cls.getAnnotation(Path.class); Assert.assertEquals("myURI", path.value()); + + Produces produces = cls.getAnnotation(Produces.class); + Assert.assertEquals("application/xml", produces.value()[0]); + + Consumes consumes = cls.getAnnotation(Consumes.class); + Assert.assertEquals("application/json", consumes.value()[1]); + Field field = cls.getField("delegate"); Assert.assertSame(Resource.class, field.getType()); Modified: tuscany/sca-java-2.x/trunk/modules/wink/pom.xml URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/wink/pom.xml?rev=945980&r1=945979&r2=945980&view=diff ============================================================================== --- tuscany/sca-java-2.x/trunk/modules/wink/pom.xml (original) +++ tuscany/sca-java-2.x/trunk/modules/wink/pom.xml Wed May 19 00:53:52 2010 @@ -47,13 +47,13 @@ <dependency> <groupId>org.apache.wink</groupId> <artifactId>wink-server</artifactId> - <version>1.1-incubating-SNAPSHOT</version> + <version>1.1-incubating</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.apache.wink</groupId> <artifactId>wink-common</artifactId> - <version>1.1-incubating-SNAPSHOT</version> + <version>1.1-incubating</version> <scope>provided</scope> </dependency>
