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 2007/04/25 21:34:07 UTC

svn commit: r532448 - /incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/jaxb/WrapperHelper.java

Author: dkulp
Date: Wed Apr 25 12:34:06 2007
New Revision: 532448

URL: http://svn.apache.org/viewvc?view=rev&rev=532448
Log:
Minor updates to allow setting/getting wrapper parts with wrappers generated with different versions of jaxb

Modified:
    incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/jaxb/WrapperHelper.java

Modified: incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/jaxb/WrapperHelper.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/jaxb/WrapperHelper.java?view=diff&rev=532448&r1=532447&r2=532448
==============================================================================
--- incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/jaxb/WrapperHelper.java (original)
+++ incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/jaxb/WrapperHelper.java Wed Apr 25 12:34:06 2007
@@ -46,28 +46,38 @@
             }
 
             XmlElement el = null;
+            Field elField = null;
             for (Field field : wrapperType.getClass().getDeclaredFields()) {
 
                 if (field.getName().equals(fieldName)) {
                     // JAXB Type get XmlElement Annotation
                     el = field.getAnnotation(XmlElement.class);
-                    // assert el != null;
+                    elField = field;
+                    break;
                 }
             }
 
             if (part == null) {
-                if (el != null && !el.nillable()) {
+                if (el != null 
+                    && !el.nillable() 
+                    && elField.getType().isPrimitive()) {
                     throw new IllegalArgumentException("null value for field not permitted.");
                 }
                 return;
             }
 
             String modifier = JAXBUtils.nameToIdentifier(partName, JAXBUtils.IdentifierType.SETTER);
+            String modifier2 = modifier;
+            if ("return".equals(partName)) {
+                //some versions of jaxb map "return" to "set_return" instead of "setReturn"
+                modifier2 = "set_return";
+            }
 
             boolean setInvoked = false;
             for (Method method : wrapperType.getClass().getMethods()) {
                 if (method.getParameterTypes() != null && method.getParameterTypes().length == 1
-                    && modifier.equals(method.getName())) {
+                    && (modifier.equals(method.getName())
+                        || modifier2.equals(method.getName()))) {
                     if ("javax.xml.bind.JAXBElement".equals(method.getParameterTypes()[0].getName())) {
                         if (!setJAXBElementValueIntoWrapType(method, wrapperType, part)) {
                             throw new RuntimeException("Failed to set the part value (" + part 
@@ -80,7 +90,14 @@
                     break;
                 }
             }
-
+            if (!setInvoked
+                && elField != null
+                && el != null
+                && partName.equals(el.name())) {
+                elField.setAccessible(true);
+                elField.set(wrapperType, part);
+                setInvoked = true;
+            }
             if (!setInvoked) {
                 throw new IllegalArgumentException("Could not find a modifier method on Wrapper Type for "
                                                    + partName);
@@ -148,19 +165,51 @@
     public static Object getWrappedPart(String partName, Object wrapperType, String elementType)
         throws IllegalAccessException, NoSuchMethodException, InvocationTargetException {
 
+        String fieldName = partName;
+        if (JAXBUtils.isJavaKeyword(partName)) {
+            fieldName = JAXBUtils.nameToIdentifier(partName, JAXBUtils.IdentifierType.VARIABLE);
+        }
+
+        XmlElement el = null;
+        Field elField = null;
+        for (Field field : wrapperType.getClass().getDeclaredFields()) {
+
+            if (field.getName().equals(fieldName)) {
+                // JAXB Type get XmlElement Annotation
+                el = field.getAnnotation(XmlElement.class);
+                elField = field;
+                break;
+            }
+        }        
+        
         String accessor = JAXBUtils.nameToIdentifier(partName, JAXBUtils.IdentifierType.GETTER);
+        String accessor2 = accessor;
+        if ("return".equals(partName)) {
+            accessor2 = "get_return";
+        }
 
         if (elementType != null && "boolean".equals(elementType.toLowerCase())) {
             // JAXB Exception to get the Boolean property
             accessor = accessor.replaceFirst("get", "is");
+            accessor2 = accessor2.replaceFirst("get", "is");
         }
 
         for (Method method : wrapperType.getClass().getMethods()) {
-            if (method.getParameterTypes().length == 0 && accessor.equals(method.getName())) {
+            if (method.getParameterTypes().length == 0 
+                && (accessor.equals(method.getName())
+                    || accessor2.equals(method.getName()))) {
 
                 return getValue(method, wrapperType);
             }
         }
+        
+        if (elField != null
+            && el != null
+            && partName.equals(el.name())) {
+            elField.setAccessible(true);
+            return elField.get(wrapperType);
+        }
+        
         return null;
     }