Author: dkulp
Date: Tue Oct 25 17:44:52 2011
New Revision: 1188825

URL: http://svn.apache.org/viewvc?rev=1188825&view=rev
Log:
[CXF-3205] Copy XmlJavaTypeAdapter annotations into the generated
package-info class.

Modified:
    
cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/WrapperClassGenerator.java

Modified: 
cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/WrapperClassGenerator.java
URL: 
http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/WrapperClassGenerator.java?rev=1188825&r1=1188824&r2=1188825&view=diff
==============================================================================
--- 
cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/WrapperClassGenerator.java
 (original)
+++ 
cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/WrapperClassGenerator.java
 Tue Oct 25 17:44:52 2011
@@ -38,6 +38,7 @@ import javax.xml.bind.annotation.XmlList
 import javax.xml.bind.annotation.XmlMimeType;
 import javax.xml.bind.annotation.XmlNsForm;
 import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapters;
 import javax.xml.namespace.QName;
 import javax.xml.ws.Holder;
 
@@ -262,11 +263,47 @@ public final class WrapperClassGenerator
                       getClassCode(XmlNsForm.class),
                       q ? "QUALIFIED" : "UNQUALIFIED");
         av0.visitEnd();
+        
+        if (clz.getPackage() != null && clz.getPackage().getAnnotations() != 
null) {
+            for (Annotation ann : clz.getPackage().getAnnotations()) {
+                if (ann instanceof XmlJavaTypeAdapters) {
+                    av0 = 
cw.visitAnnotation("Ljavax/xml/bind/annotation/adapters/XmlJavaTypeAdapters;",
+                                             true);
+                    generateXmlJavaTypeAdapters(av0, (XmlJavaTypeAdapters)ann);
+                    av0.visitEnd();
+                } else if (ann instanceof XmlJavaTypeAdapter) {
+                    av0 = 
cw.visitAnnotation("Ljavax/xml/bind/annotation/adapters/XmlJavaTypeAdapter;",
+                                             true);
+                    generateXmlJavaTypeAdapter(av0, (XmlJavaTypeAdapter)ann);
+                    av0.visitEnd();
+                }
+            }
+        }
         cw.visitEnd();
-
+        
         loadClass(className, clz, cw.toByteArray());
     }
 
+    private void generateXmlJavaTypeAdapters(AnnotationVisitor av, 
XmlJavaTypeAdapters adapters) {
+        AnnotationVisitor av1 = av.visitArray("value");
+        
+        for (XmlJavaTypeAdapter adapter : adapters.value()) {
+            AnnotationVisitor av2 
+                = av1.visitAnnotation(null, 
"Ljavax/xml/bind/annotation/adapters/XmlJavaTypeAdapter;");
+            generateXmlJavaTypeAdapter(av2, adapter);
+            av2.visitEnd();
+        }
+        av1.visitEnd();
+    }
+    private void generateXmlJavaTypeAdapter(AnnotationVisitor av, 
XmlJavaTypeAdapter adapter) {
+        if (adapter.value() != null) {
+            av.visit("value", 
org.objectweb.asm.Type.getType(getClassCode(adapter.value())));
+        }
+        if (adapter.type() != 
javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter.DEFAULT.class) {
+            av.visit("type", 
org.objectweb.asm.Type.getType(getClassCode(adapter.type())));
+        }
+    }
+    
     private void generateMessagePart(ClassWriter cw, MessagePartInfo mpi, 
Method method, String className) {
         if 
(Boolean.TRUE.equals(mpi.getProperty(ReflectionServiceFactoryBean.HEADER))) {
             return;
@@ -375,13 +412,7 @@ public final class WrapperClassGenerator
                 av0.visitEnd();
             } else if (ann instanceof XmlJavaTypeAdapter) {
                 av0 = 
fv.visitAnnotation("Ljavax/xml/bind/annotation/adapters/XmlJavaTypeAdapter;", 
true);
-                XmlJavaTypeAdapter adapter = (XmlJavaTypeAdapter)ann;
-                if (adapter.value() != null) {
-                    av0.visit("value", 
org.objectweb.asm.Type.getType(getClassCode(adapter.value())));
-                }
-                if (adapter.type() != 
javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter.DEFAULT.class) {
-                    av0.visit("type", 
org.objectweb.asm.Type.getType(getClassCode(adapter.type())));
-                }
+                generateXmlJavaTypeAdapter(av0, (XmlJavaTypeAdapter)ann);
                 av0.visitEnd();
             } else if (ann instanceof XmlAttachmentRef) {
                 av0 = 
fv.visitAnnotation("Ljavax/xml/bind/annotation/XmlAttachmentRef;", true);


Reply via email to