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 18:25:32 UTC
svn commit: r1232498 -
/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBContextInitializer.java
Author: dkulp
Date: Tue Jan 17 17:25:32 2012
New Revision: 1232498
URL: http://svn.apache.org/viewvc?rev=1232498&view=rev
Log:
[CXF-4036] Update JAXBContextInitializer to look for XmlSeeAlso and
TypeAdapters on classes as well.
Patch from david ferbas applied
Modified:
cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBContextInitializer.java
Modified: cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBContextInitializer.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBContextInitializer.java?rev=1232498&r1=1232497&r2=1232498&view=diff
==============================================================================
--- cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBContextInitializer.java (original)
+++ cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBContextInitializer.java Tue Jan 17 17:25:32 2012
@@ -271,31 +271,38 @@ 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) {
- @SuppressWarnings("rawtypes")
- Class<? extends XmlAdapter> c2 = xjta.value();
- inspectTypeAdapter(c2);
- }
- } else if (classes.contains(cls)) {
- return;
- } else {
- classes.add(cls);
+
+ if (!cls.isInterface()) {
walkReferences(cls);
}
}
@@ -410,11 +417,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;
}