56 lines
2.2 KiB
Diff
56 lines
2.2 KiB
Diff
Date: Fri, 9 Jun 2023 10:18:10 +0800
|
|
Subject: Cache dom in xml transform
|
|
|
|
---
|
|
.../xalan/internal/xsltc/trax/TransformerImpl.java | 12 +++++++++++-
|
|
1 file changed, 11 insertions(+), 1 deletion(-)
|
|
|
|
diff --git a/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/trax/TransformerImpl.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/trax/TransformerImpl.java
|
|
index 8e783cee0..3d143d461 100644
|
|
--- a/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/trax/TransformerImpl.java
|
|
+++ b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/trax/TransformerImpl.java
|
|
@@ -56,6 +56,7 @@ import java.util.ArrayList;
|
|
import java.util.Enumeration;
|
|
import java.util.HashMap;
|
|
import java.util.Map;
|
|
+import java.util.concurrent.ConcurrentHashMap;
|
|
import java.util.Properties;
|
|
import java.util.StringTokenizer;
|
|
import javax.xml.XMLConstants;
|
|
@@ -151,6 +152,11 @@ public final class TransformerImpl extends Transformer
|
|
*/
|
|
private DOM _dom = null;
|
|
|
|
+ /**
|
|
+ * A hashMap for DOMS.
|
|
+ */
|
|
+ private ConcurrentHashMap<String, DOM> _domMaps = new ConcurrentHashMap();
|
|
+
|
|
/**
|
|
* Number of indent spaces to add when indentation is on.
|
|
*/
|
|
@@ -530,8 +536,11 @@ public final class TransformerImpl extends Transformer
|
|
private DOM getDOM(Source source) throws TransformerException {
|
|
try {
|
|
DOM dom;
|
|
-
|
|
if (source != null) {
|
|
+ String ssId = source.getSystemId();
|
|
+ if ((ssId != null) && (_domMaps.containsKey(ssId))) {
|
|
+ return _domMaps.get(ssId);
|
|
+ }
|
|
DTMWSFilter wsfilter;
|
|
if (_translet != null && _translet instanceof StripFilter) {
|
|
wsfilter = new DOMWSFilter(_translet);
|
|
@@ -549,6 +558,7 @@ public final class TransformerImpl extends Transformer
|
|
}
|
|
dom = (DOM)_dtmManager.getDTM(source, false, wsfilter, true,
|
|
false, false, 0, hasIdCall);
|
|
+ if ((ssId != null) && (dom != null)) _domMaps.put(ssId, dom);
|
|
} else if (_dom != null) {
|
|
dom = _dom;
|
|
_dom = null; // use only once, so reset to 'null'
|
|
--
|
|
2.22.0
|
|
|