You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by si...@apache.org on 2011/02/09 22:10:20 UTC
svn commit: r1069107 - in
/commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3:
CallMethodRule.java RulesBinderImpl.java rulesbinder/CallMethodBuilder.java
Author: simonetripodi
Date: Wed Feb 9 21:10:19 2011
New Revision: 1069107
URL: http://svn.apache.org/viewvc?rev=1069107&view=rev
Log:
added a method to define callMethod() argument types by a string array
changed the rules binder initialization to a synchronized lazy loading, so it can use the classloader to resolve the types
Modified:
commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/CallMethodRule.java
commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/RulesBinderImpl.java
commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/rulesbinder/CallMethodBuilder.java
Modified: commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/CallMethodRule.java
URL: http://svn.apache.org/viewvc/commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/CallMethodRule.java?rev=1069107&r1=1069106&r2=1069107&view=diff
==============================================================================
--- commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/CallMethodRule.java (original)
+++ commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/CallMethodRule.java Wed Feb 9 21:10:19 2011
@@ -175,7 +175,7 @@ public class CallMethodRule extends Rule
*/
@Override
public void body(String namespace, String name, String text) throws Exception {
- if (this.paramTypes.length == 0) {
+ if (this.paramTypes.length == 1) {
this.bodyText = text.trim();
}
}
Modified: commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/RulesBinderImpl.java
URL: http://svn.apache.org/viewvc/commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/RulesBinderImpl.java?rev=1069107&r1=1069106&r2=1069107&view=diff
==============================================================================
--- commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/RulesBinderImpl.java (original)
+++ commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/RulesBinderImpl.java Wed Feb 9 21:10:19 2011
@@ -18,6 +18,7 @@
package org.apache.commons.digester3;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
@@ -57,6 +58,12 @@ final class RulesBinderImpl implements R
*/
private final Collection<RegisteredProvider> providers = new ArrayList<RegisteredProvider>();
+ private final ClassLoader classLoader;
+
+ public RulesBinderImpl(final ClassLoader classLoader) {
+ this.classLoader = classLoader;
+ }
+
/**
* {@inheritDoc}
*/
@@ -661,8 +668,31 @@ final class RulesBinderImpl implements R
return this;
}
+ public CallMethodBuilder withParamTypes(String... paramTypeNames) {
+ if (paramTypeNames != null) {
+ this.paramTypes = new Class[paramTypeNames.length];
+ for (int i = 0; i < paramTypeNames.length; i++) {
+ try {
+ this.paramTypes[i] = classLoader.loadClass(paramTypeNames[i]);
+ } catch (ClassNotFoundException e) {
+ // use the digester log
+ addError("{forPattern(\"%s\").callMethod().withParamTypes(%s)} class %s cannot be load",
+ keyPattern,
+ Arrays.toString(paramTypeNames),
+ paramTypeNames[i]);
+ }
+ }
+ }
+ return this;
+ }
+
public CallMethodBuilder withParamTypes(/* @Nullable */Class<?>... paramTypes) {
this.paramTypes = paramTypes;
+
+ if (paramTypes != null) {
+ this.paramCount = paramTypes.length;
+ }
+
return this;
}
Modified: commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/rulesbinder/CallMethodBuilder.java
URL: http://svn.apache.org/viewvc/commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/rulesbinder/CallMethodBuilder.java?rev=1069107&r1=1069106&r2=1069107&view=diff
==============================================================================
--- commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/rulesbinder/CallMethodBuilder.java (original)
+++ commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/rulesbinder/CallMethodBuilder.java Wed Feb 9 21:10:19 2011
@@ -36,6 +36,17 @@ public interface CallMethodBuilder exten
CallMethodBuilder withTargetOffset(int targetOffset);
/**
+ * Sets the Java classe names that represent the parameter types of the method arguments.
+ *
+ * If you wish to use a primitive type, specify the corresonding Java wrapper class instead,
+ * such as {@code java.lang.Boolean.TYPE} for a {@code boolean} parameter.
+ *
+ * @param The Java classe names that represent the parameter types of the method arguments
+ * @return this builder instance
+ */
+ CallMethodBuilder withParamTypes(String...paramTypeNames);
+
+ /**
* Sets the Java classes that represent the parameter types of the method arguments.
*
* If you wish to use a primitive type, specify the corresonding Java wrapper class instead,