You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@santuario.apache.org by mu...@apache.org on 2011/12/02 15:35:02 UTC
svn commit: r1209511 -
/santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/utils/IdResolver.java
Author: mullan
Date: Fri Dec 2 14:35:02 2011
New Revision: 1209511
URL: http://svn.apache.org/viewvc?rev=1209511&view=rev
Log:
Tighten up the thread-safety: get/puts to element map are now done inside
synchronized blocks. Also, throw an exception if the same id is registered for
more than one element.
Modified:
santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/utils/IdResolver.java
Modified: santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/utils/IdResolver.java
URL: http://svn.apache.org/viewvc/santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/utils/IdResolver.java?rev=1209511&r1=1209510&r2=1209511&view=diff
==============================================================================
--- santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/utils/IdResolver.java (original)
+++ santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/utils/IdResolver.java Fri Dec 2 14:35:02 2011
@@ -57,15 +57,23 @@ public class IdResolver {
*/
public static void registerElementById(Element element, String idValue) {
Document doc = element.getOwnerDocument();
- Map<String, WeakReference<Element>> elementMap;
synchronized (docMap) {
- elementMap = docMap.get(doc);
+ Map<String, WeakReference<Element>> elementMap = docMap.get(doc);
if (elementMap == null) {
elementMap = new WeakHashMap<String, WeakReference<Element>>();
docMap.put(doc, elementMap);
+ elementMap.put(idValue, new WeakReference<Element>(element));
+ } else {
+ WeakReference<Element> ref = elementMap.get(idValue);
+ if (ref != null) {
+ if (!ref.get().equals(element)) {
+ throw new IllegalArgumentException("ID is already registered");
+ }
+ } else {
+ elementMap.put(idValue, new WeakReference<Element>(element));
+ }
}
}
- elementMap.put(idValue, new WeakReference<Element>(element));
}
/**
@@ -151,14 +159,13 @@ public class IdResolver {
if (log.isDebugEnabled()) {
log.debug("getElementByIdType() Search for ID " + id);
}
- Map<String, WeakReference<Element>> elementMap;
synchronized (docMap) {
- elementMap = docMap.get(doc);
- }
- if (elementMap != null) {
- WeakReference<Element> weakReference = (WeakReference<Element>) elementMap.get(id);
- if (weakReference != null) {
- return (Element) weakReference.get();
+ Map<String, WeakReference<Element>> elementMap = docMap.get(doc);
+ if (elementMap != null) {
+ WeakReference<Element> weakReference = elementMap.get(id);
+ if (weakReference != null) {
+ return weakReference.get();
+ }
}
}
return null;