You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by dk...@apache.org on 2012/01/17 19:11:57 UTC

svn commit: r1232516 - in /cxf/branches/2.5.x-fixes: ./ rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBContextInitializer.java

Author: dkulp
Date: Tue Jan 17 18:11:57 2012
New Revision: 1232516

URL: http://svn.apache.org/viewvc?rev=1232516&view=rev
Log:
Merged revisions 1232498 via svnmerge from 
https://svn.apache.org/repos/asf/cxf/trunk

........
  r1232498 | dkulp | 2012-01-17 12:25:32 -0500 (Tue, 17 Jan 2012) | 3 lines
  
  [CXF-4036] Update JAXBContextInitializer to look for XmlSeeAlso and
  TypeAdapters on classes as well.
  Patch from david ferbas applied
........

Modified:
    cxf/branches/2.5.x-fixes/   (props changed)
    cxf/branches/2.5.x-fixes/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBContextInitializer.java

Propchange: cxf/branches/2.5.x-fixes/
------------------------------------------------------------------------------
Binary property 'svnmerge-integrated' - no diff available.

Modified: cxf/branches/2.5.x-fixes/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBContextInitializer.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.5.x-fixes/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBContextInitializer.java?rev=1232516&r1=1232515&r2=1232516&view=diff
==============================================================================
--- cxf/branches/2.5.x-fixes/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBContextInitializer.java (original)
+++ cxf/branches/2.5.x-fixes/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBContextInitializer.java Tue Jan 17 18:11:57 2012
@@ -270,30 +270,37 @@ class JAXBContextInitializer extends Ser
         } else {
             cls = JAXBUtils.getValidClass(cls);
             if (null != cls) {
+                if (classes.contains(cls)) {
+                    return;
+                }
+
+                if (!cls.isInterface()) {
+                    classes.add(cls);
+                }
+
+                XmlSeeAlso xsa = cls.getAnnotation(XmlSeeAlso.class);
+                if (xsa != null) {
+                    for (Class<?> c : xsa.value()) {
+                        addClass(c);
+                    }
+                }
+                XmlJavaTypeAdapter xjta = cls.getAnnotation(XmlJavaTypeAdapter.class);
+                if (xjta != null) {
+                    //has an adapter.   We need to inspect the adapter and then
+                    //return as the adapter will handle the superclass
+                    //and interfaces and such
+                    @SuppressWarnings("rawtypes")
+                    Class<? extends XmlAdapter> c2 = xjta.value();
+                    inspectTypeAdapter(c2);
+                    return;
+                }
+                
                 if (cls.getSuperclass() != null) {
                     //JAXB should do this, but it doesn't always.
                     //in particular, older versions of jaxb don't
                     addClass(cls.getSuperclass());
                 }
-                
-                if (cls.isInterface()) {
-                    //interfaces cannot be added directly, however, they
-                    //may have some interesting annoations we should consider
-                    XmlSeeAlso xsa = cls.getAnnotation(XmlSeeAlso.class);
-                    if (xsa != null) {
-                        for (Class<?> c : xsa.value()) {
-                            addClass(c);
-                        }
-                    }
-                    XmlJavaTypeAdapter xjta = cls.getAnnotation(XmlJavaTypeAdapter.class);
-                    if (xjta != null) {
-                        Class<? extends XmlAdapter> c2 = xjta.value();
-                        inspectTypeAdapter(c2);
-                    }
-                } else if (classes.contains(cls)) {
-                    return;
-                } else {
-                    classes.add(cls);
+                if (!cls.isInterface()) {
                     walkReferences(cls);
                 }
             }
@@ -408,11 +415,17 @@ class JAXBContextInitializer extends Ser
         if (method.getName().startsWith("is")) {
             beginIndex = 2;
         }
+        Method setter = null;
         try {
-            method.getDeclaringClass().getMethod("set" + method.getName().substring(beginIndex),
-                                                 new Class[] {method.getReturnType()});
+            setter = method.getDeclaringClass()
+                .getMethod("set" + method.getName().substring(beginIndex),
+                           new Class[] {method.getReturnType()});
         } catch (Exception e) {
             //getter, but no setter
+        }
+        if (setter == null 
+            || setter.isAnnotationPresent(XmlTransient.class)
+            || !Modifier.isPublic(setter.getModifiers())) {
             return false;
         }