struts-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Martin Gainty <mgai...@hotmail.com>
Subject RE: javax.servlet.ServletException: BeanUtils.populate
Date Sat, 27 Nov 2010 13:25:16 GMT

The day after Black Friday and most folks are still at the WalMart so I'll take a stab at
some testcases

private E createElementByConstructor() {
		try {
			Constructor<E>[] constrArray = (Constructor<E>[]) elementClass
					.getConstructors(); 
			Constructor<E> constructor = null;
			Class[] paramTypes = null;
 
			for (Constructor<E> constr : constrArray) {
				if (constructor == null) {
/*this is executed first which is fine */
					constructor = constr;
					paramTypes = constr.getParameterTypes();
/*constr ParameterType (Class) count (e.g. 0) is less than number of Classes stored in local
var paramTypes (e.g. 1) */
				} else if (constr.getParameterTypes().length < paramTypes.length) {
					constructor = constr;
					paramTypes = constr.getParameterTypes();
				}
			}/* Testcase  execution 1st pass Class is Class1 with 1 parameter named fu*/
Class=Class1 parameter=fu                    
Constructor is now Class1(fu)
paramTypes.length is now 1

/* Testcase execution 2nd pass Class is Class2 with 0 parameters*/
Class=Class2   0 parameters                      so                  constr.getParameterTypes().length()==0
< paramTypes 1
Constructor is now Class2();
paramTypes.length is now 0

/* Testcase execution 3rd pass Class is Class2 with 2 parameters parameter=fu and parameter=bar
*/
Class3  parameter fu, parameter bar    so constr.getParameterTypes().length()==2 < paramTypes
0            FAILS!!!!
assignments to variables of constructor and paramTypes are bypassed

Constructor is STILL Class2();

paramTypes.length is STILL 0



is this what you intend?
Martin 
______________________________________________ 
Verzicht und Vertraulichkeitanmerkung/Note de déni et de confidentialité
 
Diese Nachricht ist vertraulich. Sollten Sie nicht der vorgesehene Empfaenger sein, so bitten
wir hoeflich um eine Mitteilung. Jede unbefugte Weiterleitung oder Fertigung einer Kopie ist
unzulaessig. Diese Nachricht dient lediglich dem Austausch von Informationen und entfaltet
keine rechtliche Bindungswirkung. Aufgrund der leichten Manipulierbarkeit von E-Mails koennen
wir keine Haftung fuer den Inhalt uebernehmen.
Ce message est confidentiel et peut être privilégié. Si vous n'êtes pas le destinataire
prévu, nous te demandons avec bonté que pour satisfaire informez l'expéditeur. N'importe
quelle diffusion non autorisée ou la copie de ceci est interdite. Ce message sert à l'information
seulement et n'aura pas n'importe quel effet légalement obligatoire. Étant donné que les
email peuvent facilement être sujets à la manipulation, nous ne pouvons accepter aucune
responsabilité pour le contenu fourni.




> Date: Sat, 27 Nov 2010 18:26:11 +0900
> Subject: Re: javax.servlet.ServletException: BeanUtils.populate
> From: liying.cn.2010@gmail.com
> To: user@struts.apache.org
> 
> I have dug it out from my old project.
> 
> The code is not very beautiful, you can modify it if you wish,
> but please don't change the author information.
> 
> Here is the code:
> 
> ========================================
> 
> package com.ewsoft.common.utils;
> 
> import java.lang.reflect.Constructor;
> import java.util.ArrayList;
> import java.util.List;
> 
> /**
>  * A List class which can create items as need.<br />
>  * When method get(index) and add(index, element) is called,<br />
>  * and if there is no item in this index, item instances will be created
>  * automatically to avoid a NullPointerException.
>  *
>  * @author Li Ying(liying.cn.2010@gmail.com)
>  */
> public class AutoList<E extends Object> extends ArrayList<E> {
> 	private Class<E> elementClass;
> 
> 	public AutoList(final Class<E> elementClass) {
> 		super();
> 		this.elementClass = elementClass;
> 	}
> 
> 	private void ensureSize(final int size) {
> 		synchronized (this) {
> 			while (this.size() < size) {
> 				add(createNewElement());
> 			}
> 		}
> 	}
> 
> 	private E createElementByConstructor() {
> 		try {
> 			Constructor<E>[] constrArray = (Constructor<E>[]) elementClass
> 					.getConstructors();
> 
> 			Constructor<E> constructor = null;
> 			Class[] paramTypes = null;
> 
> 			for (Constructor<E> constr : constrArray) {
> 				if (constructor == null) {
> 					constructor = constr;
> 					paramTypes = constr.getParameterTypes();
> 				} else if (constr.getParameterTypes().length < paramTypes.length) {
> 					constructor = constr;
> 					paramTypes = constr.getParameterTypes();
> 				}
> 			}
> 
> 			List paramList = new ArrayList();
> 			for (int i = 0; i < paramTypes.length; i++) {
> 				paramList.add(null);
> 			}
> 
> 			return constructor.newInstance(paramList.toArray());
> 		} catch (Exception e) {
> 			return null;
> 		}
> 	}
> 
> 	private E createNewElement() {
> 		return createElementByConstructor();
> 	}
> 
> 	/*
> 	 * (non-Javadoc)
> 	 *
> 	 * @see java.util.ArrayList#get(int)
> 	 */
> 	@Override
> 	public final E get(final int index) {
> 		ensureSize(index + 1);
> 
> 		return super.get(index);
> 	}
> 
> 	/*
> 	 * (non-Javadoc)
> 	 *
> 	 * @see java.util.ArrayList#add(int, java.lang.Object)
> 	 */
> 	@Override
> 	public final void add(final int index, final E element) {
> 		ensureSize(index);
> 
> 		super.add(index, element);
> 	}
> }
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
> For additional commands, e-mail: user-help@struts.apache.org
> 
 		 	   		  
Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message