Author: mszefler
Date: Wed Dec 13 16:10:48 2006
New Revision: 486900
URL: http://svn.apache.org/viewvc?view=rev&rev=486900
Log:
Fix dangerous use of unsynchronzied cache.
Modified:
incubator/ode/trunk/jbi/src/main/java/org/apache/ode/jbi/msgmap/BaseXmlMapper.java
Modified:
incubator/ode/trunk/jbi/src/main/java/org/apache/ode/jbi/msgmap/BaseXmlMapper.java
URL:
http://svn.apache.org/viewvc/incubator/ode/trunk/jbi/src/main/java/org/apache/ode/jbi/msgmap/BaseXmlMapper.java?view=diff&rev=486900&r1=486899&r2=486900
==============================================================================
---
incubator/ode/trunk/jbi/src/main/java/org/apache/ode/jbi/msgmap/BaseXmlMapper.java
(original)
+++
incubator/ode/trunk/jbi/src/main/java/org/apache/ode/jbi/msgmap/BaseXmlMapper.java
Wed Dec 13 16:10:48 2006
@@ -19,6 +19,8 @@
package org.apache.ode.jbi.msgmap;
+import java.util.Collections;
+import java.util.Map;
import java.util.WeakHashMap;
import javax.xml.parsers.DocumentBuilderFactory;
@@ -43,7 +45,7 @@
private TransformerFactory _transformerFactory;
/** Cache of the parsed messages. */
- private static WeakHashMap<Source, Document> __parsed = new
WeakHashMap<Source, Document>();
+ private static Map<Source, Document> __parsed =
Collections.synchronizedMap(new WeakHashMap<Source, Document>());
protected BaseXmlMapper() {
_transformerFactory = TransformerFactory.newInstance();
@@ -51,6 +53,9 @@
}
protected Element parse(Source content) throws MessageTranslationException
{
+
+ // Check for the message in the cache. note that we are using a
synchronized map here,
+ // so that we are thread safe, although it is possible for the parse
to happen twice.
Document parsed = __parsed.get(content);
if (parsed != null)
return parsed.getDocumentElement();
@@ -68,6 +73,7 @@
DOMResult domresult = new DOMResult();
txer.transform(content, domresult);
parsed = (Document) domresult.getNode();
+ // Again, synchronized map...
__parsed.put(content, parsed);
return parsed.getDocumentElement();
} catch (TransformerException e) {