jakarta-cactus-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Erik Hatcher <li...@ehatchersolutions.com>
Subject Re: StrutsTestCase / Struts 1.1b2 / Cactus - ConcurrentModificationException
Date Thu, 19 Sep 2002 17:23:07 GMT
Are you using StrutsTestCase?  The bug was there and I built the latest 
from its CVS HEAD and the problem went away.

But, for the record - I *always* run <junit> with fork="true"  :))

	Erik


Nicholas Lesiecki wrote:
> Erik,
> 
> I encountered some odd threading behavior in Cactus as well. Got a question
> for you, are you running from Ant with fork=true?
> 
> Cheers,
> 
> Nick
> 
> 
>>-----Original Message-----
>>From: Erik Hatcher [mailto:lists@ehatchersolutions.com]
>>Sent: Friday, September 13, 2002 4:15 PM
>>To: cactus-user@jakarta.apache.org; deryl@acm.org
>>Subject: StrutsTestCase / Struts 1.1b2 / Cactus -
>>ConcurrentModificationException
>>
>>
>>Deryl or others that may have encountered this....
>>
>>I'm using Struts 1.1b2 and StrutsTestCase 1.1 for Servlet 2.3 spec.
>>
>>Trying to run a second test case I'm getting whats immediately below.
>>Any ideas on what is going wrong?  I'm fairly certain its not my test
>>case code or base test case additions to StrutsTestCase, but perhaps
>>some nasty interaction with StrutsTestCase and Struts?
>>
>>
>>15:27:09,353 ERROR [STDERR] java.util.ConcurrentModificationException
>>15:27:09,363 ERROR [STDERR]     at
>>java.util.HashMap$HashIterator.next(HashMap.j
>>ava:731)
>>15:27:09,363 ERROR [STDERR]     at
>>org.apache.catalina.util.Enumerator.nextEleme
>>nt(Enumerator.java:166)
>>15:27:09,373 ERROR [STDERR]     at
>>servletunit.struts.CactusStrutsTestCase.getAc
>>tionServlet(CactusStrutsTestCase.java:285)
>>15:27:09,373 ERROR [STDERR]     at
>>servletunit.struts.CactusStrutsTestCase.actio
>>nPerform(CactusStrutsTestCase.java:349)
>>15:27:09,383 ERROR [STDERR]     at
>>edu.darden.alumni.contactinfo.ContactInfoTest
>>.testSaveContactInfo(ContactInfoTest.java:17)
>>15:27:09,393 ERROR [STDERR]     at
>>java.lang.reflect.Method.invoke(Native Method
>>)
>>15:27:09,403 ERROR [STDERR]     at
>>org.apache.cactus.AbstractTestCase.runServerT
>>est(AbstractTestCase.java:332)
>>
>>My test case looks like this:
>>
>>public class ContactInfoTest extends StrutsFormTestCase {
>>     public void beginSaveContactInfo(WebRequest theRequest) {
>>         theRequest.setAuthentication(
>>                 new BasicAuthentication("alumni", "alumni"));
>>     }
>>     public void testSaveContactInfo() throws Exception {
>>         setRequestPathInfo("/alumni/updateContactInfo");
>>         ContactInfoForm form = new ContactInfoForm();
>>         form.reset();  // my ValidatorForm subclass forces this method
>>to exist
>>         addToParameters(form);
>>         actionPerform();
>>         verifyForward("success");
>>     }
>>
>>     public ContactInfoTest(String s) {
>>         super(s);
>>     }
>>}
>>
>>
>>And my base test case is below.  This could be considered a donation to
>>the StrutsTestCase project, actually, although it needs to be
>>generalized a bit more.  It adds the ability to just set up a form bean
>>rather than HTTP request parameters (and convert a bean to request
>>parameters under the covers).  One note: I have a BaseForm that all my
>>Struts forms extend from and I've hidden the original method (made it
>>final) and proxy that to the reset() method that all our forms are
>>required to implement (I've yet to need the request or mapping in a
>>reset method, so I took it away from implementers for now).
>>
>>
>>
>>package edu.darden.alumni.cactus;
>>
>>import servletunit.struts.CactusStrutsTestCase;
>>
>>import java.util.List;
>>import java.util.ArrayList;
>>import java.util.Map;
>>import java.util.HashMap;
>>import java.util.Iterator;
>>import java.lang.reflect.InvocationTargetException;
>>
>>import org.apache.commons.beanutils.PropertyUtils;
>>import org.apache.struts.action.ActionForm;
>>
>>abstract public class StrutsFormTestCase extends CactusStrutsTestCase {
>>     private static final List invisibleFields = new ArrayList();
>>     private static final List basicFields = new ArrayList();
>>
>>     static {
>>         invisibleFields.add("multipartRequestHandler");
>>         invisibleFields.add("resultValueMap");
>>         invisibleFields.add("class");
>>         invisibleFields.add("validatorResults");
>>         invisibleFields.add("servletWrapper");
>>
>>         basicFields.add("java.lang.Integer");
>>         basicFields.add("java.lang.String");
>>         basicFields.add("java.lang.Boolean");
>>     }
>>
>>     private final Map getBeanMap(Object bean, String prefix) throws
>>IllegalAccessException, InvocationTargetException, NoSuchMethodException
>>{
>>         String thisPrefix = prefix == null ? "" : prefix + ".";
>>         Map map = new HashMap();
>>         Map flatFields = PropertyUtils.describe(bean);
>>         Iterator iterator = flatFields.keySet().iterator();
>>         while (iterator.hasNext()) {
>>             String key = (String) iterator.next();
>>             if (invisibleFields.contains(key)) {
>>                 continue;
>>             }
>>
>>             Object value = flatFields.get(key);
>>
>>             if ((value != null) && !
>>basicFields.contains(value.getClass().getName())) {
>>                 map.putAll(getBeanMap(value, thisPrefix + key));
>>             }
>>             else {
>>                 map.put(thisPrefix + key, value);
>>             }
>>         }
>>         return map;
>>     }
>>
>>     /**
>>      * @todo Add checks for boolean/Boolean and set to "on" or omit if
>>false
>>      */
>>     private final void addToParameters(Map map) {
>>         Iterator iterator = map.keySet().iterator();
>>         while (iterator.hasNext()) {
>>             String key = (String) iterator.next();
>>             Object value = map.get(key);
>>             String paramValue = "";
>>             if (value != null) {
>>                 paramValue = value.toString();
>>             }
>>             System.out.println("key = " + key + " value = " +
>>paramValue);
>>             addRequestParameter(key, paramValue);
>>         }
>>     }
>>
>>     protected final void addToParameters(ActionForm form) throws
>>Exception {
>>         addToParameters(getBeanMap(form, null));
>>     }
>>
>>     public StrutsFormTestCase(String name) {
>>         super(name);
>>     }
>>}
>>
>>
>>
>>
>>
>>--
>>To unsubscribe, e-mail:
> 
> <mailto:cactus-user-unsubscribe@jakarta.apache.org>
> For additional commands, e-mail:
> <mailto:cactus-user-help@jakarta.apache.org>
> 
> 
> --
> To unsubscribe, e-mail:   <mailto:cactus-user-unsubscribe@jakarta.apache.org>
> For additional commands, e-mail: <mailto:cactus-user-help@jakarta.apache.org>
> 
> 
> 


--
To unsubscribe, e-mail:   <mailto:cactus-user-unsubscribe@jakarta.apache.org>
For additional commands, e-mail: <mailto:cactus-user-help@jakarta.apache.org>


Mime
View raw message