Author: rdonkin
Date: Thu Aug 11 11:37:31 2005
New Revision: 231498

URL: http://svn.apache.org/viewcvs?rev=231498&view=rev
Log:
Improved support for private static classes.

Modified:
    
jakarta/commons/proper/betwixt/trunk/src/java/org/apache/commons/betwixt/expression/MethodExpression.java
    
jakarta/commons/proper/betwixt/trunk/src/java/org/apache/commons/betwixt/expression/MethodUpdater.java
    
jakarta/commons/proper/betwixt/trunk/src/java/org/apache/commons/betwixt/io/BeanRuleSet.java
    
jakarta/commons/proper/betwixt/trunk/src/java/org/apache/commons/betwixt/io/read/ChainedBeanCreatorFactory.java
    
jakarta/commons/proper/betwixt/trunk/src/test/org/apache/commons/betwixt/io/read/TestReadData.java

Modified: 
jakarta/commons/proper/betwixt/trunk/src/java/org/apache/commons/betwixt/expression/MethodExpression.java
URL: 
http://svn.apache.org/viewcvs/jakarta/commons/proper/betwixt/trunk/src/java/org/apache/commons/betwixt/expression/MethodExpression.java?rev=231498&r1=231497&r2=231498&view=diff
==============================================================================
--- 
jakarta/commons/proper/betwixt/trunk/src/java/org/apache/commons/betwixt/expression/MethodExpression.java
 (original)
+++ 
jakarta/commons/proper/betwixt/trunk/src/java/org/apache/commons/betwixt/expression/MethodExpression.java
 Thu Aug 11 11:37:31 2005
@@ -66,7 +66,18 @@
                     Class type = bean.getClass();
                     Method alternate = findAlternateMethod( type, method );
                     if ( alternate != null ) {
-                        return alternate.invoke( bean, arguments );
+                        try
+                        {
+                            return alternate.invoke( bean, arguments );
+                        } catch (IllegalAccessException ex) {
+                            alternate.setAccessible(true);
+                            return alternate.invoke( bean, arguments );
+                        }
+                    }
+                    else
+                    {
+                        method.setAccessible(true);
+                        return method.invoke( bean, arguments );
                     }
                 } catch (Exception e2) {
                     handleException(context, e2);

Modified: 
jakarta/commons/proper/betwixt/trunk/src/java/org/apache/commons/betwixt/expression/MethodUpdater.java
URL: 
http://svn.apache.org/viewcvs/jakarta/commons/proper/betwixt/trunk/src/java/org/apache/commons/betwixt/expression/MethodUpdater.java?rev=231498&r1=231497&r2=231498&view=diff
==============================================================================
--- 
jakarta/commons/proper/betwixt/trunk/src/java/org/apache/commons/betwixt/expression/MethodUpdater.java
 (original)
+++ 
jakarta/commons/proper/betwixt/trunk/src/java/org/apache/commons/betwixt/expression/MethodUpdater.java
 Thu Aug 11 11:37:31 2005
@@ -102,6 +102,14 @@
             );
         }
         Object[] arguments = { newValue };
-        method.invoke( bean, arguments );
+        try
+        {
+            method.invoke( bean, arguments );
+        }
+        catch (IllegalAccessException e)
+        {
+            method.setAccessible(true);
+            method.invoke( bean, arguments );
+        }
     }
 }

Modified: 
jakarta/commons/proper/betwixt/trunk/src/java/org/apache/commons/betwixt/io/BeanRuleSet.java
URL: 
http://svn.apache.org/viewcvs/jakarta/commons/proper/betwixt/trunk/src/java/org/apache/commons/betwixt/io/BeanRuleSet.java?rev=231498&r1=231497&r2=231498&view=diff
==============================================================================
--- 
jakarta/commons/proper/betwixt/trunk/src/java/org/apache/commons/betwixt/io/BeanRuleSet.java
 (original)
+++ 
jakarta/commons/proper/betwixt/trunk/src/java/org/apache/commons/betwixt/io/BeanRuleSet.java
 Thu Aug 11 11:37:31 2005
@@ -402,6 +402,10 @@
         public Object popBean() {
             Object bean = super.popBean();
             Object top = digester.pop();
+            if (digester.peek() == null) {
+                // don't pop the last from the stack
+                digester.push(top);
+            }
             return bean;
         }
     }

Modified: 
jakarta/commons/proper/betwixt/trunk/src/java/org/apache/commons/betwixt/io/read/ChainedBeanCreatorFactory.java
URL: 
http://svn.apache.org/viewcvs/jakarta/commons/proper/betwixt/trunk/src/java/org/apache/commons/betwixt/io/read/ChainedBeanCreatorFactory.java?rev=231498&r1=231497&r2=231498&view=diff
==============================================================================
--- 
jakarta/commons/proper/betwixt/trunk/src/java/org/apache/commons/betwixt/io/read/ChainedBeanCreatorFactory.java
 (original)
+++ 
jakarta/commons/proper/betwixt/trunk/src/java/org/apache/commons/betwixt/io/read/ChainedBeanCreatorFactory.java
 Thu Aug 11 11:37:31 2005
@@ -112,7 +112,8 @@
                 
                 try {
 
-                    return theClass.newInstance();
+                    Object result = theClass.newInstance();
+                    return result;
                     
                 } catch (Exception e) {
                     // it would be nice to have a pluggable strategy for 
exception management

Modified: 
jakarta/commons/proper/betwixt/trunk/src/test/org/apache/commons/betwixt/io/read/TestReadData.java
URL: 
http://svn.apache.org/viewcvs/jakarta/commons/proper/betwixt/trunk/src/test/org/apache/commons/betwixt/io/read/TestReadData.java?rev=231498&r1=231497&r2=231498&view=diff
==============================================================================
--- 
jakarta/commons/proper/betwixt/trunk/src/test/org/apache/commons/betwixt/io/read/TestReadData.java
 (original)
+++ 
jakarta/commons/proper/betwixt/trunk/src/test/org/apache/commons/betwixt/io/read/TestReadData.java
 Thu Aug 11 11:37:31 2005
@@ -16,9 +16,11 @@
 package org.apache.commons.betwixt.io.read;
 
 import java.io.StringReader;
+import java.io.StringWriter;
 
 import org.apache.commons.betwixt.AbstractTestCase;
 import org.apache.commons.betwixt.io.BeanReader;
+import org.apache.commons.betwixt.io.BeanWriter;
 
 /**
  * @author <a href='http://jakarta.apache.org/commons'>Jakarta Commons 
Team</a>, <a href='http://www.apache.org'>Apache Software Foundation</a>
@@ -62,5 +64,47 @@
         }
         
         AlertBean alterBean = (AlertBean) reader.parse(validIn);
+    }
+    
+    public void testWritePrivateStaticClasses() throws Exception {
+        Nested nested = new Nested();
+        nested.setName("Timothy Taylor");
+        StringWriter out = new StringWriter();
+        out.write("<?xml version='1.0'?>");
+        BeanWriter writer = new BeanWriter(out);
+        
writer.getXMLIntrospector().getConfiguration().setAttributesForPrimitives(false);
+        writer.getBindingConfiguration().setMapIDs(false);
+        writer.write("ale", nested);
+        
+        String expected = "<?xml version='1.0'?>" +
+                "<ale><name>Timothy Taylor</name></ale>"; 
+         
+        xmlAssertIsomorphic(parseString(out), parseString(expected), true);
+    }
+    
+    public void testReadPrivateStaticClasses() throws Exception {
+        
+        StringReader in= new StringReader("<?xml version='1.0'?>" +
+                "<ale><name>Timothy Taylor</name></ale>"); 
+        BeanReader reader = new BeanReader();
+        reader.registerBeanClass("ale", Nested.class);
+        
reader.getXMLIntrospector().getConfiguration().setAttributesForPrimitives(true);
+        Object out = reader.parse(in);
+        assertTrue("Expected bean to be of type Nested", out instanceof 
Nested);
+        Nested bean = (Nested) out;
+        assertEquals("Expected name to be set", "Timothy Taylor", 
bean.getName());
+    }
+
+    private static class Nested {
+        private String name;
+
+        public String getName() {
+            return name;
+        }
+
+        public void setName(String name) {
+            this.name = name;
+        }
+        
     }
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to