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/05/11 19:44:07 UTC

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

Author: dkulp
Date: Fri May 11 10:44:06 2007
New Revision: 537244

URL: http://svn.apache.org/viewvc?view=rev&rev=537244
Log:
Minor wrapper getter optization

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=537244&r1=537243&r2=537244
==============================================================================
--- 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 Fri May 11 10:44:06 2007
@@ -174,40 +174,55 @@
     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);
+        String accessor = JAXBUtils.nameToIdentifier(partName, JAXBUtils.IdentifierType.GETTER);
+        Method method = null;
+        NoSuchMethodException nsex = null;
+        try {
+            method = wrapperType.getClass().getMethod(accessor, new Class[0]); 
+        } catch (NoSuchMethodException ex) {
+            //ignore for now
+            nsex = (NoSuchMethodException)ex.fillInStackTrace();
         }
 
         Field elField = null;
-        for (Field field : wrapperType.getClass().getDeclaredFields()) {
-            if (field.getName().equals(fieldName)) {
-                elField = field;
-                break;
+        if (method == null
+            && elementType != null
+            && "boolean".equals(elementType.toLowerCase())) {
+            
+            elField = getElField(partName, wrapperType);
+                
+            if (!Collection.class.isAssignableFrom(elField.getType())
+                && !elField.getType().isArray()) {
+    
+                try {
+                    method = wrapperType.getClass().getMethod(accessor.replaceFirst("get", "is"),
+                                                              new Class[0]); 
+                } catch (NoSuchMethodException ex) {
+                    //ignore for now
+                }            
             }
-        }        
-        
-        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())
-            && !Collection.class.isAssignableFrom(elField.getType())) {
-            // JAXB Exception to get the Boolean property
-            accessor = accessor.replaceFirst("get", "is");
-            accessor2 = accessor2.replaceFirst("get", "is");
-        }
-
-        Method method = wrapperType.getClass().getMethod(accessor, new Class[0]);
-        if (method == null) {
-            method = wrapperType.getClass().getMethod(accessor2, new Class[0]);
+        if (method == null 
+            && "return".equals(partName)) {
+            //RI generated code uses this
+            try {
+                method = wrapperType.getClass().getMethod("get_return", new Class[0]);
+            } catch (NoSuchMethodException ex) {
+                try {
+                    method = wrapperType.getClass().getMethod("is_return",
+                                                              new Class[0]);
+                } catch (NoSuchMethodException ex2) {
+                    //ignore for now
+                } 
+            }                
         }
+        
         if (method != null) {
             return getValue(method, wrapperType);
         }
+        if (elField == null) {
+            elField = getElField(partName, wrapperType);
+        }
         if (elField != null) {
             // JAXB Type get XmlElement Annotation
             XmlElement el = elField.getAnnotation(XmlElement.class);
@@ -216,11 +231,28 @@
                 elField.setAccessible(true);
                 return elField.get(wrapperType);
             }
+        } else if (nsex != null) {
+            throw nsex;
         }
         
         return null;
     }
 
+    private static Field getElField(String partName, Object wrapperType) {
+        String fieldName = partName;
+        Field elField = null;
+        if (JAXBUtils.isJavaKeyword(partName)) {
+            fieldName = JAXBUtils.nameToIdentifier(partName, JAXBUtils.IdentifierType.VARIABLE);
+        }
+        for (Field field : wrapperType.getClass().getDeclaredFields()) {
+            if (field.getName().equals(fieldName)) {
+                elField = field;
+                break;
+            }
+        }        
+        return elField;
+    }
+    
     public static Object getWrappedPart(String partName, Object wrapperType) throws IllegalAccessException,
         NoSuchMethodException, InvocationTargetException {
         String accessor = JAXBUtils.nameToIdentifier(partName, JAXBUtils.IdentifierType.GETTER);