commons-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From simonetrip...@apache.org
Subject svn commit: r1210678 - in /commons/proper/digester/trunk/src: main/java/org/apache/commons/digester3/binder/ test/resources/org/apache/commons/digester3/xmlrules/
Date Mon, 05 Dec 2011 22:27:50 GMT
Author: simonetripodi
Date: Mon Dec  5 22:27:50 2011
New Revision: 1210678

URL: http://svn.apache.org/viewvc?rev=1210678&view=rev
Log:
[DIGESTER-154] The DigesterBinder is not able to load primitive classes by name

Added:
    commons/proper/digester/trunk/src/main/java/org/apache/commons/digester3/binder/BinderClassLoader.java
  (with props)
Modified:
    commons/proper/digester/trunk/src/main/java/org/apache/commons/digester3/binder/DigesterLoader.java
    commons/proper/digester/trunk/src/main/java/org/apache/commons/digester3/binder/ObjectCreateBuilder.java
    commons/proper/digester/trunk/src/test/resources/org/apache/commons/digester3/xmlrules/constructor-testrules.xml

Added: commons/proper/digester/trunk/src/main/java/org/apache/commons/digester3/binder/BinderClassLoader.java
URL: http://svn.apache.org/viewvc/commons/proper/digester/trunk/src/main/java/org/apache/commons/digester3/binder/BinderClassLoader.java?rev=1210678&view=auto
==============================================================================
--- commons/proper/digester/trunk/src/main/java/org/apache/commons/digester3/binder/BinderClassLoader.java
(added)
+++ commons/proper/digester/trunk/src/main/java/org/apache/commons/digester3/binder/BinderClassLoader.java
Mon Dec  5 22:27:50 2011
@@ -0,0 +1,71 @@
+package org.apache.commons.digester3.binder;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+final class BinderClassLoader
+    extends ClassLoader
+{
+
+    private static final Map<String, Class<?>> PRIMITIVE_TYPES;
+    static
+    {
+        HashMap<String, Class<?>> primitiveTypes = new HashMap<String, Class<?>>();
+        primitiveTypes.put( "boolean", boolean.class );
+        primitiveTypes.put( "byte", byte.class );
+        primitiveTypes.put( "short", short.class );
+        primitiveTypes.put( "int", int.class );
+        primitiveTypes.put( "char", char.class );
+        primitiveTypes.put( "long", long.class );
+        primitiveTypes.put( "float", float.class );
+        primitiveTypes.put( "double", double.class );
+        PRIMITIVE_TYPES = Collections.unmodifiableMap( primitiveTypes );
+    }
+
+    private final ClassLoader adaptedClassLoader;
+
+    public BinderClassLoader( ClassLoader adaptedClassLoader )
+    {
+        this.adaptedClassLoader = adaptedClassLoader;
+    }
+
+    public ClassLoader getAdaptedClassLoader()
+    {
+        return adaptedClassLoader;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    protected synchronized Class<?> loadClass( String name, boolean resolve )
+        throws ClassNotFoundException
+    {
+        if ( PRIMITIVE_TYPES.containsKey( name ) )
+        {
+            return PRIMITIVE_TYPES.get( name );
+        }
+        return adaptedClassLoader.loadClass( name );
+    }
+
+}

Propchange: commons/proper/digester/trunk/src/main/java/org/apache/commons/digester3/binder/BinderClassLoader.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: commons/proper/digester/trunk/src/main/java/org/apache/commons/digester3/binder/BinderClassLoader.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: commons/proper/digester/trunk/src/main/java/org/apache/commons/digester3/binder/BinderClassLoader.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: commons/proper/digester/trunk/src/main/java/org/apache/commons/digester3/binder/DigesterLoader.java
URL: http://svn.apache.org/viewvc/commons/proper/digester/trunk/src/main/java/org/apache/commons/digester3/binder/DigesterLoader.java?rev=1210678&r1=1210677&r2=1210678&view=diff
==============================================================================
--- commons/proper/digester/trunk/src/main/java/org/apache/commons/digester3/binder/DigesterLoader.java
(original)
+++ commons/proper/digester/trunk/src/main/java/org/apache/commons/digester3/binder/DigesterLoader.java
Mon Dec  5 22:27:50 2011
@@ -113,7 +113,7 @@ public final class DigesterLoader
      * used to load Digester itself, is used, based on the value of the
      * <code>useContextClassLoader</code> variable.
      */
-    private ClassLoader classLoader;
+    private BinderClassLoader classLoader;
 
     /**
      * An optional class that substitutes values in attributes and body text. This may be
null and so a null check is
@@ -196,7 +196,7 @@ public final class DigesterLoader
             throw new IllegalArgumentException( "Parameter 'classLoader' cannot be null"
);
         }
 
-        this.classLoader = classLoader;
+        this.classLoader = new BinderClassLoader( classLoader );
         return this;
     }
 
@@ -550,7 +550,8 @@ public final class DigesterLoader
         }
 
         Digester digester = new Digester( reader );
-        digester.setClassLoader( classLoader );
+        // the ClassLoader adapter is no needed anymore
+        digester.setClassLoader( classLoader.getAdaptedClassLoader() );
         digester.setRules( rules );
         digester.setSubstitutor( substitutor );
         digester.registerAll( entityValidator );

Modified: commons/proper/digester/trunk/src/main/java/org/apache/commons/digester3/binder/ObjectCreateBuilder.java
URL: http://svn.apache.org/viewvc/commons/proper/digester/trunk/src/main/java/org/apache/commons/digester3/binder/ObjectCreateBuilder.java?rev=1210678&r1=1210677&r2=1210678&view=diff
==============================================================================
--- commons/proper/digester/trunk/src/main/java/org/apache/commons/digester3/binder/ObjectCreateBuilder.java
(original)
+++ commons/proper/digester/trunk/src/main/java/org/apache/commons/digester3/binder/ObjectCreateBuilder.java
Mon Dec  5 22:27:50 2011
@@ -22,9 +22,6 @@ package org.apache.commons.digester3.bin
 import static java.lang.String.format;
 
 import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
 
 import org.apache.commons.digester3.ObjectCreateRule;
 
@@ -36,20 +33,7 @@ import org.apache.commons.digester3.Obje
 public final class ObjectCreateBuilder
     extends AbstractBackToLinkedRuleBuilder<ObjectCreateRule>
 {
-    private static final Map<String, Class<?>> PRIMITIVE_TYPES;
-    static
-    {
-        HashMap<String, Class<?>> primitiveTypes = new HashMap<String, Class<?>>();
-        primitiveTypes.put("boolean", boolean.class);
-        primitiveTypes.put("byte", byte.class);
-        primitiveTypes.put("short", short.class);
-        primitiveTypes.put("int", int.class);
-        primitiveTypes.put("char", char.class);
-        primitiveTypes.put("long", long.class);
-        primitiveTypes.put("float", float.class);
-        primitiveTypes.put("double", double.class);
-        PRIMITIVE_TYPES = Collections.unmodifiableMap(primitiveTypes);
-    }
+
 
     private final ClassLoader classLoader;
 
@@ -151,11 +135,6 @@ public final class ObjectCreateBuilder
         Class<?>[] paramTypes = new Class<?>[paramTypeNames.length];
         for ( int i = 0; i < paramTypeNames.length; i++ )
         {
-            if ( PRIMITIVE_TYPES.containsKey( paramTypeNames[i] ) )
-            {
-                paramTypes[i] = PRIMITIVE_TYPES.get( paramTypeNames[i] );
-                continue;
-            }
             try
             {
                 paramTypes[i] = classLoader.loadClass( paramTypeNames[i] );

Modified: commons/proper/digester/trunk/src/test/resources/org/apache/commons/digester3/xmlrules/constructor-testrules.xml
URL: http://svn.apache.org/viewvc/commons/proper/digester/trunk/src/test/resources/org/apache/commons/digester3/xmlrules/constructor-testrules.xml?rev=1210678&r1=1210677&r2=1210678&view=diff
==============================================================================
--- commons/proper/digester/trunk/src/test/resources/org/apache/commons/digester3/xmlrules/constructor-testrules.xml
(original)
+++ commons/proper/digester/trunk/src/test/resources/org/apache/commons/digester3/xmlrules/constructor-testrules.xml
Mon Dec  5 22:27:50 2011
@@ -19,7 +19,7 @@
 <digester-rules>
   <pattern value="toplevel/bean">
     <object-create-rule classname="org.apache.commons.digester3.TestBean"
-      paramtypes="java.lang.Boolean,java.lang.Double" params="true,0" />
+      paramtypes="boolean,double" params="true,0" />
     <call-param-rule paramnumber="0" attrname="boolean" />
     <call-param-rule paramnumber="1" attrname="double" />
   </pattern>



Mime
View raw message