You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by rf...@apache.org on 2011/05/17 22:36:54 UTC
svn commit: r1104536 - in
/tuscany/sca-java-2.x/trunk/modules/interface-java-jaxrs/src:
main/java/org/apache/tuscany/sca/interfacedef/java/jaxrs/
test/java/org/apache/tuscany/sca/interfacedef/java/jaxrs/
Author: rfeng
Date: Tue May 17 20:36:53 2011
New Revision: 1104536
URL: http://svn.apache.org/viewvc?rev=1104536&view=rev
Log:
Make sure the generics are generated into the Resource implementation class so that Wink won't get confused
Modified:
tuscany/sca-java-2.x/trunk/modules/interface-java-jaxrs/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxrs/RootResourceClassGenerator.java
tuscany/sca-java-2.x/trunk/modules/interface-java-jaxrs/src/test/java/org/apache/tuscany/sca/interfacedef/java/jaxrs/MockedResource.java
tuscany/sca-java-2.x/trunk/modules/interface-java-jaxrs/src/test/java/org/apache/tuscany/sca/interfacedef/java/jaxrs/Resource.java
tuscany/sca-java-2.x/trunk/modules/interface-java-jaxrs/src/test/java/org/apache/tuscany/sca/interfacedef/java/jaxrs/ResourceWrapper.java
tuscany/sca-java-2.x/trunk/modules/interface-java-jaxrs/src/test/java/org/apache/tuscany/sca/interfacedef/java/jaxrs/RootResourceClassGeneratorTestCase.java
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=1104536&r1=1104535&r2=1104536&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 Tue May 17 20:36:53 2011
@@ -89,8 +89,14 @@ public class RootResourceClassGenerator
String produces) {
String methodDescriptor = Type.getMethodDescriptor(method);
+ String signatureString = getSignature(method);
+
MethodVisitor mv =
- cw.visitMethod(ACC_PUBLIC, method.getName(), methodDescriptor, null, getExceptionInternalNames(method));
+ cw.visitMethod(ACC_PUBLIC,
+ method.getName(),
+ methodDescriptor,
+ signatureString,
+ getExceptionInternalNames(method));
mv.visitCode();
mv.visitFieldInsn(GETSTATIC, className, DELEGATE_FIELD, getSignature(interfaceName));
@@ -108,6 +114,21 @@ public class RootResourceClassGenerator
mv.visitEnd();
}
+ /**
+ * [rfeng] A hack to get the generic method signature
+ * @param method
+ * @return
+ */
+ private static String getSignature(Method method) {
+ try {
+ Field field = method.getClass().getDeclaredField("signature");
+ field.setAccessible(true);
+ return (String)field.get(method);
+ } catch (Throwable e) {
+ return null;
+ }
+ }
+
private static String[] getExceptionInternalNames(Method method) {
Class<?>[] types = method.getExceptionTypes();
if (types.length == 0) {
Modified: tuscany/sca-java-2.x/trunk/modules/interface-java-jaxrs/src/test/java/org/apache/tuscany/sca/interfacedef/java/jaxrs/MockedResource.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/MockedResource.java?rev=1104536&r1=1104535&r2=1104536&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/interface-java-jaxrs/src/test/java/org/apache/tuscany/sca/interfacedef/java/jaxrs/MockedResource.java (original)
+++ tuscany/sca-java-2.x/trunk/modules/interface-java-jaxrs/src/test/java/org/apache/tuscany/sca/interfacedef/java/jaxrs/MockedResource.java Tue May 17 20:36:53 2011
@@ -19,6 +19,8 @@
package org.apache.tuscany.sca.interfacedef.java.jaxrs;
+import java.util.List;
+
public class MockedResource implements Resource {
private String value;
@@ -41,4 +43,9 @@ public class MockedResource implements R
public void update(String value) {
this.value = value;
}
+
+ @Override
+ public String getList(List<String> names) {
+ return value;
+ }
}
Modified: tuscany/sca-java-2.x/trunk/modules/interface-java-jaxrs/src/test/java/org/apache/tuscany/sca/interfacedef/java/jaxrs/Resource.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/Resource.java?rev=1104536&r1=1104535&r2=1104536&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/interface-java-jaxrs/src/test/java/org/apache/tuscany/sca/interfacedef/java/jaxrs/Resource.java (original)
+++ tuscany/sca-java-2.x/trunk/modules/interface-java-jaxrs/src/test/java/org/apache/tuscany/sca/interfacedef/java/jaxrs/Resource.java Tue May 17 20:36:53 2011
@@ -19,10 +19,13 @@
package org.apache.tuscany.sca.interfacedef.java.jaxrs;
+import java.util.List;
+
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
+import javax.ws.rs.QueryParam;
import org.oasisopen.sca.annotation.Remotable;
@@ -31,6 +34,9 @@ public interface Resource {
@GET
String get();
+
+ @GET
+ String getList(@QueryParam("list") List<String> names);
@PUT
void update(String value);
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=1104536&r1=1104535&r2=1104536&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 Tue May 17 20:36:53 2011
@@ -19,11 +19,12 @@
package org.apache.tuscany.sca.interfacedef.java.jaxrs;
+import java.util.List;
+
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"})
@@ -34,7 +35,6 @@ public class ResourceWrapper implements
super();
}
-
public String get() {
return delegate.get();
}
@@ -51,4 +51,9 @@ public class ResourceWrapper implements
delegate.update(value);
}
+ @Override
+ public String getList(List<String> names) {
+ return delegate.getList(names);
+ }
+
}
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=1104536&r1=1104535&r2=1104536&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 Tue May 17 20:36:53 2011
@@ -20,7 +20,11 @@
package org.apache.tuscany.sca.interfacedef.java.jaxrs;
import java.lang.reflect.Field;
+import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
+import java.lang.reflect.ParameterizedType;
+import java.lang.reflect.Type;
+import java.util.List;
import javax.ws.rs.Consumes;
import javax.ws.rs.Path;
@@ -35,17 +39,21 @@ import org.junit.Test;
public class RootResourceClassGeneratorTestCase {
@Test
public void testGenerator() throws Exception {
- Class<?> cls = RootResourceClassGenerator.generateRootResourceClass(Resource.class, "myURI", "application/xml,application/json", "application/xml,application/json");
+ 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());
@@ -54,6 +62,13 @@ public class RootResourceClassGeneratorT
Assert.assertTrue(Resource.class.isAssignableFrom(cls));
+ Method m = cls.getMethod("getList", List.class);
+ System.out.println(m.toGenericString());
+ Type type = m.getGenericParameterTypes()[0];
+ Assert.assertTrue(type instanceof ParameterizedType);
+ ParameterizedType pType = (ParameterizedType)type;
+ Assert.assertEquals(String.class, pType.getActualTypeArguments()[0]);
+
Resource resource = new MockedResource();
field.set(null, resource);