Revert "Switching to use CXF's StaxUtils for DOM parsing. Still having problems with DTD parsing."
This reverts commit e8f2119c3e47276a155b38e0524863c538982d87.
git-svn-id: https://svn.apache.org/repos/asf/santuario/xml-security-java/trunk@1859080 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/src/main/java/org/apache/xml/security/c14n/Canonicalizer.java b/src/main/java/org/apache/xml/security/c14n/Canonicalizer.java
index a270fa7..a0397e0 100644
--- a/src/main/java/org/apache/xml/security/c14n/Canonicalizer.java
+++ b/src/main/java/org/apache/xml/security/c14n/Canonicalizer.java
@@ -26,8 +26,6 @@
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
-import javax.xml.stream.XMLStreamException;
-
import org.apache.xml.security.c14n.implementations.Canonicalizer11_OmitComments;
import org.apache.xml.security.c14n.implementations.Canonicalizer11_WithComments;
import org.apache.xml.security.c14n.implementations.Canonicalizer20010315ExclOmitComments;
@@ -248,11 +246,10 @@
* @throws java.io.IOException
* @throws javax.xml.parsers.ParserConfigurationException
* @throws org.xml.sax.SAXException
- * @throws XMLStreamException
*/
public byte[] canonicalize(byte[] inputBytes)
throws javax.xml.parsers.ParserConfigurationException,
- java.io.IOException, org.xml.sax.SAXException, CanonicalizationException, XMLStreamException {
+ java.io.IOException, org.xml.sax.SAXException, CanonicalizationException {
Document document = null;
try (InputStream bais = new ByteArrayInputStream(inputBytes)) {
InputSource in = new InputSource(bais);
diff --git a/src/main/java/org/apache/xml/security/c14n/CanonicalizerSpi.java b/src/main/java/org/apache/xml/security/c14n/CanonicalizerSpi.java
index 9734bb5..be193eb 100644
--- a/src/main/java/org/apache/xml/security/c14n/CanonicalizerSpi.java
+++ b/src/main/java/org/apache/xml/security/c14n/CanonicalizerSpi.java
@@ -22,8 +22,6 @@
import java.io.OutputStream;
import java.util.Set;
-import javax.xml.stream.XMLStreamException;
-
import org.apache.xml.security.utils.XMLUtils;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
@@ -50,11 +48,10 @@
* @throws java.io.IOException
* @throws javax.xml.parsers.ParserConfigurationException
* @throws org.xml.sax.SAXException
- * @throws XMLStreamException
*/
public byte[] engineCanonicalize(byte[] inputBytes)
throws javax.xml.parsers.ParserConfigurationException, java.io.IOException,
- org.xml.sax.SAXException, CanonicalizationException, XMLStreamException {
+ org.xml.sax.SAXException, CanonicalizationException {
Document document = null;
try (java.io.InputStream bais = new ByteArrayInputStream(inputBytes)) {
diff --git a/src/main/java/org/apache/xml/security/c14n/implementations/Canonicalizer20010315.java b/src/main/java/org/apache/xml/security/c14n/implementations/Canonicalizer20010315.java
index a9ccee0..506b098 100644
--- a/src/main/java/org/apache/xml/security/c14n/implementations/Canonicalizer20010315.java
+++ b/src/main/java/org/apache/xml/security/c14n/implementations/Canonicalizer20010315.java
@@ -26,7 +26,6 @@
import java.util.TreeSet;
import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.stream.XMLStreamException;
import org.apache.xml.security.c14n.CanonicalizationException;
import org.apache.xml.security.c14n.helper.C14nHelper;
@@ -297,7 +296,7 @@
}
protected void circumventBugIfNeeded(XMLSignatureInput input)
- throws CanonicalizationException, ParserConfigurationException, IOException, SAXException, XMLStreamException {
+ throws CanonicalizationException, ParserConfigurationException, IOException, SAXException {
if (!input.isNeedsToBeExpanded()) {
return;
}
diff --git a/src/main/java/org/apache/xml/security/c14n/implementations/Canonicalizer20010315Excl.java b/src/main/java/org/apache/xml/security/c14n/implementations/Canonicalizer20010315Excl.java
index ef34f68..fda565e 100644
--- a/src/main/java/org/apache/xml/security/c14n/implementations/Canonicalizer20010315Excl.java
+++ b/src/main/java/org/apache/xml/security/c14n/implementations/Canonicalizer20010315Excl.java
@@ -25,7 +25,6 @@
import java.util.SortedSet;
import java.util.TreeSet;
import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.stream.XMLStreamException;
import org.apache.xml.security.c14n.CanonicalizationException;
import org.apache.xml.security.c14n.helper.C14nHelper;
@@ -338,7 +337,7 @@
protected void circumventBugIfNeeded(XMLSignatureInput input)
throws CanonicalizationException, ParserConfigurationException,
- IOException, SAXException, XMLStreamException {
+ IOException, SAXException {
if (!input.isNeedsToBeExpanded() || inclusiveNSSet.isEmpty()) {
return;
}
diff --git a/src/main/java/org/apache/xml/security/c14n/implementations/CanonicalizerBase.java b/src/main/java/org/apache/xml/security/c14n/implementations/CanonicalizerBase.java
index 9c0f871..11e0cac 100644
--- a/src/main/java/org/apache/xml/security/c14n/implementations/CanonicalizerBase.java
+++ b/src/main/java/org/apache/xml/security/c14n/implementations/CanonicalizerBase.java
@@ -31,7 +31,6 @@
import java.util.Set;
import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.stream.XMLStreamException;
import org.apache.xml.security.c14n.CanonicalizationException;
import org.apache.xml.security.c14n.CanonicalizerSpi;
@@ -161,7 +160,11 @@
}
}
return null;
- } catch (ParserConfigurationException | IOException | SAXException | XMLStreamException ex) {
+ } catch (ParserConfigurationException ex) {
+ throw new CanonicalizationException(ex);
+ } catch (IOException ex) {
+ throw new CanonicalizationException(ex);
+ } catch (SAXException ex) {
throw new CanonicalizationException(ex);
}
}
@@ -649,7 +652,7 @@
throws CanonicalizationException, DOMException, IOException;
abstract void circumventBugIfNeeded(XMLSignatureInput input)
- throws CanonicalizationException, ParserConfigurationException, IOException, SAXException, XMLStreamException;
+ throws CanonicalizationException, ParserConfigurationException, IOException, SAXException;
/**
* Outputs an Attribute to the internal Writer.
diff --git a/src/main/java/org/apache/xml/security/encryption/DocumentSerializer.java b/src/main/java/org/apache/xml/security/encryption/DocumentSerializer.java
index 4c17e8b..a35ff71 100644
--- a/src/main/java/org/apache/xml/security/encryption/DocumentSerializer.java
+++ b/src/main/java/org/apache/xml/security/encryption/DocumentSerializer.java
@@ -24,7 +24,6 @@
import java.io.StringReader;
import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.stream.XMLStreamException;
import org.apache.xml.security.utils.XMLUtils;
import org.w3c.dom.Document;
@@ -90,8 +89,12 @@
child = fragElt.getFirstChild();
}
return result;
- } catch (ParserConfigurationException | IOException | SAXException | XMLStreamException ex) {
- throw new XMLEncryptionException(ex);
+ } catch (SAXException se) {
+ throw new XMLEncryptionException(se);
+ } catch (ParserConfigurationException pce) {
+ throw new XMLEncryptionException(pce);
+ } catch (IOException ioe) {
+ throw new XMLEncryptionException(ioe);
}
}
diff --git a/src/main/java/org/apache/xml/security/keys/keyresolver/KeyResolverSpi.java b/src/main/java/org/apache/xml/security/keys/keyresolver/KeyResolverSpi.java
index f55243c..f5456a6 100644
--- a/src/main/java/org/apache/xml/security/keys/keyresolver/KeyResolverSpi.java
+++ b/src/main/java/org/apache/xml/security/keys/keyresolver/KeyResolverSpi.java
@@ -28,7 +28,6 @@
import javax.crypto.SecretKey;
import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.stream.XMLStreamException;
import org.apache.xml.security.keys.storage.StorageResolver;
import org.apache.xml.security.utils.XMLUtils;
@@ -274,7 +273,11 @@
try (InputStream is = new ByteArrayInputStream(bytes)) {
Document doc = XMLUtils.read(is, secureValidation);
return doc.getDocumentElement();
- } catch (ParserConfigurationException | IOException | SAXException | XMLStreamException ex) {
+ } catch (SAXException ex) {
+ throw new KeyResolverException(ex);
+ } catch (IOException ex) {
+ throw new KeyResolverException(ex);
+ } catch (ParserConfigurationException ex) {
throw new KeyResolverException(ex);
}
}
diff --git a/src/main/java/org/apache/xml/security/keys/keyresolver/implementations/RetrievalMethodResolver.java b/src/main/java/org/apache/xml/security/keys/keyresolver/implementations/RetrievalMethodResolver.java
index 7f557f9..611e494 100644
--- a/src/main/java/org/apache/xml/security/keys/keyresolver/implementations/RetrievalMethodResolver.java
+++ b/src/main/java/org/apache/xml/security/keys/keyresolver/implementations/RetrievalMethodResolver.java
@@ -32,7 +32,6 @@
import java.util.Set;
import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.stream.XMLStreamException;
import org.apache.xml.security.c14n.CanonicalizationException;
import org.apache.xml.security.exceptions.XMLSecurityException;
@@ -127,9 +126,7 @@
LOG.debug("ParserConfigurationException", e);
} catch (SAXException e) {
LOG.debug("SAXException", e);
- } catch (XMLStreamException e) {
- LOG.debug("XMLStreamException", e);
- }
+ }
return null;
}
@@ -187,8 +184,6 @@
LOG.debug("ParserConfigurationException", e);
} catch (SAXException e) {
LOG.debug("SAXException", e);
- } catch (XMLStreamException e) {
- LOG.debug("XMLStreamException", e);
}
return null;
}
@@ -239,7 +234,7 @@
private static Element obtainReferenceElement(XMLSignatureInput resource, boolean secureValidation)
throws CanonicalizationException, ParserConfigurationException,
- IOException, SAXException, KeyResolverException, XMLStreamException {
+ IOException, SAXException, KeyResolverException {
Element e;
if (resource.isElement()){
e = (Element) resource.getSubNode();
diff --git a/src/main/java/org/apache/xml/security/signature/Manifest.java b/src/main/java/org/apache/xml/security/signature/Manifest.java
index a3b4422..aaac2d5 100644
--- a/src/main/java/org/apache/xml/security/signature/Manifest.java
+++ b/src/main/java/org/apache/xml/security/signature/Manifest.java
@@ -30,7 +30,6 @@
import java.util.Set;
import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.stream.XMLStreamException;
import org.apache.xml.security.c14n.CanonicalizationException;
import org.apache.xml.security.c14n.InvalidCanonicalizerException;
@@ -400,7 +399,11 @@
}
manifestReferences = referencedManifest.getVerificationResults();
- } catch (ParserConfigurationException | IOException | SAXException | XMLStreamException ex) {
+ } catch (IOException ex) {
+ throw new ReferenceNotInitializedException(ex);
+ } catch (ParserConfigurationException ex) {
+ throw new ReferenceNotInitializedException(ex);
+ } catch (SAXException ex) {
throw new ReferenceNotInitializedException(ex);
}
}
diff --git a/src/main/java/org/apache/xml/security/signature/SignedInfo.java b/src/main/java/org/apache/xml/security/signature/SignedInfo.java
index 6218bb8..918f90b 100644
--- a/src/main/java/org/apache/xml/security/signature/SignedInfo.java
+++ b/src/main/java/org/apache/xml/security/signature/SignedInfo.java
@@ -26,7 +26,6 @@
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.stream.XMLStreamException;
import org.apache.xml.security.algorithms.SignatureAlgorithm;
import org.apache.xml.security.c14n.CanonicalizationException;
@@ -219,7 +218,11 @@
element.getParentNode().replaceChild(imported, element);
return (Element) imported;
}
- } catch (ParserConfigurationException | IOException | SAXException | XMLStreamException ex) {
+ } catch (ParserConfigurationException ex) {
+ throw new XMLSecurityException(ex);
+ } catch (IOException ex) {
+ throw new XMLSecurityException(ex);
+ } catch (SAXException ex) {
throw new XMLSecurityException(ex);
}
}
diff --git a/src/main/java/org/apache/xml/security/signature/XMLSignatureInput.java b/src/main/java/org/apache/xml/security/signature/XMLSignatureInput.java
index b8ba860..e8f82fa 100644
--- a/src/main/java/org/apache/xml/security/signature/XMLSignatureInput.java
+++ b/src/main/java/org/apache/xml/security/signature/XMLSignatureInput.java
@@ -30,7 +30,6 @@
import java.util.Set;
import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.stream.XMLStreamException;
import org.apache.xml.security.c14n.CanonicalizationException;
import org.apache.xml.security.c14n.implementations.Canonicalizer11_OmitComments;
@@ -192,10 +191,9 @@
* @throws IOException
* @throws ParserConfigurationException
* @throws CanonicalizationException
- * @throws XMLStreamException
*/
public Set<Node> getNodeSet() throws CanonicalizationException, ParserConfigurationException,
- IOException, SAXException, XMLStreamException {
+ IOException, SAXException {
return getNodeSet(false);
}
@@ -217,10 +215,9 @@
* @throws IOException
* @throws ParserConfigurationException
* @throws CanonicalizationException
- * @throws XMLStreamException
*/
public Set<Node> getNodeSet(boolean circumvent) throws ParserConfigurationException,
- IOException, SAXException, CanonicalizationException, XMLStreamException {
+ IOException, SAXException, CanonicalizationException {
if (inputNodeSet != null) {
return inputNodeSet;
}
@@ -571,7 +568,7 @@
}
void convertToNodes() throws CanonicalizationException,
- ParserConfigurationException, IOException, SAXException, XMLStreamException {
+ ParserConfigurationException, IOException, SAXException {
// select all nodes, also the comments.
try {
Document doc = XMLUtils.read(this.getOctetStream(), secureValidation);
diff --git a/src/main/java/org/apache/xml/security/staxutils/AbstractDOMStreamReader.java b/src/main/java/org/apache/xml/security/staxutils/AbstractDOMStreamReader.java
deleted file mode 100644
index 9484c89..0000000
--- a/src/main/java/org/apache/xml/security/staxutils/AbstractDOMStreamReader.java
+++ /dev/null
@@ -1,361 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.xml.security.staxutils;
-
-import java.util.Collections;
-import java.util.List;
-
-import javax.xml.stream.Location;
-import javax.xml.stream.XMLStreamConstants;
-import javax.xml.stream.XMLStreamException;
-import javax.xml.stream.XMLStreamReader;
-
-
-/**
- * Abstract logic for creating XMLStreamReader from DOM documents. Its works
- * using adapters for Element, Node and Attribute.
- */
-public abstract class AbstractDOMStreamReader<T, I> implements XMLStreamReader {
- protected int currentEvent = XMLStreamConstants.START_DOCUMENT;
-
- private FastStack<ElementFrame<T, I>> frames = new FastStack<>();
-
- private ElementFrame<T, I> frame;
-
-
- /**
- *
- */
- public static class ElementFrame<T, I> {
- T element;
- I currentChild;
-
- boolean started;
- boolean ended;
-
- List<String> uris;
- List<String> prefixes;
- List<Object> attributes;
-
- final ElementFrame<T, I> parent;
-
- public ElementFrame(T element, ElementFrame<T, I> parent) {
- this.element = element;
- this.parent = parent;
- }
-
- public ElementFrame(T element, ElementFrame<T, I> parent, I ch) {
- this.element = element;
- this.parent = parent;
- this.currentChild = ch;
- }
- public ElementFrame(T doc, boolean s) {
- this.element = doc;
- parent = null;
- started = s;
- attributes = Collections.emptyList();
- prefixes = Collections.emptyList();
- uris = Collections.emptyList();
- }
- public ElementFrame(T doc) {
- this(doc, true);
- }
- public T getElement() {
- return element;
- }
-
- public I getCurrentChild() {
- return currentChild;
- }
- public void setCurrentChild(I o) {
- currentChild = o;
- }
- public boolean isDocument() {
- return false;
- }
- public boolean isDocumentFragment() {
- return false;
- }
- }
-
- /**
- * @param frame
- */
- public AbstractDOMStreamReader(ElementFrame<T, I> frame) {
- this.frame = frame;
- frames.push(this.frame);
- }
-
- protected ElementFrame<T, I> getCurrentFrame() {
- return frame;
- }
-
- /*
- * (non-Javadoc)
- *
- * @see javax.xml.stream.XMLStreamReader#getProperty(java.lang.String)
- */
- public Object getProperty(String key) throws IllegalArgumentException {
- return null;
- }
-
- /*
- * (non-Javadoc)
- *
- * @see javax.xml.stream.XMLStreamReader#next()
- */
- public int next() throws XMLStreamException {
- if (frame.ended) {
- frames.pop();
- if (!frames.empty()) {
- frame = frames.peek();
- } else {
- currentEvent = END_DOCUMENT;
- return currentEvent;
- }
- }
-
- if (!frame.started) {
- frame.started = true;
- currentEvent = frame.isDocument() ? START_DOCUMENT : START_ELEMENT;
- } else if (hasMoreChildren()) {
- currentEvent = nextChild();
-
- if (currentEvent == START_ELEMENT) {
- ElementFrame<T, I> newFrame = getChildFrame();
- newFrame.started = true;
- frame = newFrame;
- frames.push(this.frame);
- currentEvent = START_ELEMENT;
-
- newFrame(newFrame);
- }
- } else {
- frame.ended = true;
- if (frame.isDocument()) {
- currentEvent = END_DOCUMENT;
- } else {
- currentEvent = END_ELEMENT;
- endElement();
- }
- }
- return currentEvent;
- }
-
- protected void newFrame(ElementFrame<T, I> newFrame) {
- }
-
- protected void endElement() {
- }
-
- protected abstract boolean hasMoreChildren();
- protected abstract int nextChild();
- protected abstract ElementFrame<T, I> getChildFrame();
-
- /*
- * (non-Javadoc)
- *
- * @see javax.xml.stream.XMLStreamReader#require(int, java.lang.String,
- * java.lang.String)
- */
- public void require(int arg0, String arg1, String arg2) throws XMLStreamException {
- throw new UnsupportedOperationException();
- }
-
- /*
- * (non-Javadoc)
- *
- * @see javax.xml.stream.XMLStreamReader#getElementText()
- */
- public abstract String getElementText() throws XMLStreamException;
-
- public void consumeFrame() {
- frame.started = true;
- frame.ended = true;
- if (frame.isDocument()) {
- currentEvent = END_DOCUMENT;
- } else {
- currentEvent = END_ELEMENT;
- endElement();
- }
- }
-
- /*
- * (non-Javadoc)
- *
- * @see javax.xml.stream.XMLStreamReader#nextTag()
- */
- public int nextTag() throws XMLStreamException {
- while (hasNext()) {
- if (START_ELEMENT == next()) {
- return START_ELEMENT;
- }
- }
-
- return currentEvent;
- }
-
- /*
- * (non-Javadoc)
- *
- * @see javax.xml.stream.XMLStreamReader#hasNext()
- */
- public boolean hasNext() throws XMLStreamException {
-
- return !(frame.ended && (frames.isEmpty() || frame.isDocumentFragment()));
-
- }
-
- /*
- * (non-Javadoc)
- *
- * @see javax.xml.stream.XMLStreamReader#close()
- */
- public void close() throws XMLStreamException {
- }
-
- /*
- * (non-Javadoc)
- *
- * @see javax.xml.stream.XMLStreamReader#getNamespaceURI(java.lang.String)
- */
- public abstract String getNamespaceURI(String prefix);
-
- /*
- * (non-Javadoc)
- *
- * @see javax.xml.stream.XMLStreamReader#isStartElement()
- */
- public boolean isStartElement() {
- return currentEvent == START_ELEMENT;
- }
-
- /*
- * (non-Javadoc)
- *
- * @see javax.xml.stream.XMLStreamReader#isEndElement()
- */
- public boolean isEndElement() {
- return currentEvent == END_ELEMENT;
- }
-
- /*
- * (non-Javadoc)
- *
- * @see javax.xml.stream.XMLStreamReader#isCharacters()
- */
- public boolean isCharacters() {
- return currentEvent == CHARACTERS;
- }
-
- /*
- * (non-Javadoc)
- *
- * @see javax.xml.stream.XMLStreamReader#isWhiteSpace()
- */
- public boolean isWhiteSpace() {
- if (currentEvent == CHARACTERS || currentEvent == CDATA) {
- String text = getText();
- int len = text.length();
- for (int i = 0; i < len; ++i) {
- if (text.charAt(i) > 0x0020) {
- return false;
- }
- }
- return true;
- }
- return currentEvent == SPACE;
- }
-
- public int getEventType() {
- return currentEvent;
- }
-
- public int getTextCharacters(int sourceStart, char[] target, int targetStart, int length)
- throws XMLStreamException {
- char[] src = getText().toCharArray();
-
- if (sourceStart + length >= src.length) {
- length = src.length - sourceStart;
- }
-
- for (int i = 0; i < length; i++) {
- target[targetStart + i] = src[i + sourceStart];
- }
-
- return length;
- }
-
- public boolean hasText() {
- return currentEvent == CHARACTERS || currentEvent == DTD || currentEvent == ENTITY_REFERENCE
- || currentEvent == COMMENT || currentEvent == SPACE;
- }
-
- public String getSystemId() {
- return null;
- }
- public String getPublicId() {
- return null;
- }
- public Location getLocation() {
- return new Location() {
-
- public int getCharacterOffset() {
- return 0;
- }
-
- public int getColumnNumber() {
- return 0;
- }
-
- public int getLineNumber() {
- return 0;
- }
-
- public String getPublicId() {
- return AbstractDOMStreamReader.this.getPublicId();
- }
-
- public String getSystemId() {
- return AbstractDOMStreamReader.this.getSystemId();
- }
-
- };
- }
-
- public boolean hasName() {
- return currentEvent == START_ELEMENT || currentEvent == END_ELEMENT;
- }
-
- public String getVersion() {
- return null;
- }
-
- public boolean isStandalone() {
- return false;
- }
-
- public boolean standaloneSet() {
- return false;
- }
-
- public String getCharacterEncodingScheme() {
- return null;
- }
-}
diff --git a/src/main/java/org/apache/xml/security/staxutils/DOMUtils.java b/src/main/java/org/apache/xml/security/staxutils/DOMUtils.java
deleted file mode 100644
index a833a62..0000000
--- a/src/main/java/org/apache/xml/security/staxutils/DOMUtils.java
+++ /dev/null
@@ -1,142 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.xml.security.staxutils;
-
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-import java.util.Collections;
-import java.util.Map;
-import java.util.WeakHashMap;
-
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.parsers.ParserConfigurationException;
-
-import org.w3c.dom.Document;
-import org.w3c.dom.Node;
-import org.w3c.dom.Text;
-
-/**
- * Few simple utils to read DOM. This is originally from the Jakarta Commons Modeler.
- */
-public final class DOMUtils {
- private static final Map<ClassLoader, DocumentBuilder> DOCUMENT_BUILDERS
- = Collections.synchronizedMap(new WeakHashMap<ClassLoader, DocumentBuilder>());
- private static final Map<ClassLoader, DocumentBuilder> DOCUMENT_BUILDERS_DISALLOW_DOCTYPE
- = Collections.synchronizedMap(new WeakHashMap<ClassLoader, DocumentBuilder>());
-
- private DOMUtils() {
- }
-
- private static DocumentBuilder getDocumentBuilder(boolean disAllowDocTypeDeclarations) throws ParserConfigurationException {
- ClassLoader loader = getContextClassLoader();
- if (loader == null) {
- loader = getClassLoader(DOMUtils.class);
- }
- if (loader == null) {
- DocumentBuilderFactory f = DocumentBuilderFactory.newInstance();
- f.setNamespaceAware(true);
- f.setFeature(javax.xml.XMLConstants.FEATURE_SECURE_PROCESSING, true);
- f.setFeature("http://apache.org/xml/features/disallow-doctype-decl", disAllowDocTypeDeclarations);
- return f.newDocumentBuilder();
- }
- DocumentBuilder factory =
- disAllowDocTypeDeclarations ? DOCUMENT_BUILDERS_DISALLOW_DOCTYPE.get(loader) : DOCUMENT_BUILDERS.get(loader);
- if (factory == null) {
- DocumentBuilderFactory f2 = DocumentBuilderFactory.newInstance();
- f2.setNamespaceAware(true);
- f2.setFeature(javax.xml.XMLConstants.FEATURE_SECURE_PROCESSING, true);
- f2.setFeature("http://apache.org/xml/features/disallow-doctype-decl", disAllowDocTypeDeclarations);
- factory = f2.newDocumentBuilder();
- if (disAllowDocTypeDeclarations) {
- DOCUMENT_BUILDERS_DISALLOW_DOCTYPE.put(loader, factory);
- } else {
- DOCUMENT_BUILDERS.put(loader, factory);
- }
- }
- return factory;
- }
-
- private static ClassLoader getContextClassLoader() {
- final SecurityManager sm = System.getSecurityManager();
- if (sm != null) {
- return AccessController.doPrivileged(new PrivilegedAction<ClassLoader>() {
- public ClassLoader run() {
- return Thread.currentThread().getContextClassLoader();
- }
- });
- }
- return Thread.currentThread().getContextClassLoader();
- }
-
- private static ClassLoader getClassLoader(final Class<?> clazz) {
- final SecurityManager sm = System.getSecurityManager();
- if (sm != null) {
- return AccessController.doPrivileged(new PrivilegedAction<ClassLoader>() {
- public ClassLoader run() {
- return clazz.getClassLoader();
- }
- });
- }
- return clazz.getClassLoader();
- }
-
- /**
- * Creates a new Document object
- * @throws ParserConfigurationException
- */
- public static Document newDocument(boolean disAllowDocTypeDeclarations) {
- try {
- return getDocumentBuilder(disAllowDocTypeDeclarations).newDocument();
- } catch (ParserConfigurationException e) {
- throw new RuntimeException(e);
- }
- }
-
- /**
- * Get the raw text content of a node or null if there is no text
- */
- public static String getRawContent(Node n) {
- if (n == null) {
- return null;
- }
- StringBuilder b = null;
- String s = null;
- Node n1 = n.getFirstChild();
- while (n1 != null) {
- if (n1.getNodeType() == Node.TEXT_NODE || n1.getNodeType() == Node.CDATA_SECTION_NODE) {
- if (b != null) {
- b.append(((Text)n1).getNodeValue());
- } else if (s == null) {
- s = ((Text)n1).getNodeValue();
- } else {
- b = new StringBuilder(s).append(((Text)n1).getNodeValue());
- s = null;
- }
- }
- n1 = n1.getNextSibling();
- }
- if (b != null) {
- return b.toString();
- }
- return s;
- }
-
-}
diff --git a/src/main/java/org/apache/xml/security/staxutils/DepthExceededStaxException.java b/src/main/java/org/apache/xml/security/staxutils/DepthExceededStaxException.java
deleted file mode 100644
index 5886a20..0000000
--- a/src/main/java/org/apache/xml/security/staxutils/DepthExceededStaxException.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.xml.security.staxutils;
-
-public class DepthExceededStaxException extends RuntimeException {
-
- private static final long serialVersionUID = 4750070687283463619L;
-
- public DepthExceededStaxException() {
-
- }
-
- public DepthExceededStaxException(String message) {
- super(message);
- }
-
-}
diff --git a/src/main/java/org/apache/xml/security/staxutils/DepthRestrictingStreamReader.java b/src/main/java/org/apache/xml/security/staxutils/DepthRestrictingStreamReader.java
deleted file mode 100644
index 6e493ae..0000000
--- a/src/main/java/org/apache/xml/security/staxutils/DepthRestrictingStreamReader.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.xml.security.staxutils;
-
-import java.util.Stack;
-
-import javax.xml.stream.XMLStreamException;
-import javax.xml.stream.XMLStreamReader;
-
-/**
- * XMLStreamReader implementation which can be used to enforce a number of
- * depth-restricting policies. The following properties are currently supported:
- * - total number of elements in the document
- * - the maximum depth of the given element; the root element will be checked by default
- * - the maximum number of immediate child nodes for individual elements
- *
- * More sophisticated policies can be supported in the future.
- */
-public class DepthRestrictingStreamReader extends DepthXMLStreamReader {
-
- private DocumentDepthProperties props;
- private int totalElementCount;
- private Stack<Integer> stack = new Stack<>();
-
- public DepthRestrictingStreamReader(XMLStreamReader reader,
- int elementCountThreshold,
- int innerElementLevelThreshold,
- int innerElementCountThreshold) {
- this(reader, new DocumentDepthProperties(elementCountThreshold,
- innerElementLevelThreshold,
- innerElementCountThreshold));
- }
-
- public DepthRestrictingStreamReader(XMLStreamReader reader,
- DocumentDepthProperties props) {
- super(reader);
- this.props = props;
- }
-
- @Override
- public int next() throws XMLStreamException {
- int next = super.next();
- if (next == START_ELEMENT) {
- if (props.getInnerElementLevelThreshold() != -1
- && getDepth() >= props.getInnerElementLevelThreshold()) {
- throw new DepthExceededStaxException();
- }
- if (props.getElementCountThreshold() != -1
- && ++totalElementCount >= props.getElementCountThreshold()) {
- throw new DepthExceededStaxException();
- }
- if (props.getInnerElementCountThreshold() != -1) {
- if (!stack.empty()) {
- int currentCount = stack.pop();
- if (++currentCount >= props.getInnerElementCountThreshold()) {
- throw new DepthExceededStaxException();
- }
- stack.push(currentCount);
- }
- stack.push(0);
- }
-
- } else if (next == END_ELEMENT && props.getInnerElementCountThreshold() != -1) {
- stack.pop();
- }
- return next;
- }
-}
diff --git a/src/main/java/org/apache/xml/security/staxutils/DepthXMLStreamReader.java b/src/main/java/org/apache/xml/security/staxutils/DepthXMLStreamReader.java
deleted file mode 100644
index 3d7f14c..0000000
--- a/src/main/java/org/apache/xml/security/staxutils/DepthXMLStreamReader.java
+++ /dev/null
@@ -1,266 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.xml.security.staxutils;
-
-import javax.xml.namespace.NamespaceContext;
-import javax.xml.namespace.QName;
-import javax.xml.stream.Location;
-import javax.xml.stream.XMLStreamConstants;
-import javax.xml.stream.XMLStreamException;
-import javax.xml.stream.XMLStreamReader;
-
-public class DepthXMLStreamReader implements XMLStreamReader {
-
- protected XMLStreamReader reader;
- private int depth;
-
- public DepthXMLStreamReader(XMLStreamReader r) {
- this.reader = r;
- }
-
- public XMLStreamReader getReader() {
- return this.reader;
- }
-
- public int getDepth() {
- return depth;
- }
-
- public void close() throws XMLStreamException {
- reader.close();
- }
-
- public int getAttributeCount() {
- return reader.getAttributeCount();
- }
-
- public String getAttributeLocalName(int arg0) {
- return reader.getAttributeLocalName(arg0);
- }
-
- public QName getAttributeName(int arg0) {
- return reader.getAttributeName(arg0);
- }
-
- public String getAttributeNamespace(int arg0) {
- return reader.getAttributeNamespace(arg0);
- }
-
- public String getAttributePrefix(int arg0) {
- return reader.getAttributePrefix(arg0);
- }
-
- public String getAttributeType(int arg0) {
- return reader.getAttributeType(arg0);
- }
-
- public String getAttributeValue(int arg0) {
- return reader.getAttributeValue(arg0);
- }
-
- public String getAttributeValue(String namespace, String localName) {
- return reader.getAttributeValue(namespace, localName);
- }
-
- public String getCharacterEncodingScheme() {
- return reader.getCharacterEncodingScheme();
- }
-
- public String getElementText() throws XMLStreamException {
- String ret = reader.getElementText();
- //workaround bugs in some readers that aren't properly advancing to
- //the END_ELEMENT (*cough*jettison*cough*)
- while (reader.getEventType() != XMLStreamConstants.END_ELEMENT) {
- reader.next();
- }
- depth--;
- return ret;
- }
-
- public String getEncoding() {
- return reader.getEncoding();
- }
-
- public int getEventType() {
- return reader.getEventType();
- }
-
- public String getLocalName() {
- return reader.getLocalName();
- }
-
- public Location getLocation() {
- return reader.getLocation();
- }
-
- public QName getName() {
- return reader.getName();
- }
-
- public NamespaceContext getNamespaceContext() {
- return reader.getNamespaceContext();
- }
-
- public int getNamespaceCount() {
- return reader.getNamespaceCount();
- }
-
- public String getNamespacePrefix(int arg0) {
- return reader.getNamespacePrefix(arg0);
- }
-
- public String getNamespaceURI() {
- return reader.getNamespaceURI();
- }
-
- public String getNamespaceURI(int arg0) {
-
- return reader.getNamespaceURI(arg0);
- }
-
- public String getNamespaceURI(String arg0) {
- return reader.getNamespaceURI(arg0);
- }
-
- public String getPIData() {
- return reader.getPIData();
- }
-
- public String getPITarget() {
- return reader.getPITarget();
- }
-
- public String getPrefix() {
- return reader.getPrefix();
- }
-
- public Object getProperty(String arg0) throws IllegalArgumentException {
-
- return reader.getProperty(arg0);
- }
-
- public String getText() {
- return reader.getText();
- }
-
- public char[] getTextCharacters() {
- return reader.getTextCharacters();
- }
-
- public int getTextCharacters(int arg0, char[] arg1, int arg2, int arg3) throws XMLStreamException {
- return reader.getTextCharacters(arg0, arg1, arg2, arg3);
- }
-
- public int getTextLength() {
- return reader.getTextLength();
- }
-
- public int getTextStart() {
- return reader.getTextStart();
- }
-
- public String getVersion() {
- return reader.getVersion();
- }
-
- public boolean hasName() {
- return reader.hasName();
- }
-
- public boolean hasNext() throws XMLStreamException {
- return reader.hasNext();
- }
-
- public boolean hasText() {
- return reader.hasText();
- }
-
- public boolean isAttributeSpecified(int arg0) {
- return reader.isAttributeSpecified(arg0);
- }
-
- public boolean isCharacters() {
- return reader.isCharacters();
- }
-
- public boolean isEndElement() {
- return reader.isEndElement();
- }
-
- public boolean isStandalone() {
- return reader.isStandalone();
- }
-
- public boolean isStartElement() {
- return reader.isStartElement();
- }
-
- public boolean isWhiteSpace() {
- return reader.isWhiteSpace();
- }
-
- public int next() throws XMLStreamException {
- int next = reader.next();
-
- if (next == START_ELEMENT) {
- depth++;
- } else if (next == END_ELEMENT) {
- depth--;
- }
-
- return next;
- }
-
- public int nextTag() throws XMLStreamException {
- int eventType = next();
- while (eventType == XMLStreamConstants.CHARACTERS && isWhiteSpace()
- || eventType == XMLStreamConstants.CDATA && isWhiteSpace()
- // skip whitespace
- || eventType == XMLStreamConstants.SPACE
- || eventType == XMLStreamConstants.PROCESSING_INSTRUCTION
- || eventType == XMLStreamConstants.COMMENT) {
- eventType = next();
- }
- if (eventType != XMLStreamConstants.START_ELEMENT && eventType != XMLStreamConstants.END_ELEMENT) {
- throw new XMLStreamException("expected start or end tag", getLocation());
- }
- return eventType;
- }
-
- public void require(int arg0, String arg1, String arg2) throws XMLStreamException {
- reader.require(arg0, arg1, arg2);
- }
-
- public boolean standaloneSet() {
- return reader.standaloneSet();
- }
-
- public int hashCode() {
- return reader.hashCode();
- }
-
- public boolean equals(Object arg0) {
- return reader.equals(arg0);
- }
-
- public String toString() {
- return reader.toString();
- }
-}
diff --git a/src/main/java/org/apache/xml/security/staxutils/DocumentDepthProperties.java b/src/main/java/org/apache/xml/security/staxutils/DocumentDepthProperties.java
deleted file mode 100644
index cdd9f4b..0000000
--- a/src/main/java/org/apache/xml/security/staxutils/DocumentDepthProperties.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.xml.security.staxutils;
-
-public class DocumentDepthProperties {
-
- public static final String TOTAL_ELEMENT_COUNT = "depthTotalElementCountThreshold";
- public static final String INNER_ELEMENT_COUNT = "depthInnerElementCountThreshold";
- public static final String INNER_ELEMENT_LEVEL = "depthInnerElementLevelThreshold";
-
- private int elementCountThreshold = -1;
- private int innerElementLevelThreshold = -1;
- private int innerElementCountThreshold = -1;
- public DocumentDepthProperties() {
-
- }
- public DocumentDepthProperties(int elementCountThreshold,
- int innerElementLevelThreshold,
- int innerElementCountThreshold) {
- this.elementCountThreshold = elementCountThreshold;
- this.innerElementLevelThreshold = innerElementLevelThreshold;
- this.innerElementCountThreshold = innerElementCountThreshold;
- }
-
- public boolean isEffective() {
- return elementCountThreshold != -1 || innerElementLevelThreshold != -1
- || innerElementCountThreshold != -1;
- }
-
- public void setElementCountThreshold(int elementCountThreshold) {
- this.elementCountThreshold = elementCountThreshold;
- }
- public int getElementCountThreshold() {
- return elementCountThreshold;
- }
- public void setInnerElementLevelThreshold(int innerElementLevelThreshold) {
- this.innerElementLevelThreshold = innerElementLevelThreshold;
- }
- public int getInnerElementLevelThreshold() {
- return innerElementLevelThreshold;
- }
- public void setInnerElementCountThreshold(int innerElementCountThreshold) {
- this.innerElementCountThreshold = innerElementCountThreshold;
- }
- public int getInnerElementCountThreshold() {
- return innerElementCountThreshold;
- }
-}
diff --git a/src/main/java/org/apache/xml/security/staxutils/FastStack.java b/src/main/java/org/apache/xml/security/staxutils/FastStack.java
deleted file mode 100644
index 8a48a3d..0000000
--- a/src/main/java/org/apache/xml/security/staxutils/FastStack.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.xml.security.staxutils;
-
-import java.util.ArrayList;
-import java.util.EmptyStackException;
-
-public class FastStack<T> extends ArrayList<T> {
- private static final long serialVersionUID = -6459503295618120689L;
-
- public void push(T o) {
- add(o);
- }
-
- public T pop() {
- if (empty()) {
- throw new EmptyStackException();
- }
-
- return remove(size() - 1);
- }
-
- public boolean empty() {
- return size() == 0;
- }
-
- public T peek() {
- if (empty()) {
- throw new EmptyStackException();
- }
-
- return get(size() - 1);
- }
-}
diff --git a/src/main/java/org/apache/xml/security/staxutils/StaxUtils.java b/src/main/java/org/apache/xml/security/staxutils/StaxUtils.java
deleted file mode 100644
index 756f6e9..0000000
--- a/src/main/java/org/apache/xml/security/staxutils/StaxUtils.java
+++ /dev/null
@@ -1,592 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.xml.security.staxutils;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.Reader;
-import java.net.URL;
-import java.nio.charset.StandardCharsets;
-import java.nio.file.Files;
-import java.util.Stack;
-import java.util.concurrent.ArrayBlockingQueue;
-import java.util.concurrent.BlockingQueue;
-
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.stream.Location;
-import javax.xml.stream.XMLInputFactory;
-import javax.xml.stream.XMLResolver;
-import javax.xml.stream.XMLStreamConstants;
-import javax.xml.stream.XMLStreamException;
-import javax.xml.stream.XMLStreamReader;
-import javax.xml.transform.Source;
-import javax.xml.transform.dom.DOMSource;
-import javax.xml.transform.sax.SAXSource;
-import javax.xml.transform.stax.StAXSource;
-import javax.xml.transform.stream.StreamSource;
-
-import org.w3c.dom.Attr;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.w3c.dom.Node;
-import org.w3c.dom.UserDataHandler;
-import org.xml.sax.InputSource;
-
-public final class StaxUtils {
-
- private static final org.slf4j.Logger LOG =
- org.slf4j.LoggerFactory.getLogger(StaxUtils.class);
-
- private static final String XML_NS = "http://www.w3.org/2000/xmlns/";
-
- private static final BlockingQueue<XMLInputFactory> DISALLOW_DOCTYPE_INPUT_FACTORY_POOL = new ArrayBlockingQueue<>(20);
- private static final BlockingQueue<XMLInputFactory> ALLOW_DOCTYPE_INPUT_FACTORY_POOL = new ArrayBlockingQueue<>(20);
-
- private StaxUtils() {
- }
-
- /**
- * Return a cached, namespace-aware, factory.
- */
- private static XMLInputFactory getXMLInputFactory(boolean disAllowDocTypeDeclarations) {
- XMLInputFactory f = disAllowDocTypeDeclarations
- ? DISALLOW_DOCTYPE_INPUT_FACTORY_POOL.poll() : ALLOW_DOCTYPE_INPUT_FACTORY_POOL.poll();
- if (f == null) {
- f = createXMLInputFactory(disAllowDocTypeDeclarations);
- }
- return f;
- }
-
- private static void returnXMLInputFactory(XMLInputFactory factory, boolean disAllowDocTypeDeclarations) {
- if (disAllowDocTypeDeclarations) {
- DISALLOW_DOCTYPE_INPUT_FACTORY_POOL.offer(factory);
- } else {
- ALLOW_DOCTYPE_INPUT_FACTORY_POOL.offer(factory);
- }
- }
-
- /**
- * Return a new factory so that the caller can set sticky parameters.
- * @param disAllowDocTypeDeclarations
- * @throws XMLStreamException
- */
- private static XMLInputFactory createXMLInputFactory(boolean disAllowDocTypeDeclarations) {
- XMLInputFactory factory = null;
- try {
- factory = XMLInputFactory.newInstance();
- } catch (Throwable t) {
- if (LOG.isDebugEnabled()) {
- LOG.debug("XMLInputFactory.newInstance() failed with: ", t);
- }
- throw new RuntimeException("Failed to create XMLInputFactory.");
- }
-
- setProperty(factory, XMLInputFactory.IS_NAMESPACE_AWARE, true);
-
- if (disAllowDocTypeDeclarations) {
- setProperty(factory, XMLInputFactory.SUPPORT_DTD, Boolean.FALSE);
- setProperty(factory, XMLInputFactory.IS_REPLACING_ENTITY_REFERENCES, Boolean.FALSE);
- setProperty(factory, XMLInputFactory.IS_SUPPORTING_EXTERNAL_ENTITIES, Boolean.FALSE);
- factory.setXMLResolver(new XMLResolver() {
- public Object resolveEntity(String publicID, String systemID,
- String baseURI, String namespace)
- throws XMLStreamException {
- throw new XMLStreamException("Reading external entities is disabled");
- }
- });
- }
-
- return factory;
- }
-
- private static boolean setProperty(XMLInputFactory f, String p, Object o) {
- try {
- f.setProperty(p, o);
- return true;
- } catch (Throwable t) {
- //ignore
- }
- return false;
- }
-
- public static Document read(Source s, boolean disAllowDocTypeDeclarations) throws XMLStreamException {
- XMLStreamReader reader = createXMLStreamReader(s, disAllowDocTypeDeclarations);
- try {
- return read(reader);
- } finally {
- try {
- reader.close();
- } catch (Exception ex) {
- //ignore
- }
- }
- }
- public static Document read(InputStream s, boolean disAllowDocTypeDeclarations) throws XMLStreamException {
- XMLStreamReader reader = createXMLStreamReader(s, disAllowDocTypeDeclarations);
- try {
- return read(reader);
- } finally {
- try {
- reader.close();
- } catch (Exception ex) {
- //ignore
- }
- }
- }
- public static Document read(Reader s, boolean disAllowDocTypeDeclarations) throws XMLStreamException {
- XMLStreamReader reader = createXMLStreamReader(s, disAllowDocTypeDeclarations);
- try {
- return read(reader);
- } finally {
- try {
- reader.close();
- } catch (Exception ex) {
- //ignore
- }
- }
- }
- public static Document read(File is, boolean disAllowDocTypeDeclarations) throws XMLStreamException, IOException {
- try (InputStream fin = Files.newInputStream(is.toPath())) {
- return read(fin, disAllowDocTypeDeclarations);
- }
- }
- public static Document read(InputSource s, boolean disAllowDocTypeDeclarations) throws XMLStreamException {
- XMLStreamReader reader = createXMLStreamReader(s, disAllowDocTypeDeclarations);
- try {
- return read(reader);
- } finally {
- try {
- reader.close();
- } catch (Exception ex) {
- //ignore
- }
- }
- }
- public static Document read(XMLStreamReader reader) throws XMLStreamException {
- return read(reader, false);
- }
- public static Document read(XMLStreamReader reader, boolean recordLoc) throws XMLStreamException {
- Document doc = DOMUtils.newDocument(true);
- if (reader.getLocation().getSystemId() != null) {
- try {
- doc.setDocumentURI(reader.getLocation().getSystemId());
- } catch (Exception e) {
- //ignore - probably not DOM level 3
- }
- }
- readDocElements(doc, doc, reader, true, recordLoc);
- return doc;
- }
-
- public static Document read(DocumentBuilder builder, XMLStreamReader reader, boolean repairing)
- throws XMLStreamException {
-
- Document doc = builder == null ? DOMUtils.newDocument(true) : builder.newDocument();
- if (reader.getLocation().getSystemId() != null) {
- try {
- doc.setDocumentURI(reader.getLocation().getSystemId());
- } catch (Exception e) {
- //ignore - probably not DOM level 3
- }
- }
- readDocElements(doc, reader, repairing);
- return doc;
- }
-
- /**
- * @param parent
- */
- private static Document getDocument(Node parent) {
- return parent instanceof Document ? (Document)parent : parent.getOwnerDocument();
- }
-
- private static boolean isDeclared(Element e, String namespaceURI, String prefix) {
- while (e != null) {
- Attr att;
- if (prefix != null && prefix.length() > 0) {
- att = e.getAttributeNodeNS(XML_NS, prefix);
- } else {
- att = e.getAttributeNode("xmlns");
- }
-
- if (att != null && att.getNodeValue().equals(namespaceURI)) {
- return true;
- }
-
- if (e.getParentNode() instanceof Element) {
- e = (Element)e.getParentNode();
- } else if (isEmpty(prefix) && isEmpty(namespaceURI)) {
- //A document that probably doesn't have any namespace qualifies elements
- return true;
- } else {
- e = null;
- }
- }
- return false;
- }
-
- public static void readDocElements(Node parent, XMLStreamReader reader, boolean repairing)
- throws XMLStreamException {
- Document doc = getDocument(parent);
- readDocElements(doc, parent, reader, repairing, false);
- }
-
- public static void readDocElements(Node parent, XMLStreamReader reader, boolean repairing,
- boolean isThreshold)
- throws XMLStreamException {
- Document doc = getDocument(parent);
- readDocElements(doc, parent, reader, repairing, false, isThreshold);
- }
-
- /**
- * @param parent
- * @param reader
- * @throws XMLStreamException
- */
- public static void readDocElements(Document doc, Node parent,
- XMLStreamReader reader, boolean repairing, boolean recordLoc)
- throws XMLStreamException {
- readDocElements(doc, parent, reader, repairing, recordLoc, false);
- }
-
- /**
- * @param parent
- * @param reader
- * @throws XMLStreamException
- */
- public static void readDocElements(Document doc, Node parent,
- XMLStreamReader reader, boolean repairing, boolean recordLoc,
- boolean isThreshold)
- throws XMLStreamException {
- Stack<Node> stack = new Stack<Node>();
- int event = reader.getEventType();
- while (reader.hasNext()) {
- switch (event) {
- case XMLStreamConstants.START_ELEMENT: {
- Element e;
- if (!isEmpty(reader.getPrefix())) {
- e = doc.createElementNS(reader.getNamespaceURI(),
- reader.getPrefix() + ":" + reader.getLocalName());
- } else {
- e = doc.createElementNS(reader.getNamespaceURI(), reader.getLocalName());
- }
- e = (Element)parent.appendChild(e);
- recordLoc = addLocation(doc, e, reader, recordLoc);
-
- for (int ns = 0; ns < reader.getNamespaceCount(); ns++) {
- String uri = reader.getNamespaceURI(ns);
- String prefix = reader.getNamespacePrefix(ns);
-
- declare(e, uri, prefix);
- }
-
- for (int att = 0; att < reader.getAttributeCount(); att++) {
- String name = reader.getAttributeLocalName(att);
- String prefix = reader.getAttributePrefix(att);
- if (prefix != null && prefix.length() > 0) {
- name = prefix + ":" + name;
- }
-
- Attr attr = doc.createAttributeNS(reader.getAttributeNamespace(att), name);
- attr.setValue(reader.getAttributeValue(att));
- e.setAttributeNode(attr);
- }
-
- if (repairing && !isDeclared(e, reader.getNamespaceURI(), reader.getPrefix())) {
- declare(e, reader.getNamespaceURI(), reader.getPrefix());
- }
- stack.push(parent);
- parent = e;
- break;
- }
- case XMLStreamConstants.END_ELEMENT:
- if (stack.isEmpty()) {
- return;
- }
- parent = stack.pop();
- //if (parent instanceof Document || parent instanceof DocumentFragment) {
- // return;
- //}
- break;
- case XMLStreamConstants.NAMESPACE:
- break;
- case XMLStreamConstants.ATTRIBUTE:
- break;
- case XMLStreamConstants.CHARACTERS:
- if (parent != null) {
- recordLoc = addLocation(doc,
- parent.appendChild(doc.createTextNode(reader.getText())),
- reader, recordLoc);
- }
- break;
- case XMLStreamConstants.COMMENT:
- if (parent != null) {
- parent.appendChild(doc.createComment(reader.getText()));
- }
- break;
- case XMLStreamConstants.CDATA:
- recordLoc = addLocation(doc,
- parent.appendChild(doc.createCDATASection(reader.getText())),
- reader, recordLoc);
- break;
- case XMLStreamConstants.PROCESSING_INSTRUCTION:
- parent.appendChild(doc.createProcessingInstruction(reader.getPITarget(), reader.getPIData()));
- break;
- case XMLStreamConstants.ENTITY_REFERENCE:
- parent.appendChild(doc.createProcessingInstruction(reader.getPITarget(), reader.getPIData()));
- break;
- default:
- break;
- }
-
- if (reader.hasNext()) {
- event = reader.next();
- }
- }
- }
-
- private static boolean addLocation(Document doc, Node node,
- Location loc,
- boolean recordLoc) {
- if (recordLoc && loc != null && (loc.getColumnNumber() != 0 || loc.getLineNumber() != 0)) {
- try {
- final int charOffset = loc.getCharacterOffset();
- final int colNum = loc.getColumnNumber();
- final int linNum = loc.getLineNumber();
- final String pubId = loc.getPublicId() == null ? doc.getDocumentURI() : loc.getPublicId();
- final String sysId = loc.getSystemId() == null ? doc.getDocumentURI() : loc.getSystemId();
- Location loc2 = new Location() {
- public int getCharacterOffset() {
- return charOffset;
- }
- public int getColumnNumber() {
- return colNum;
- }
- public int getLineNumber() {
- return linNum;
- }
- public String getPublicId() {
- return pubId;
- }
- public String getSystemId() {
- return sysId;
- }
- };
- node.setUserData("location", loc2, LocationUserDataHandler.INSTANCE);
- } catch (Throwable ex) {
- //possibly not DOM level 3, won't be able to record this then
- return false;
- }
- }
- return recordLoc;
- }
-
- private static boolean addLocation(Document doc, Node node,
- XMLStreamReader reader,
- boolean recordLoc) {
- return addLocation(doc, node, reader.getLocation(), recordLoc);
- }
-
- private static class LocationUserDataHandler implements UserDataHandler {
- public static final LocationUserDataHandler INSTANCE = new LocationUserDataHandler();
-
- public void handle(short operation, String key, Object data, Node src, Node dst) {
- if (operation == NODE_CLONED) {
- dst.setUserData(key, data, this);
- }
- }
- }
-
- private static void declare(Element node, String uri, String prefix) {
- String qualname;
- if (prefix != null && prefix.length() > 0) {
- qualname = "xmlns:" + prefix;
- } else {
- qualname = "xmlns";
- }
- Attr attr = node.getOwnerDocument().createAttributeNS(XML_NS, qualname);
- attr.setValue(uri);
- node.setAttributeNodeNS(attr);
- }
-
- public static XMLStreamReader createXMLStreamReader(InputSource src, boolean disAllowDocTypeDeclarations) {
- String sysId = src.getSystemId() == null ? null : src.getSystemId();
- String pubId = src.getPublicId() == null ? null : src.getPublicId();
- if (src.getByteStream() != null) {
- if (src.getEncoding() == null) {
- StreamSource ss = new StreamSource(src.getByteStream(), sysId);
- ss.setPublicId(pubId);
- return createXMLStreamReader(ss, disAllowDocTypeDeclarations);
- }
- return createXMLStreamReader(src.getByteStream(), src.getEncoding(), disAllowDocTypeDeclarations);
- } else if (src.getCharacterStream() != null) {
- StreamSource ss = new StreamSource(src.getCharacterStream(), sysId);
- ss.setPublicId(pubId);
- return createXMLStreamReader(ss, disAllowDocTypeDeclarations);
- } else {
- try {
- URL url = new URL(sysId);
- StreamSource ss = new StreamSource(url.openStream(), sysId);
- ss.setPublicId(pubId);
- return createXMLStreamReader(ss, disAllowDocTypeDeclarations);
- } catch (Exception ex) {
- //ignore - not a valid URL
- }
- }
- throw new IllegalArgumentException("InputSource must have a ByteStream or CharacterStream");
- }
- /**
- * @param in
- * @param encoding
- */
- public static XMLStreamReader createXMLStreamReader(InputStream in, String encoding, boolean disAllowDocTypeDeclarations) {
- if (encoding == null) {
- encoding = StandardCharsets.UTF_8.name();
- }
-
- XMLInputFactory factory = getXMLInputFactory(disAllowDocTypeDeclarations);
- try {
- return factory.createXMLStreamReader(in, encoding);
- } catch (XMLStreamException e) {
- throw new RuntimeException("Couldn't parse stream.", e);
- } finally {
- returnXMLInputFactory(factory, disAllowDocTypeDeclarations);
- }
- }
-
- /**
- * @param in
- */
- public static XMLStreamReader createXMLStreamReader(InputStream in, boolean disAllowDocTypeDeclarations) {
- XMLInputFactory factory = getXMLInputFactory(disAllowDocTypeDeclarations);
- try {
- return factory.createXMLStreamReader(in);
- } catch (XMLStreamException e) {
- throw new RuntimeException("Couldn't parse stream.", e);
- } finally {
- returnXMLInputFactory(factory, disAllowDocTypeDeclarations);
- }
- }
- public static XMLStreamReader createXMLStreamReader(String systemId, InputStream in, boolean disAllowDocTypeDeclarations) {
- XMLInputFactory factory = getXMLInputFactory(disAllowDocTypeDeclarations);
- try {
- return factory.createXMLStreamReader(systemId, in);
- } catch (XMLStreamException e) {
- throw new RuntimeException("Couldn't parse stream.", e);
- } finally {
- returnXMLInputFactory(factory, disAllowDocTypeDeclarations);
- }
- }
-
- public static XMLStreamReader createXMLStreamReader(Element el) {
- return new W3CDOMStreamReader(el);
- }
- public static XMLStreamReader createXMLStreamReader(Document doc) {
- return new W3CDOMStreamReader(doc.getDocumentElement());
- }
- public static XMLStreamReader createXMLStreamReader(Element el, String sysId) {
- return new W3CDOMStreamReader(el, sysId);
- }
- public static XMLStreamReader createXMLStreamReader(Document doc, String sysId) {
- return new W3CDOMStreamReader(doc.getDocumentElement(), sysId);
- }
-
- public static XMLStreamReader createXMLStreamReader(Source source, boolean disAllowDocTypeDeclarations) {
- try {
- if (source instanceof DOMSource) {
- DOMSource ds = (DOMSource)source;
- Node nd = ds.getNode();
- Element el = null;
- if (nd instanceof Document) {
- el = ((Document)nd).getDocumentElement();
- } else if (nd instanceof Element) {
- el = (Element)nd;
- }
-
- if (null != el) {
- return new W3CDOMStreamReader(el, source.getSystemId());
- }
- } else if (source instanceof StAXSource) {
- return ((StAXSource)source).getXMLStreamReader();
- } else if (source instanceof SAXSource) {
- SAXSource ss = (SAXSource)source;
- if (ss.getXMLReader() == null) {
- return createXMLStreamReader(((SAXSource)source).getInputSource(), disAllowDocTypeDeclarations);
- }
- }
-
- XMLInputFactory factory = getXMLInputFactory(disAllowDocTypeDeclarations);
- try {
- XMLStreamReader reader = null;
-
- try {
- reader = factory.createXMLStreamReader(source);
- } catch (UnsupportedOperationException e) {
- //ignore
- }
- if (reader == null && source instanceof StreamSource) {
- //createXMLStreamReader from Source is optional, we'll try and map it
- StreamSource ss = (StreamSource)source;
- if (ss.getInputStream() != null) {
- reader = factory.createXMLStreamReader(ss.getSystemId(),
- ss.getInputStream());
- } else {
- reader = factory.createXMLStreamReader(ss.getSystemId(),
- ss.getReader());
- }
- }
- return reader;
- } finally {
- returnXMLInputFactory(factory, disAllowDocTypeDeclarations);
- }
- } catch (XMLStreamException e) {
- throw new RuntimeException("Couldn't parse stream.", e);
- }
- }
-
- /**
- * @param reader
- */
- public static XMLStreamReader createXMLStreamReader(Reader reader, boolean disAllowDocTypeDeclarations) {
- XMLInputFactory factory = getXMLInputFactory(disAllowDocTypeDeclarations);
- try {
- return factory.createXMLStreamReader(reader);
- } catch (XMLStreamException e) {
- throw new RuntimeException("Couldn't parse stream.", e);
- } finally {
- returnXMLInputFactory(factory, disAllowDocTypeDeclarations);
- }
- }
-
- private static boolean isEmpty(String str) {
- if (str != null) {
- int len = str.length();
- for (int x = 0; x < len; ++x) {
- if (str.charAt(x) > ' ') {
- return false;
- }
- }
- }
- return true;
- }
-
-
-}
diff --git a/src/main/java/org/apache/xml/security/staxutils/SystemPropertyAction.java b/src/main/java/org/apache/xml/security/staxutils/SystemPropertyAction.java
deleted file mode 100644
index 5757e60..0000000
--- a/src/main/java/org/apache/xml/security/staxutils/SystemPropertyAction.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.xml.security.staxutils;
-
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-
-/**
- *
- */
-public final class SystemPropertyAction implements PrivilegedAction<String> {
- private static final org.slf4j.Logger LOG =
- org.slf4j.LoggerFactory.getLogger(SystemPropertyAction.class);
- private final String property;
- private final String def;
- private SystemPropertyAction(String name) {
- property = name;
- def = null;
- }
- private SystemPropertyAction(String name, String d) {
- property = name;
- def = d;
- }
-
- /* (non-Javadoc)
- * @see java.security.PrivilegedAction#run()
- */
- public String run() {
- if (def != null) {
- return System.getProperty(property, def);
- }
- return System.getProperty(property);
- }
-
- public static String getProperty(String name) {
- return AccessController.doPrivileged(new SystemPropertyAction(name));
- }
-
- public static String getProperty(String name, String def) {
- try {
- return AccessController.doPrivileged(new SystemPropertyAction(name, def));
- } catch (SecurityException ex) {
- LOG.debug("SecurityException raised getting property " + name, ex);
- return def;
- }
- }
-
- /**
- * Get the system property via the AccessController, but if a SecurityException is
- * raised, just return null;
- * @param name
- */
- public static String getPropertyOrNull(String name) {
- try {
- return AccessController.doPrivileged(new SystemPropertyAction(name));
- } catch (SecurityException ex) {
- LOG.debug("SecurityException raised getting property " + name, ex);
- return null;
- }
- }
-
- /**
- * Get the integer system property via the AccessController, but if a SecurityException is
- * raised, just return the default;
- * @param name - system property name
- * @param def - the default value if the system property does not exist or cannot be acquired
- */
- public static int getInteger(String name, int def) {
- try {
- return AccessController.doPrivileged(new PrivilegedAction<Integer>() {
- @Override
- public Integer run() {
- return Integer.getInteger(name, def);
- } });
- } catch (SecurityException ex) {
- LOG.debug("SecurityException raised getting property " + name, ex);
- return def;
- }
- }
-}
diff --git a/src/main/java/org/apache/xml/security/staxutils/W3CDOMStreamReader.java b/src/main/java/org/apache/xml/security/staxutils/W3CDOMStreamReader.java
deleted file mode 100644
index 9596d74..0000000
--- a/src/main/java/org/apache/xml/security/staxutils/W3CDOMStreamReader.java
+++ /dev/null
@@ -1,419 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.xml.security.staxutils;
-
-import java.util.ArrayList;
-
-import javax.xml.namespace.NamespaceContext;
-import javax.xml.namespace.QName;
-import javax.xml.stream.Location;
-import javax.xml.stream.XMLStreamException;
-
-import org.w3c.dom.Attr;
-import org.w3c.dom.Comment;
-import org.w3c.dom.Document;
-import org.w3c.dom.DocumentFragment;
-import org.w3c.dom.Element;
-import org.w3c.dom.NamedNodeMap;
-import org.w3c.dom.Node;
-import org.w3c.dom.ProcessingInstruction;
-import org.w3c.dom.Text;
-import org.w3c.dom.TypeInfo;
-
-public class W3CDOMStreamReader extends AbstractDOMStreamReader<Node, Node> {
- private Node content;
-
- private Document document;
-
- private W3CNamespaceContext context;
-
- private String sysId;
-
- /**
- * @param element
- */
- public W3CDOMStreamReader(Element element) {
- super(new ElementFrame<Node, Node>(element, null));
- content = element;
- newFrame(getCurrentFrame());
-
- this.document = element.getOwnerDocument();
- }
- public W3CDOMStreamReader(Element element, String systemId) {
- this(element);
- sysId = systemId;
- }
- public W3CDOMStreamReader(Document doc) {
- super(new ElementFrame<Node, Node>(doc, false) {
- public boolean isDocument() {
- return true;
- }
- });
- this.document = doc;
- }
- public W3CDOMStreamReader(DocumentFragment docfrag) {
- super(new ElementFrame<Node, Node>(docfrag, true) {
- public boolean isDocumentFragment() {
- return true;
- }
- });
- this.document = docfrag.getOwnerDocument();
- }
-
- /**
- * Get the document associated with this stream.
- */
- public Document getDocument() {
- return document;
- }
- public String getSystemId() {
- try {
- return sysId == null ? document.getDocumentURI() : sysId;
- } catch (Throwable ex) {
- //ignore, probably not DOM level 3
- }
- return sysId;
- }
- /**
- * Find name spaces declaration in atrributes and move them to separate
- * collection.
- */
- @Override
- protected final void newFrame(ElementFrame<Node, Node> frame) {
- Node element = getCurrentNode();
- frame.uris = new ArrayList<>();
- frame.prefixes = new ArrayList<>();
- frame.attributes = new ArrayList<>();
-
- if (context == null) {
- context = new W3CNamespaceContext();
- }
- if (element instanceof Element) {
- context.setElement((Element)element);
- }
-
- NamedNodeMap nodes = element.getAttributes();
-
- String ePrefix = element.getPrefix();
- if (ePrefix == null) {
- ePrefix = "";
- }
-
- if (nodes != null) {
- for (int i = 0; i < nodes.getLength(); i++) {
- Node node = nodes.item(i);
- String prefix = node.getPrefix();
- String localName = node.getLocalName();
- String value = node.getNodeValue();
- String name = node.getNodeName();
-
- if (prefix == null) {
- prefix = "";
- }
-
- if (name != null && "xmlns".equals(name)) {
- frame.uris.add(value);
- frame.prefixes.add("");
- } else if (prefix.length() > 0 && "xmlns".equals(prefix)) {
- frame.uris.add(value);
- frame.prefixes.add(localName);
- } else if (name.startsWith("xmlns:")) {
- prefix = name.substring(6);
- frame.uris.add(value);
- frame.prefixes.add(prefix);
- } else {
- frame.attributes.add(node);
- }
- }
- }
- }
-
- public final Node getCurrentNode() {
- return getCurrentFrame().element;
- }
- public final Element getCurrentElement() {
- return (Element)getCurrentFrame().element;
- }
-
- @Override
- protected ElementFrame<Node, Node> getChildFrame() {
- return new ElementFrame<Node, Node>(getCurrentFrame().currentChild,
- getCurrentFrame());
- }
-
- @Override
- protected boolean hasMoreChildren() {
- if (getCurrentFrame().currentChild == null) {
- return getCurrentNode().getFirstChild() != null;
- }
- return getCurrentFrame().currentChild.getNextSibling() != null;
- }
-
- @Override
- protected int nextChild() {
- ElementFrame<Node, Node> frame = getCurrentFrame();
- if (frame.currentChild == null) {
- content = getCurrentNode().getFirstChild();
- } else {
- content = frame.currentChild.getNextSibling();
- }
-
- frame.currentChild = content;
- switch (content.getNodeType()) {
- case Node.ELEMENT_NODE:
- return START_ELEMENT;
- case Node.TEXT_NODE:
- return CHARACTERS;
- case Node.COMMENT_NODE:
- return COMMENT;
- case Node.CDATA_SECTION_NODE:
- return CDATA;
- case Node.ENTITY_REFERENCE_NODE:
- return ENTITY_REFERENCE;
- case Node.PROCESSING_INSTRUCTION_NODE:
- return PROCESSING_INSTRUCTION;
- default:
- throw new IllegalStateException("Found type: " + content.getClass().getName());
- }
- }
-
- @Override
- public String getElementText() throws XMLStreamException {
- String result = DOMUtils.getRawContent(content);
-
- ElementFrame<Node, Node> frame = getCurrentFrame();
- frame.ended = true;
- currentEvent = END_ELEMENT;
- endElement();
-
- // we should not return null according to the StAx API javadoc
- return result != null ? result : "";
- }
-
- @Override
- public String getNamespaceURI(String prefix) {
- ElementFrame<Node, Node> frame = getCurrentFrame();
-
- while (null != frame) {
- int index = frame.prefixes.indexOf(prefix);
- if (index != -1) {
- return frame.uris.get(index);
- }
-
- if (frame.parent == null && frame.getElement() instanceof Element) {
- return ((Element)frame.getElement()).lookupNamespaceURI(prefix);
- }
- frame = frame.parent;
- }
-
- return null;
- }
-
- public String getAttributeValue(String ns, String local) {
- Attr at;
- if (ns == null || ns.equals("")) {
- at = getCurrentElement().getAttributeNode(local);
- } else {
- at = getCurrentElement().getAttributeNodeNS(ns, local);
- }
-
- if (at == null) {
- return null;
- }
- return at.getNodeValue();
- }
-
- public int getAttributeCount() {
- return getCurrentFrame().attributes.size();
- }
-
- Attr getAttribute(int i) {
- return (Attr)getCurrentFrame().attributes.get(i);
- }
-
- private String getLocalName(Attr attr) {
-
- String name = attr.getLocalName();
- if (name == null) {
- name = attr.getNodeName();
- }
- return name;
- }
-
- public QName getAttributeName(int i) {
- Attr at = getAttribute(i);
-
- String prefix = at.getPrefix();
- String ln = getLocalName(at);
- // at.getNodeName();
- String ns = at.getNamespaceURI();
-
- if (prefix == null) {
- return new QName(ns, ln);
- }
- return new QName(ns, ln, prefix);
- }
-
- public String getAttributeNamespace(int i) {
- return getAttribute(i).getNamespaceURI();
- }
-
- public String getAttributeLocalName(int i) {
- Attr attr = getAttribute(i);
- return getLocalName(attr);
- }
-
- public String getAttributePrefix(int i) {
- return getAttribute(i).getPrefix();
- }
-
- public String getAttributeType(int i) {
- Attr attr = getAttribute(i);
- if (attr.isId()) {
- return "ID";
- }
- TypeInfo schemaType = null;
- try {
- schemaType = attr.getSchemaTypeInfo();
- } catch (Throwable t) {
- //DOM level 2?
- schemaType = null;
- }
- return (schemaType == null) ? "CDATA"
- : schemaType.getTypeName() == null ? "CDATA" : schemaType.getTypeName();
- }
-
-
- public String getAttributeValue(int i) {
- return getAttribute(i).getValue();
- }
-
- public boolean isAttributeSpecified(int i) {
- return getAttribute(i).getValue() != null;
- }
-
- public int getNamespaceCount() {
- return getCurrentFrame().prefixes.size();
- }
-
- public String getNamespacePrefix(int i) {
- return getCurrentFrame().prefixes.get(i);
- }
-
- public String getNamespaceURI(int i) {
- return getCurrentFrame().uris.get(i);
- }
-
- public NamespaceContext getNamespaceContext() {
- return context;
- }
-
- public String getText() {
- if (content instanceof Text) {
- return ((Text)content).getData();
- } else if (content instanceof Comment) {
- return ((Comment)content).getData();
- }
- return DOMUtils.getRawContent(getCurrentNode());
- }
-
- public char[] getTextCharacters() {
- return getText().toCharArray();
- }
-
- public int getTextStart() {
- return 0;
- }
-
- public int getTextLength() {
- return getText().length();
- }
-
- public String getEncoding() {
- return null;
- }
-
- public QName getName() {
- Node el = getCurrentNode();
-
- String prefix = getPrefix();
- String ln = getLocalName();
-
- return new QName(el.getNamespaceURI(), ln, prefix);
- }
-
- public String getLocalName() {
- String ln = getCurrentNode().getLocalName();
- if (ln == null) {
- ln = getCurrentNode().getNodeName();
- if (ln.indexOf(":") != -1) {
- ln = ln.substring(ln.indexOf(":") + 1);
- }
- }
- return ln;
- }
-
- public String getNamespaceURI() {
- String ln = getCurrentNode().getLocalName();
- if (ln == null) {
- ln = getCurrentNode().getNodeName();
- if (ln.indexOf(":") == -1) {
- ln = getNamespaceURI("");
- } else {
- ln = getNamespaceURI(ln.substring(0, ln.indexOf(":")));
- }
- return ln;
- }
- return getCurrentNode().getNamespaceURI();
- }
-
- public String getPrefix() {
- String prefix = getCurrentNode().getPrefix();
- if (prefix == null) {
- String nodeName = getCurrentNode().getNodeName();
- if (nodeName.indexOf(":") != -1) {
- prefix = nodeName.substring(0, nodeName.indexOf(":"));
- } else {
- prefix = "";
- }
- }
- return prefix;
- }
-
- public String getPITarget() {
- return ((ProcessingInstruction)content).getTarget();
- }
-
- public String getPIData() {
- return ((ProcessingInstruction)content).getData();
- }
- public Location getLocation() {
- try {
- Object o = getCurrentNode().getUserData("location");
- if (o instanceof Location) {
- return (Location)o;
- }
- } catch (Throwable ex) {
- //ignore, probably not DOM level 3
- }
- return super.getLocation();
- }
-
-
-}
diff --git a/src/main/java/org/apache/xml/security/staxutils/W3CNamespaceContext.java b/src/main/java/org/apache/xml/security/staxutils/W3CNamespaceContext.java
deleted file mode 100644
index 647e6dc..0000000
--- a/src/main/java/org/apache/xml/security/staxutils/W3CNamespaceContext.java
+++ /dev/null
@@ -1,141 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.xml.security.staxutils;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import javax.xml.namespace.NamespaceContext;
-
-import org.w3c.dom.Attr;
-import org.w3c.dom.Element;
-import org.w3c.dom.NamedNodeMap;
-import org.w3c.dom.Node;
-
-public class W3CNamespaceContext implements NamespaceContext {
- private Element currentNode;
- private NamespaceContext outNamespaceContext;
-
- public W3CNamespaceContext() {
- }
- public W3CNamespaceContext(Element el) {
- currentNode = el;
- }
-
- public void setOutNamespaceContext(NamespaceContext context) {
- outNamespaceContext = context;
- }
-
- public String getNamespaceURI(String prefix) {
- String name = prefix;
- if (name.length() == 0) {
- name = "xmlns";
- } else {
- name = "xmlns:" + prefix;
- }
-
- return getNamespaceURI(currentNode, name);
- }
-
- private String getNamespaceURI(Element e, String name) {
- if (e == null) {
- return null;
- }
- // check the outside namespace URI
- if (outNamespaceContext != null) {
- String result = outNamespaceContext.getNamespaceURI(name);
- if (result != null) {
- return result;
- }
- }
-
- Attr attr = e.getAttributeNode(name);
- if (attr == null) {
- Node n = e.getParentNode();
- if (n instanceof Element && n != e) {
- return getNamespaceURI((Element)n, name);
- }
- } else {
- return attr.getValue();
- }
-
- return null;
- }
-
- public String getPrefix(String uri) {
- return getPrefix(currentNode, uri);
- }
-
- private String getPrefix(Element e, String uri) {
- if (e == null) {
- return null;
- }
- // check the outside namespace URI
- if (outNamespaceContext != null) {
- String result = outNamespaceContext.getPrefix(uri);
- if (result != null) {
- return result;
- }
- }
-
- NamedNodeMap attributes = e.getAttributes();
- if (attributes != null) {
- for (int i = 0; i < attributes.getLength(); i++) {
- Attr a = (Attr)attributes.item(i);
-
- String val = a.getValue();
- if (val != null && val.equals(uri)) {
- String name = a.getLocalName();
- if ("xmlns".equals(name)) {
- return "";
- }
- return name;
- }
- }
- }
-
- Node n = e.getParentNode();
- if (n instanceof Element && n != e) {
- return getPrefix((Element)n, uri);
- }
-
- return null;
- }
-
- public Iterator<String> getPrefixes(String uri) {
- List<String> prefixes = new ArrayList<>();
-
- String prefix = getPrefix(uri);
- if (prefix != null) {
- prefixes.add(prefix);
- }
-
- return prefixes.iterator();
- }
-
- public Element getElement() {
- return currentNode;
- }
-
- public void setElement(Element node) {
- this.currentNode = node;
- }
-}
diff --git a/src/main/java/org/apache/xml/security/transforms/implementations/TransformBase64Decode.java b/src/main/java/org/apache/xml/security/transforms/implementations/TransformBase64Decode.java
index b96841f..11f72d2 100644
--- a/src/main/java/org/apache/xml/security/transforms/implementations/TransformBase64Decode.java
+++ b/src/main/java/org/apache/xml/security/transforms/implementations/TransformBase64Decode.java
@@ -22,7 +22,6 @@
import java.io.OutputStream;
import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.stream.XMLStreamException;
import org.apache.xml.security.c14n.CanonicalizationException;
import org.apache.xml.security.signature.XMLSignatureInput;
@@ -157,8 +156,6 @@
throw new TransformationException(e, "c14n.Canonicalizer.Exception");
} catch (SAXException e) {
throw new TransformationException(e, "SAX exception");
- } catch (XMLStreamException e) {
- throw new TransformationException(e, "SAX exception");
}
}
diff --git a/src/main/java/org/apache/xml/security/transforms/implementations/TransformXPath2Filter.java b/src/main/java/org/apache/xml/security/transforms/implementations/TransformXPath2Filter.java
index 3726a8f..9844670 100644
--- a/src/main/java/org/apache/xml/security/transforms/implementations/TransformXPath2Filter.java
+++ b/src/main/java/org/apache/xml/security/transforms/implementations/TransformXPath2Filter.java
@@ -26,7 +26,6 @@
import java.util.Set;
import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.stream.XMLStreamException;
import javax.xml.transform.TransformerException;
import org.apache.xml.security.c14n.CanonicalizationException;
@@ -145,7 +144,11 @@
throw new TransformationException(ex);
} catch (XMLSecurityException ex) {
throw new TransformationException(ex);
- } catch (ParserConfigurationException | IOException | SAXException | XMLStreamException ex) {
+ } catch (SAXException ex) {
+ throw new TransformationException(ex);
+ } catch (IOException ex) {
+ throw new TransformationException(ex);
+ } catch (ParserConfigurationException ex) {
throw new TransformationException(ex);
}
}
diff --git a/src/main/java/org/apache/xml/security/utils/XMLUtils.java b/src/main/java/org/apache/xml/security/utils/XMLUtils.java
index a9d83c4..b70aab3 100644
--- a/src/main/java/org/apache/xml/security/utils/XMLUtils.java
+++ b/src/main/java/org/apache/xml/security/utils/XMLUtils.java
@@ -31,15 +31,14 @@
import java.util.List;
import java.util.Set;
+import javax.xml.XMLConstants;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.stream.XMLStreamException;
-import javax.xml.stream.XMLStreamReader;
import org.apache.xml.security.c14n.CanonicalizationException;
import org.apache.xml.security.c14n.Canonicalizer;
import org.apache.xml.security.c14n.InvalidCanonicalizerException;
-import org.apache.xml.security.staxutils.DOMUtils;
-import org.apache.xml.security.staxutils.StaxUtils;
import org.w3c.dom.Attr;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
@@ -60,6 +59,13 @@
AccessController.doPrivileged(
(PrivilegedAction<Boolean>) () -> Boolean.getBoolean("org.apache.xml.security.ignoreLineBreaks"));
+ @SuppressWarnings("unchecked")
+ private static final WeakObjectPool<DocumentBuilder, ParserConfigurationException> pools[] = new WeakObjectPool[2];
+ static {
+ pools[0] = new DocumentBuilderPool(false);
+ pools[1] = new DocumentBuilderPool(true);
+ }
+
private static volatile String dsPrefix = "ds";
private static volatile String ds11Prefix = "dsig11";
private static volatile String xencPrefix = "xenc";
@@ -998,61 +1004,55 @@
}
public static Document newDocument() throws ParserConfigurationException {
- return DOMUtils.newDocument(true);
+ DocumentBuilder documentBuilder = createDocumentBuilder(true);
+ Document doc = documentBuilder.newDocument();
+ repoolDocumentBuilder(documentBuilder, true);
+ return doc;
}
- public static Document read(InputStream inputStream) throws ParserConfigurationException, SAXException, IOException, XMLStreamException {
+ public static Document read(InputStream inputStream) throws ParserConfigurationException, SAXException, IOException {
return read(inputStream, true);
}
- public static Document read(InputStream inputStream, boolean disAllowDocTypeDeclarations)
- throws ParserConfigurationException, SAXException, IOException, XMLStreamException {
- XMLStreamReader reader = StaxUtils.createXMLStreamReader(inputStream, disAllowDocTypeDeclarations);
- try {
- Document doc = DOMUtils.newDocument(disAllowDocTypeDeclarations);
- if (reader.getLocation().getSystemId() != null) {
- try {
- doc.setDocumentURI(reader.getLocation().getSystemId());
- } catch (Exception e) {
- //ignore - probably not DOM level 3
- }
- }
- StaxUtils.readDocElements(doc, doc, reader, true, false);
- return doc;
- } finally {
- try {
- reader.close();
- } catch (Exception ex) {
- //ignore
- }
- }
+ public static Document read(InputStream inputStream, boolean disAllowDocTypeDeclarations) throws ParserConfigurationException, SAXException, IOException {
+ DocumentBuilder documentBuilder = createDocumentBuilder(disAllowDocTypeDeclarations);
+ Document doc = documentBuilder.parse(inputStream);
+ repoolDocumentBuilder(documentBuilder, disAllowDocTypeDeclarations);
+ return doc;
}
- public static Document read(InputSource inputSource) throws ParserConfigurationException, SAXException, IOException, XMLStreamException {
+ public static Document read(String uri, boolean disAllowDocTypeDeclarations)
+ throws ParserConfigurationException, SAXException, IOException {
+ DocumentBuilder documentBuilder = createDocumentBuilder(disAllowDocTypeDeclarations);
+ Document doc = documentBuilder.parse(uri);
+ repoolDocumentBuilder(documentBuilder, disAllowDocTypeDeclarations);
+ return doc;
+ }
+
+ public static Document read(InputSource inputSource) throws ParserConfigurationException, SAXException, IOException {
return read(inputSource, true);
}
public static Document read(InputSource inputSource, boolean disAllowDocTypeDeclarations)
- throws ParserConfigurationException, SAXException, IOException, XMLStreamException {
- XMLStreamReader reader = StaxUtils.createXMLStreamReader(inputSource, disAllowDocTypeDeclarations);
- try {
- Document doc = DOMUtils.newDocument(disAllowDocTypeDeclarations);
- if (reader.getLocation().getSystemId() != null) {
- try {
- doc.setDocumentURI(reader.getLocation().getSystemId());
- } catch (Exception e) {
- //ignore - probably not DOM level 3
- }
- }
- StaxUtils.readDocElements(doc, doc, reader, true, false);
- return doc;
- } finally {
- try {
- reader.close();
- } catch (Exception ex) {
- //ignore
- }
- }
+ throws ParserConfigurationException, SAXException, IOException {
+ DocumentBuilder documentBuilder = createDocumentBuilder(disAllowDocTypeDeclarations);
+ Document doc = documentBuilder.parse(inputSource);
+ repoolDocumentBuilder(documentBuilder, disAllowDocTypeDeclarations);
+ return doc;
+ }
+
+ private static DocumentBuilder createDocumentBuilder(
+ boolean disAllowDocTypeDeclarations
+ ) throws ParserConfigurationException {
+ int idx = getPoolsIndex(disAllowDocTypeDeclarations);
+ return pools[idx].getObject();
+ }
+
+
+ private static boolean repoolDocumentBuilder(DocumentBuilder db, boolean disAllowDocTypeDeclarations) {
+ db.reset();
+ int idx = getPoolsIndex(disAllowDocTypeDeclarations);
+ return pools[idx].repool(db);
}
/**
@@ -1100,4 +1100,34 @@
return resizedBytes;
}
+ private static final class DocumentBuilderPool
+ extends WeakObjectPool<DocumentBuilder, ParserConfigurationException> {
+
+ private final boolean disAllowDocTypeDeclarations;
+
+ public DocumentBuilderPool(boolean disAllowDocTypeDeclarations) {
+ this.disAllowDocTypeDeclarations = disAllowDocTypeDeclarations;
+ }
+
+ @Override
+ protected DocumentBuilder createObject() throws ParserConfigurationException {
+ DocumentBuilderFactory dfactory = DocumentBuilderFactory.newInstance();
+ dfactory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, Boolean.TRUE);
+ if (disAllowDocTypeDeclarations) {
+ dfactory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
+ }
+ dfactory.setNamespaceAware(true);
+ return dfactory.newDocumentBuilder();
+ }
+ }
+
+ /**
+ * Maps the boolean configuration options for the factories to the array index for the WeakObjectPool
+ * @param disAllowDocTypeDeclarations
+ * @return the index to the {@link #pools}
+ */
+ private static int getPoolsIndex(boolean disAllowDocTypeDeclarations) {
+ return disAllowDocTypeDeclarations ? 1 : 0;
+ }
+
}
diff --git a/src/test/java/org/apache/xml/security/test/dom/TestUtils.java b/src/test/java/org/apache/xml/security/test/dom/TestUtils.java
index 53f9484..8bdacc2 100644
--- a/src/test/java/org/apache/xml/security/test/dom/TestUtils.java
+++ b/src/test/java/org/apache/xml/security/test/dom/TestUtils.java
@@ -18,19 +18,9 @@
*/
package org.apache.xml.security.test.dom;
-import java.io.FileInputStream;
-import java.io.IOException;
-
-import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.stream.XMLStreamException;
-import javax.xml.stream.XMLStreamReader;
-
-import org.apache.xml.security.staxutils.DOMUtils;
-import org.apache.xml.security.staxutils.StaxUtils;
import org.apache.xml.security.utils.Constants;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
-import org.xml.sax.SAXException;
public class TestUtils {
@@ -52,27 +42,4 @@
return ctx;
}
- public static Document read(String uri, String systemId, boolean disAllowDocTypeDeclarations)
- throws ParserConfigurationException, SAXException, IOException, XMLStreamException {
- XMLStreamReader reader = StaxUtils.createXMLStreamReader(systemId, new FileInputStream(uri), disAllowDocTypeDeclarations);
- try {
- Document doc = DOMUtils.newDocument(disAllowDocTypeDeclarations);
- if (reader.getLocation().getSystemId() != null) {
- try {
- doc.setDocumentURI(reader.getLocation().getSystemId());
- } catch (Exception e) {
- //ignore - probably not DOM level 3
- }
- }
- StaxUtils.readDocElements(doc, doc, reader, true, false);
- return doc;
- } finally {
- try {
- reader.close();
- } catch (Exception ex) {
- //ignore
- }
- }
- }
-
}
diff --git a/src/test/java/org/apache/xml/security/test/dom/c14n/implementations/Canonicalizer11Test.java b/src/test/java/org/apache/xml/security/test/dom/c14n/implementations/Canonicalizer11Test.java
index 841e03a..326bd33 100644
--- a/src/test/java/org/apache/xml/security/test/dom/c14n/implementations/Canonicalizer11Test.java
+++ b/src/test/java/org/apache/xml/security/test/dom/c14n/implementations/Canonicalizer11Test.java
@@ -30,8 +30,8 @@
import org.apache.xml.security.c14n.Canonicalizer;
import org.apache.xml.security.test.dom.DSNamespaceContext;
-import org.apache.xml.security.test.dom.TestUtils;
import org.apache.xml.security.utils.JavaUtils;
+import org.apache.xml.security.utils.XMLUtils;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
@@ -245,8 +245,7 @@
Map<String, String> namespaces
) throws Exception {
- String systemId = "target/test-classes/org/apache/xml/security/c14n/in/xyz";
- Document doc = TestUtils.read(fileIn, systemId, false);
+ Document doc = XMLUtils.read(fileIn, false);
Canonicalizer c14n = Canonicalizer.getInstance(c14nURI);
byte[] c14nBytes = null;
diff --git a/src/test/java/org/apache/xml/security/test/dom/c14n/implementations/Canonicalizer20010315Test.java b/src/test/java/org/apache/xml/security/test/dom/c14n/implementations/Canonicalizer20010315Test.java
index 2922121..fb83ff7 100644
--- a/src/test/java/org/apache/xml/security/test/dom/c14n/implementations/Canonicalizer20010315Test.java
+++ b/src/test/java/org/apache/xml/security/test/dom/c14n/implementations/Canonicalizer20010315Test.java
@@ -40,7 +40,6 @@
import org.apache.xml.security.c14n.CanonicalizationException;
import org.apache.xml.security.c14n.Canonicalizer;
import org.apache.xml.security.test.dom.DSNamespaceContext;
-import org.apache.xml.security.test.dom.TestUtils;
import org.apache.xml.security.utils.JavaUtils;
import org.apache.xml.security.utils.XMLUtils;
import org.w3c.dom.Document;
@@ -712,8 +711,7 @@
Map<String, String> namespaces
) throws Exception {
- String systemId = "target/test-classes/org/apache/xml/security/c14n/in/xyz";
- Document doc = TestUtils.read(fileIn, systemId, false);
+ Document doc = XMLUtils.read(fileIn, false);
Canonicalizer c14n = Canonicalizer.getInstance(c14nURI);
diff --git a/src/test/java/org/apache/xml/security/test/dom/interop/InteropTestBase.java b/src/test/java/org/apache/xml/security/test/dom/interop/InteropTestBase.java
index 27742fa..e483347 100644
--- a/src/test/java/org/apache/xml/security/test/dom/interop/InteropTestBase.java
+++ b/src/test/java/org/apache/xml/security/test/dom/interop/InteropTestBase.java
@@ -36,7 +36,6 @@
import org.apache.xml.security.signature.reference.ReferenceNodeSetData;
import org.apache.xml.security.signature.reference.ReferenceOctetStreamData;
import org.apache.xml.security.test.dom.DSNamespaceContext;
-import org.apache.xml.security.test.dom.TestUtils;
import org.apache.xml.security.utils.XMLUtils;
import org.apache.xml.security.utils.resolver.ResourceResolverSpi;
import org.w3c.dom.Element;
@@ -94,13 +93,8 @@
public boolean verify(String filename, ResourceResolverSpi resolver,
boolean followManifests, boolean secureValidation)
throws Exception {
- return verify(filename, resolver, null, followManifests, secureValidation);
- }
-
- public boolean verify(String filename, ResourceResolverSpi resolver, String systemId,
- boolean followManifests, boolean secureValidation)
- throws Exception {
- org.w3c.dom.Document doc = TestUtils.read(filename, systemId, false);
+ File f = new File(filename);
+ org.w3c.dom.Document doc = XMLUtils.read(new FileInputStream(f), false);
XPathFactory xpf = XPathFactory.newInstance();
XPath xpath = xpf.newXPath();
@@ -109,7 +103,6 @@
String expression = "//ds:Signature[1]";
Element sigElement =
(Element) xpath.evaluate(expression, doc, XPathConstants.NODE);
- File f = new File(filename);
XMLSignature signature = new XMLSignature(sigElement, f.toURI().toURL().toString(), secureValidation);
if (resolver != null) {