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 2008/06/08 09:00:38 UTC

svn commit: r664457 - in /incubator/tuscany/java/sca/modules/interface-java-jaxws/src: main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/ test/java/org/apache/tuscany/sca/interfacedef/java/jaxws/

Author: rfeng
Date: Sun Jun  8 00:00:37 2008
New Revision: 664457

URL: http://svn.apache.org/viewvc?rev=664457&view=rev
Log:
Fix the support for Map properties

Modified:
    incubator/tuscany/java/sca/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/BaseBeanGenerator.java
    incubator/tuscany/java/sca/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/CodeGenerationHelper.java
    incubator/tuscany/java/sca/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/FaultBeanGenerator.java
    incubator/tuscany/java/sca/modules/interface-java-jaxws/src/test/java/org/apache/tuscany/sca/interfacedef/java/jaxws/TestInterface.java
    incubator/tuscany/java/sca/modules/interface-java-jaxws/src/test/java/org/apache/tuscany/sca/interfacedef/java/jaxws/WrapperBeanGeneratorTestCase.java

Modified: incubator/tuscany/java/sca/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/BaseBeanGenerator.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/BaseBeanGenerator.java?rev=664457&r1=664456&r2=664457&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/BaseBeanGenerator.java (original)
+++ incubator/tuscany/java/sca/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/BaseBeanGenerator.java Sun Jun  8 00:00:37 2008
@@ -60,8 +60,9 @@
         declareConstructor(cw, classSignature);
         if (properties != null) {
             for (BeanProperty p : properties) {
+                boolean isMap = Map.class.isAssignableFrom(p.getType());
                 declareProperty(cw, classDescriptor, classSignature, p.getName(), p.getSignature(), p
-                    .getGenericSignature());
+                    .getGenericSignature(), isMap);
             }
         }
 
@@ -75,11 +76,11 @@
                                    String classSignature,
                                    String propName,
                                    String propClassSignature,
-                                   String propTypeSignature) {
+                                   String propTypeSignature, boolean isMap) {
         if (propClassSignature.equals(propTypeSignature)) {
             propTypeSignature = null;
         }
-        declareField(cw, propName, propClassSignature, propTypeSignature);
+        declareField(cw, propName, propClassSignature, propTypeSignature, isMap);
         decalreGetter(cw, classDescriptor, classSignature, propName, propClassSignature, propTypeSignature);
         declareSetter(cw, classDescriptor, classSignature, propName, propClassSignature, propTypeSignature);
     }
@@ -92,15 +93,18 @@
         }
     }
 
-    protected void declareField(ClassWriter cw, String propName, String propClassSignature, String propTypeSignature) {
+    protected void declareField(ClassWriter cw, String propName, String propClassSignature, String propTypeSignature, boolean isMap) {
         FieldVisitor fv;
         AnnotationVisitor av0;
         fv = cw.visitField(ACC_PROTECTED, getFieldName(propName), propClassSignature, propTypeSignature, null);
 
-        av0 = fv.visitAnnotation("Ljavax/xml/bind/annotation/XmlElement;", true);
-        av0.visit("name", propName);
-        av0.visit("namespace", "");
-        av0.visitEnd();
+        // For Map property, we cannot have the XmlElement annotation
+        if (!isMap) {
+            av0 = fv.visitAnnotation("Ljavax/xml/bind/annotation/XmlElement;", true);
+            av0.visit("name", propName);
+            av0.visit("namespace", "");
+            av0.visitEnd();
+        }
 
         fv.visitEnd();
     }
@@ -276,6 +280,7 @@
     }
 
     public static class BeanProperty {
+        private Class<?> type;
         private String name;
         private String signature;
         private String genericSignature;
@@ -284,16 +289,10 @@
             super();
             this.name = name;
             this.signature = CodeGenerationHelper.getJAXWSSignature(javaClass);
+            this.type = javaClass;
             this.genericSignature = CodeGenerationHelper.getJAXWSSignature(type);
         }
 
-        public BeanProperty(String name, String signature, String genericSignature) {
-            super();
-            this.name = name;
-            this.signature = signature;
-            this.genericSignature = genericSignature;
-        }
-
         public String getName() {
             return name;
         }
@@ -305,5 +304,9 @@
         public String getGenericSignature() {
             return genericSignature;
         }
+
+        public Class<?> getType() {
+            return type;
+        }
     }
 }

Modified: incubator/tuscany/java/sca/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/CodeGenerationHelper.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/CodeGenerationHelper.java?rev=664457&r1=664456&r2=664457&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/CodeGenerationHelper.java (original)
+++ incubator/tuscany/java/sca/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/CodeGenerationHelper.java Sun Jun  8 00:00:37 2008
@@ -83,6 +83,15 @@
             sb.deleteCharAt(sb.length() - 1); // Remove ;
             sb.append('<').append(getSignature(getErasure(p))).append(">;");
             return sb.toString();
+        } else if (Map.class.isAssignableFrom(cls) && (type instanceof ParameterizedType)) {
+            ParameterizedType pType = (ParameterizedType)type;
+            Type key = pType.getActualTypeArguments()[0];
+            Type value = pType.getActualTypeArguments()[1];
+            StringBuffer sb = new StringBuffer();
+            sb.append(getSignature(cls));
+            sb.deleteCharAt(sb.length() - 1); // Remove ;
+            sb.append('<').append(getSignature(getErasure(key))).append(getSignature(getErasure(value))).append(">;");
+            return sb.toString();
         } else {
             return getSignature(cls);
         }
@@ -209,21 +218,21 @@
             || "I".equals(signature)) {
             return Opcodes.ILOAD;
         }
-    
+
         if ("J".equals(signature)) {
             return Opcodes.LLOAD;
         }
-    
+
         if ("F".equals(signature)) {
             return Opcodes.FLOAD;
         }
-    
+
         if ("D".equals(signature)) {
             return Opcodes.DLOAD;
         }
-    
+
         return Opcodes.ALOAD;
-    
+
     }
 
     public static int getReturnOPCode(String signature) {
@@ -233,24 +242,24 @@
             || "I".equals(signature)) {
             return Opcodes.IRETURN;
         }
-    
+
         if ("J".equals(signature)) {
             return Opcodes.LRETURN;
         }
-    
+
         if ("F".equals(signature)) {
             return Opcodes.FRETURN;
         }
-    
+
         if ("D".equals(signature)) {
             return Opcodes.DRETURN;
         }
         if ("V".equals(signature)) {
             return Opcodes.RETURN;
         }
-    
+
         return Opcodes.ARETURN;
-    
+
     }
 
 }

Modified: incubator/tuscany/java/sca/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/FaultBeanGenerator.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/FaultBeanGenerator.java?rev=664457&r1=664456&r2=664457&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/FaultBeanGenerator.java (original)
+++ incubator/tuscany/java/sca/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/FaultBeanGenerator.java Sun Jun  8 00:00:37 2008
@@ -23,6 +23,7 @@
 import java.beans.IntrospectionException;
 import java.beans.Introspector;
 import java.beans.PropertyDescriptor;
+import java.lang.reflect.Method;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Comparator;
@@ -33,7 +34,6 @@
 
 import org.apache.tuscany.sca.interfacedef.java.impl.JavaInterfaceUtil;
 import org.objectweb.asm.ClassWriter;
-import org.objectweb.asm.Type;
 
 public class FaultBeanGenerator extends BaseBeanGenerator {
     public FaultBeanGenerator() {
@@ -58,9 +58,8 @@
                 }
                 // Add the field
                 String field = pd.getName();
-                String desc = Type.getDescriptor(pd.getPropertyType());
-                String genericDesc = CodeGenerationHelper.getSignature(pd.getReadMethod().getGenericReturnType());
-                props.add(new BeanProperty(field, desc, genericDesc));
+                Method getter = pd.getReadMethod();
+                props.add(new BeanProperty(field, getter.getReturnType(), getter.getGenericReturnType()));
             }
         }
         Collections.sort(props, new Comparator<BeanProperty>() {

Modified: incubator/tuscany/java/sca/modules/interface-java-jaxws/src/test/java/org/apache/tuscany/sca/interfacedef/java/jaxws/TestInterface.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/interface-java-jaxws/src/test/java/org/apache/tuscany/sca/interfacedef/java/jaxws/TestInterface.java?rev=664457&r1=664456&r2=664457&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/interface-java-jaxws/src/test/java/org/apache/tuscany/sca/interfacedef/java/jaxws/TestInterface.java (original)
+++ incubator/tuscany/java/sca/modules/interface-java-jaxws/src/test/java/org/apache/tuscany/sca/interfacedef/java/jaxws/TestInterface.java Sun Jun  8 00:00:37 2008
@@ -22,6 +22,7 @@
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 import org.osoa.sca.annotations.Remotable;
 
@@ -48,7 +49,7 @@
 
     ArrayList<String> getGreetingsArrayList(ArrayList<String> names);
 
-    // Map<String, String> getGreetingsMap(Map<String, String> namesMap);
+    Map<String, String> getGreetingsMap(Map<String, String> namesMap);
 
     HashMap<String, String> getGreetingsHashMap(HashMap<String, String> namesMap);
 }

Modified: incubator/tuscany/java/sca/modules/interface-java-jaxws/src/test/java/org/apache/tuscany/sca/interfacedef/java/jaxws/WrapperBeanGeneratorTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/interface-java-jaxws/src/test/java/org/apache/tuscany/sca/interfacedef/java/jaxws/WrapperBeanGeneratorTestCase.java?rev=664457&r1=664456&r2=664457&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/interface-java-jaxws/src/test/java/org/apache/tuscany/sca/interfacedef/java/jaxws/WrapperBeanGeneratorTestCase.java (original)
+++ incubator/tuscany/java/sca/modules/interface-java-jaxws/src/test/java/org/apache/tuscany/sca/interfacedef/java/jaxws/WrapperBeanGeneratorTestCase.java Sun Jun  8 00:00:37 2008
@@ -41,20 +41,23 @@
     @Test
     public void testGenerate() throws Exception {
         List<Class<?>> classes = new WrapperBeanGenerator().generateWrapperBeans(TestInterface.class);
-        JAXBContext context = JAXBContextHelper.createJAXBContext(classes.toArray(new Class<?>[classes.size()]));
         for (Class<?> cls : classes) {
             for (Field f : cls.getDeclaredFields()) {
-                // System.out.println(f.getName());
+                System.out.println(f.getName());
+                System.out.println(f.getGenericType());
                 for (Annotation a : f.getAnnotations()) {
-                    // System.out.println(a);
+                    System.out.println(a);
                 }
             }
             for (Method m : cls.getDeclaredMethods()) {
-                // System.out.println(m);
+                System.out.println(m);
                 for (Annotation a : m.getAnnotations()) {
-                    // System.out.println(a);
+                    System.out.println(a);
                 }
             }
+        }
+        JAXBContext context = JAXBContextHelper.createJAXBContext(classes.toArray(new Class<?>[classes.size()]));
+        for (Class<?> cls : classes) {
             Object obj = cls.newInstance();
             StringWriter sw = new StringWriter();
             context.createMarshaller().marshal(obj, sw);