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/05 01:03:32 UTC

svn commit: r663404 - 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: Wed Jun  4 16:03:32 2008
New Revision: 663404

URL: http://svn.apache.org/viewvc?rev=663404&view=rev
Log:
Change the getter for List property

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/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=663404&r1=663403&r2=663404&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 Wed Jun  4 16:03:32 2008
@@ -95,7 +95,7 @@
     protected void declareField(ClassWriter cw, String propName, String propClassSignature, String propTypeSignature) {
         FieldVisitor fv;
         AnnotationVisitor av0;
-        fv = cw.visitField(ACC_PRIVATE, getFieldName(propName), propClassSignature, propTypeSignature, null);
+        fv = cw.visitField(ACC_PROTECTED, getFieldName(propName), propClassSignature, propTypeSignature, null);
 
         av0 = fv.visitAnnotation("Ljavax/xml/bind/annotation/XmlElement;", true);
         av0.visit("name", propName);
@@ -111,6 +111,9 @@
                                  String propName,
                                  String propClassSignature,
                                  String propTypeSignature) {
+        if ("Ljava/util/List;".equals(propClassSignature)) {
+            return;
+        }
         MethodVisitor mv =
             cw.visitMethod(ACC_PUBLIC,
                            "set" + capitalize(propName),
@@ -143,6 +146,11 @@
                                  String propName,
                                  String propClassSignature,
                                  String propTypeSignature) {
+        if ("Ljava/util/List;".equals(propClassSignature)) {
+            decalreListGetter(cw, classDescriptor, classSignature, propName, propClassSignature, propTypeSignature);
+            return;
+        }
+
         String getterName = ("Z".equals(propClassSignature) ? "is" : "get") + capitalize(propName);
         MethodVisitor mv =
             cw.visitMethod(ACC_PUBLIC, getterName, "()" + propClassSignature, propTypeSignature == null ? null
@@ -161,6 +169,45 @@
         mv.visitEnd();
     }
 
+    protected void decalreListGetter(ClassWriter cw,
+                                     String classDescriptor,
+                                     String classSignature,
+                                     String propName,
+                                     String propClassSignature,
+                                     String propTypeSignature) {
+        String getterName = "get" + capitalize(propName);
+        String fieldName = getFieldName(propName);
+        MethodVisitor mv =
+            cw.visitMethod(ACC_PUBLIC, getterName, "()" + propClassSignature, propTypeSignature == null ? null
+                : "()" + propTypeSignature, null);
+        mv.visitCode();
+        Label l0 = new Label();
+        mv.visitLabel(l0);
+        mv.visitLineNumber(63, l0);
+        mv.visitVarInsn(ALOAD, 0);
+        mv.visitFieldInsn(GETFIELD, classDescriptor, fieldName, propClassSignature);
+        Label l1 = new Label();
+        mv.visitJumpInsn(IFNONNULL, l1);
+        Label l2 = new Label();
+        mv.visitLabel(l2);
+        mv.visitLineNumber(64, l2);
+        mv.visitVarInsn(ALOAD, 0);
+        mv.visitTypeInsn(NEW, "java/util/ArrayList");
+        mv.visitInsn(DUP);
+        mv.visitMethodInsn(INVOKESPECIAL, "java/util/ArrayList", "<init>", "()V");
+        mv.visitFieldInsn(PUTFIELD, classDescriptor, fieldName, propClassSignature);
+        mv.visitLabel(l1);
+        mv.visitLineNumber(66, l1);
+        mv.visitVarInsn(ALOAD, 0);
+        mv.visitFieldInsn(GETFIELD, classDescriptor, fieldName, propClassSignature);
+        mv.visitInsn(ARETURN);
+        Label l3 = new Label();
+        mv.visitLabel(l3);
+        mv.visitLocalVariable("this", classSignature, null, l0, l3, 0);
+        mv.visitMaxs(3, 1);
+        mv.visitEnd();
+    }
+
     protected static String capitalize(String name) {
         if (name == null || name.length() == 0) {
             return name;

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=663404&r1=663403&r2=663404&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 Wed Jun  4 16:03:32 2008
@@ -19,6 +19,7 @@
 
 package org.apache.tuscany.sca.interfacedef.java.jaxws;
 
+import java.io.StringReader;
 import java.io.StringWriter;
 import java.lang.annotation.Annotation;
 import java.lang.reflect.Field;
@@ -27,6 +28,7 @@
 import java.util.Map;
 
 import javax.xml.bind.JAXBContext;
+import javax.xml.transform.stream.StreamSource;
 
 import org.apache.tuscany.sca.databinding.jaxb.JAXBContextHelper;
 import org.apache.tuscany.sca.databinding.jaxb.JAXBTypeHelper;
@@ -39,6 +41,7 @@
     @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());
@@ -53,17 +56,18 @@
                 }
             }
             Object obj = cls.newInstance();
-            JAXBContext context = JAXBContextHelper.createJAXBContext(cls);
             StringWriter sw = new StringWriter();
             context.createMarshaller().marshal(obj, sw);
-            System.out.println(sw.toString());
+            // System.out.println(sw.toString());
+            StringReader sr = new StringReader(sw.toString());
+            context.createUnmarshaller().unmarshal(new StreamSource(sr), cls);
         }
     }
 
     @Test
     public void testGenerateSchema() throws Exception {
         List<Class<?>> classes = new WrapperBeanGenerator().generateWrapperBeans(TestInterface.class);
-        JAXBContext context = JAXBContext.newInstance(classes.toArray(new Class[0]));
+        JAXBContext context = JAXBContextHelper.createJAXBContext(classes.toArray(new Class<?>[classes.size()]));
         Map<String, String> results = JAXBTypeHelper.generateSchema(context);
         for (String xsd : results.values()) {
             System.out.println(xsd);