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);