From 369ab2852fae7da728ecaa392fe21ae7489d62d3 Mon Sep 17 00:00:00 2001 From: kelvingoodson Date: Fri, 28 May 2010 09:48:03 +0000 Subject: merge r949110 from trunk to branch git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@949138 13f79535-47bb-0310-9956-ffa450edef68 --- .../java/jaxrs/RootResourceClassGenerator.java | 45 +++++++++++++++++++--- 1 file changed, 40 insertions(+), 5 deletions(-) (limited to 'sca-java-2.x/branches/sca-java-2.0-M5/modules/interface-java-jaxrs/src') diff --git a/sca-java-2.x/branches/sca-java-2.0-M5/modules/interface-java-jaxrs/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxrs/RootResourceClassGenerator.java b/sca-java-2.x/branches/sca-java-2.0-M5/modules/interface-java-jaxrs/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxrs/RootResourceClassGenerator.java index 0d23295986..969efeb4f1 100644 --- a/sca-java-2.x/branches/sca-java-2.0-M5/modules/interface-java-jaxrs/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxrs/RootResourceClassGenerator.java +++ b/sca-java-2.x/branches/sca-java-2.0-M5/modules/interface-java-jaxrs/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxrs/RootResourceClassGenerator.java @@ -22,6 +22,10 @@ package org.apache.tuscany.sca.interfacedef.java.jaxrs; import java.lang.reflect.Field; import java.lang.reflect.Method; +import javax.ws.rs.DELETE; +import javax.ws.rs.GET; +import javax.ws.rs.HEAD; + import org.objectweb.asm.AnnotationVisitor; import org.objectweb.asm.ClassWriter; import org.objectweb.asm.FieldVisitor; @@ -34,7 +38,8 @@ public class RootResourceClassGenerator implements Opcodes { private static final String DELEGATE_FIELD = "delegate"; - public static Class generateRootResourceClass(Class interfaze, String path, String consumes, String produces) 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."); } @@ -48,7 +53,7 @@ public class RootResourceClassGenerator implements Opcodes { 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); @@ -71,7 +76,7 @@ public class RootResourceClassGenerator implements Opcodes { for (Method method : interfaze.getMethods()) { if (!(method.getDeclaringClass() == Object.class)) { - generateMethod(cw, interfaceName, className, method); + generateMethod(cw, interfaceName, className, method, consumes, produces); } } cw.visitEnd(); @@ -80,11 +85,17 @@ public class RootResourceClassGenerator implements Opcodes { } // public method( arg0, ..., argN) throws , ..., - private static void generateMethod(ClassWriter cw, String interfaceName, String className, Method method) { + private static void generateMethod(ClassWriter cw, + String interfaceName, + String className, + Method method, + String consumes, + String produces) { String methodDescriptor = Type.getMethodDescriptor(method); MethodVisitor mv = cw.visitMethod(ACC_PUBLIC, method.getName(), methodDescriptor, null, getExceptionInternalNames(method)); + mv.visitCode(); mv.visitFieldInsn(GETSTATIC, className, DELEGATE_FIELD, getSignature(interfaceName)); Class[] paramTypes = method.getParameterTypes(); @@ -152,7 +163,7 @@ public class RootResourceClassGenerator implements Opcodes { av.visit("value", path); av.visitEnd(); } - + // @Consumes() // @Provides() private static void annotateContentTypes(ClassWriter cw, String consumes, String produces) { @@ -176,4 +187,28 @@ public class RootResourceClassGenerator implements Opcodes { av.visitEnd(); } } + + // @Consumes() + // @Provides() + private static void annotateContentTypes(MethodVisitor mv, String consumes, String produces) { + AnnotationVisitor av = null; + if (consumes != null) { + av = mv.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 = mv.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(); + } + } } -- cgit v1.2.3