[jbossws-commits] JBossWS SVN: r16915 - thirdparty/cxf/branches/cxf-2.2.12-patch02_JBPAPP-10208/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws.

jbossws-commits at lists.jboss.org jbossws-commits at lists.jboss.org
Tue Oct 16 06:35:49 EDT 2012


Author: mmusaji
Date: 2012-10-16 06:35:49 -0400 (Tue, 16 Oct 2012)
New Revision: 16915

Modified:
   thirdparty/cxf/branches/cxf-2.2.12-patch02_JBPAPP-10208/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/WrapperClassGenerator.java
Log:
[JBPAPP-10208] Merged changes from CXF-3205 to enable @XmlJavaTypeAdapter to be picked up at package-info level

Modified: thirdparty/cxf/branches/cxf-2.2.12-patch02_JBPAPP-10208/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/WrapperClassGenerator.java
===================================================================
--- thirdparty/cxf/branches/cxf-2.2.12-patch02_JBPAPP-10208/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/WrapperClassGenerator.java	2012-10-16 10:27:52 UTC (rev 16914)
+++ thirdparty/cxf/branches/cxf-2.2.12-patch02_JBPAPP-10208/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/WrapperClassGenerator.java	2012-10-16 10:35:49 UTC (rev 16915)
@@ -38,6 +38,7 @@
 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 @@
                       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;
@@ -373,13 +410,7 @@
                 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);



More information about the jbossws-commits mailing list