diff --git a/core/src/main/java/org/apache/commons/jelly/impl/TagScript.java b/core/src/main/java/org/apache/commons/jelly/impl/TagScript.java index 5cbf75ed..ffc8b8cc 100644 --- a/core/src/main/java/org/apache/commons/jelly/impl/TagScript.java +++ b/core/src/main/java/org/apache/commons/jelly/impl/TagScript.java @@ -64,6 +64,8 @@ public class TagScript implements Script { /** The Log to which logging calls will be made. */ private static final Log log = LogFactory.getLog(TagScript.class); + /** Used to serialize access to {@link org.apache.commons.beanutils.WrapDynaClass#CLASSLOADER_CACHE}, which is not thread-safe */ + private static final Object lock = new Object(); /** The attribute expressions that are created */ protected Map attributes = new HashMap(); @@ -239,7 +241,11 @@ public void run(JellyContext context, XMLOutput output) throws JellyTagException } else { // treat the tag as a bean - DynaBean dynaBean = new ConvertingWrapDynaBean( tag ); + DynaBean dynaBean; + // Work around BEANUTILS-509 + synchronized (lock) { + dynaBean = new ConvertingWrapDynaBean(tag); + } for (Iterator iter = attributes.entrySet().iterator(); iter.hasNext();) { Map.Entry entry = (Map.Entry) iter.next(); String name = (String) entry.getKey();