Return-Path: Delivered-To: apmail-jakarta-commons-dev-archive@apache.org Received: (qmail 46560 invoked from network); 13 Apr 2003 01:58:23 -0000 Received: from exchange.sun.com (192.18.33.10) by daedalus.apache.org with SMTP; 13 Apr 2003 01:58:23 -0000 Received: (qmail 23526 invoked by uid 97); 13 Apr 2003 02:00:25 -0000 Delivered-To: qmlist-jakarta-archive-commons-dev@nagoya.betaversion.org Received: (qmail 23519 invoked from network); 13 Apr 2003 02:00:24 -0000 Received: from daedalus.apache.org (HELO apache.org) (208.185.179.12) by nagoya.betaversion.org with SMTP; 13 Apr 2003 02:00:24 -0000 Received: (qmail 46306 invoked by uid 500); 13 Apr 2003 01:58:21 -0000 Mailing-List: contact commons-dev-help@jakarta.apache.org; run by ezmlm Precedence: bulk List-Unsubscribe: List-Subscribe: List-Help: List-Post: List-Id: "Jakarta Commons Developers List" Reply-To: "Jakarta Commons Developers List" Delivered-To: mailing list commons-dev@jakarta.apache.org Received: (qmail 46295 invoked from network); 13 Apr 2003 01:58:21 -0000 Received: from web41507.mail.yahoo.com (66.218.93.90) by daedalus.apache.org with SMTP; 13 Apr 2003 01:58:21 -0000 Message-ID: <20030413015830.73680.qmail@web41507.mail.yahoo.com> Received: from [12.236.60.198] by web41507.mail.yahoo.com via HTTP; Sat, 12 Apr 2003 18:58:30 PDT Date: Sat, 12 Apr 2003 18:58:30 -0700 (PDT) From: Mohan Kishore Subject: Re: [Digester] problem calling methods with a primitive parameter To: Jakarta Commons Developers List In-Reply-To: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Spam-Rating: daedalus.apache.org 1.6.2 0/1000/N X-Spam-Rating: daedalus.apache.org 1.6.2 0/1000/N One question reg. CallMethodRule: why was the parameters changed from String[] to Object[]? I would find the following algo more initutive - any comments: String p = (String) parameters[i]; if (paramTypes.equals(String.class)) { paramValues[i] = p; } else if (paramTypes[i].isPrimitive()) { paramValues[i] = ConvertUtils.convert(p, paramTypes[i]); } else if (parameters[i] != null) { paramValues[i] = ConvertUtils.convert(p, paramTypes[i]); } else { paramValues[i] = null; } i.e. if String no conversion elseif is primitive value cannot be null, hence convert else is object, hence convert if not null btw, the subject line mentioned that the problem is related to a missing attribute in the XML file. From the code I understand that if the method takes in a single value from the attribute and that attribute is missing, then the method never gets called... Am i missing something here? --- robert burrell donkin wrote: > digester 1.4.1 should be backwards compatible with digester 1.3 so i'd say > that this sounds like a bug. i'm having trouble replicating the problem > exactly and i haven't been able to write a unit test for this case. > > could you give me more details about when the problem occurs including the > rules that you are using and details about the parameters that the method > takes. ideally, if you could create a simple test case that exhibits this > problem with generic classes which you would be willing to donate the the > apache software foundation, then so much the better. > > - robert > > On Friday, April 11, 2003, at 10:24 AM, xPosting 02 wrote: > > > hi, > > I've got a problem as I wanted to update digester 1.3 to 1.4.1 in one of > > our > > projects. > > > > I call a method with a primitive (boolean) parameter in a parse rule. if > > I > > don't specify an attribute for this parameter in XML, digster 1.3 > > converted > > the null value to false (boolean). digester 1.4.1 doesn't converts the > > null > > value to false (boolean) but tries to call the method with the null value. > > because the method expects a > > primitive boolean value java.lang.reflect.Method.invoke(Native Method) > > throws > > a NullPointerException. > > > > I think this different behavior between 1.3 and 1.4.1 is because of a > > difference in CallMethodRule.end() > > > > > > --- digester 1.4.1 --- > > // Construct the parameter values array we will need > > // We only do the conversion if the param value is a String and > > // the specified paramType is not String. > > Object paramValues[] = new Object[paramTypes.length]; > > for (int i = 0; i < paramTypes.length; i++) { > > if(parameters[i] instanceof String && > > !String.class.isAssignableFrom(paramTypes[i])) { > > > > paramValues[i] = > > ConvertUtils.convert((String) parameters[i], paramTypes[i] > > ); > > } else { > > paramValues[i] = parameters[i]; > > } > > } > > --- --- > > > > --- digester 1.3 --- > > // Construct the parameter values array we will need > > Object paramValues[] = new Object[paramTypes.length]; > > for (int i = 0; i < paramTypes.length; i++) { > > paramValues[i] = > > ConvertUtils.convert(parameters[i], paramTypes[i]); > > } > > --- --- > > > > is this behavior in 1.4.1 a bug or is it 'by design'. > > if 'by design' is there another solution than writing a method which > > expects > > a java.lang.Boolean parameter? > > > > joel > > > > > > -------------------------------------------- > > MySign AG, Switzerland > > Web: http://www.mysign.ch > > -------------------------------------------- > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org > > For additional commands, e-mail: commons-dev-help@jakarta.apache.org > > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org > For additional commands, e-mail: commons-dev-help@jakarta.apache.org > __________________________________________________ Do you Yahoo!? Yahoo! Tax Center - File online, calculators, forms, and more http://tax.yahoo.com --------------------------------------------------------------------- To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org For additional commands, e-mail: commons-dev-help@jakarta.apache.org