public class DOMUtils extends Object
Modifier and Type | Field and Description |
---|---|
protected static String |
DATE_DELIMITER
The delimiter between date fields.
|
protected static String |
DATE_TIME_DELIMITER
The delimiter between date and time.
|
static String |
DOM_LVL3_XERCES_MIN_VERSION_PROPERTY
This property may be used with
XSecProvider.setSysProperty(String, String) to change the
minimum required version. |
static String |
NamespaceSpecNS
Namespace of the namespace declaration.
|
static String |
NamespaceSpecNSPrefix
The prefix for namespace declarations
|
static int |
NamespaceSpecNSPrefixLength
The length of xmlns:.
|
protected static String |
NO_DELIMITER
The delimiter to use to get all the rest.
|
static String[] |
nodeTypes |
static String |
NS_DTD
Namespace of the XML specification in lieu for DTDs.
|
static String |
NS_XMLSCHEMA
Namespace of the XMLSchema specification in lieu for XSDs.
|
protected static String |
TIME_DELIMITER
The delimiter between time fields.
|
protected static String |
TIME_ZONE_PREFIX
The characters that can precede a time zone information.
|
protected static String |
WHITESPACE_DELIMITER
The delimiter to use for being able to handle leading and trailing
whitespace.
|
static String |
XERCES_VERSION_CLASS_PROPERTY
This property may be used with
XSecProvider.setSysProperty(String, String) to use
"com.sun.org.apache.xerces.internal.impl.Version" instead of "org.apache.xerces.impl.Version"
to check the Version of Xerces. |
Constructor and Description |
---|
DOMUtils() |
Modifier and Type | Method and Description |
---|---|
static void |
addBigIntegerToElement(Element e,
BigInteger bigInteger)
Adds the given BigInteger
bigInteger as text node to the
element e . |
static void |
addBytesToElement(Element element,
byte[] bytes)
|
static void |
addBytesToElement(Element element,
byte[] bytes,
byte[] linebreak)
|
static void |
addBytesToElement(Element element,
InputStream bytes)
|
static void |
addBytesToElement(Element element,
InputStream bytes,
byte[] linebreak)
|
static void |
addDateTimeToElement(Element e,
Date dateTime)
Adds the given Date
dateTime as text node to the element
e . |
static void |
addNSDeclAttribute(Element element,
String nameSpaceURI,
String nameSpacePrefix)
Adds a namespace-declaration attribute to the element provided.
|
static void |
addReturnToElement(Element e)
Appends an text node containing an carriage return to the given element.
|
static void |
addTextToElement(Element e,
String text)
Adds the given String
text as text node to the element
e . |
static byte[] |
bigInteger2byteArray(BigInteger bigPositiveInt)
Converts a
BigInteger to a byte[] . |
static String |
bytesToBase64String(byte[] bytes,
byte[] linebreak)
Base64-encodes the given
bytes . |
static Element |
createElementPNS(Document doc,
String localName,
String namespaceURI,
DOMSignContext domSignContext)
Creates a DOM Level 2
Element in the given
Document with the given local name, in the given namespace and
the prefix computed by getQualifiedName(java.lang.String, java.lang.String, javax.xml.crypto.dsig.dom.DOMSignContext) . |
static void |
createNSDeclAttribute(DOMCryptoContext context,
Element parent,
String namespaceURI)
Creates a marshaled namespace declaration attribute.
|
static List |
distributeNSDeclarations(Element specElement)
This method is part of a workaround necessary to cope with differences in
the tree model of XPath and DOM with respect to namespace declarations
(TreeModelWorkaround).
|
static String |
DOM_LVL3_XERCES_MIN_VERSION() |
static String |
getAllTextFromChildren(Element element)
Gets the text of all text node children of
element . |
static BigInteger |
getBigIntegerFromElementChildrens(Element element)
Gets the BigInteger value from its text representation from the elements
children.
|
static byte[] |
getBytesFromElementChildrens(Element element)
Gets the bytes of all text node children of
element and
returns the base64-decoded result as byte array. |
static InputStream |
getBytesFromElementChildrensStream(Element element)
Gets the bytes of all text node children of the given
element
and returns the base64-decoded result as InputStream . |
static Date |
getDateTimeFromElementChildren(Element element)
Gets the date from its text representation from the
element s
children. |
static Document |
getDocFromDOMCryptoContext(DOMCryptoContext context)
|
static DOMImplementationLS |
getDOMImplementationLS() |
static Map |
getInScopeNSDecls(Element element)
Returns a map of all namespace declarations in-scope of the given element
|
static Document |
getOwnerDocument(Node node)
Returns the owner document of the specified node.
|
static Node |
getParentFromDOMCryptoContext(DOMCryptoContext context)
Returns the parent
Document of the given context . |
static String |
getQualifiedName(String localName,
String namespaceURI,
DOMSignContext domSignContext)
Computes the qualified name from the given
localName ,
namespaceURI and the default prefix mapping of the
domMarshalOutput .The qualified name consists of a namespace prefix and the local name of this Property . |
static boolean |
isAtLeastVersion(String dotSeparatedVersion,
String minimumRequiredVersion)
Checks whether a dotSeparatedVersion String is newer than or equal to a
given minimumRequiredVersion String.
|
static boolean |
isXML11(Node n)
This method determines whether a Node's Document is XML 1.1
|
static Document |
newDocument(Boolean namespaceAware,
Boolean ignoringElementContentWhitespace,
Boolean expandEntityReferences)
Creates a new and empty
Document . |
static String |
nodeToString(Node node)
Returns a simplified String representation of
Node for debugging. |
static Document |
parse(InputStream input)
Deprecated.
This method should not be used as entity resolution is not
controlled. Use
parse(InputStream, String, String, String, Boolean, Boolean, Boolean, String, String, Object)
instead. |
static Document |
parse(InputStream input,
Boolean namespaceAware,
Boolean ignoringElementContentWhitespace,
Boolean expandEntityReferences,
String schemaLocation)
Deprecated.
This Method uses a simple heuristic to determine the schemaType
and then calls
parse(InputStream, Boolean, Boolean, Boolean, String, String)
. If schemaLocation != null and ends with ".dtd" the schema
type is "http://www.w3.org/TR/REC-xml", otherwise the schema
type defaults to "http://www.w3.org/2001/XMLSchema". However it
is recommended to use
parse(InputStream, String, String, String, Boolean, Boolean, Boolean, String, String, Object)
directly. |
static Document |
parse(InputStream input,
Boolean namespaceAware,
Boolean ignoringElementContentWhitespace,
Boolean expandEntityReferences,
String schemaType,
String schemaLocation)
Deprecated.
This method should not be used as entity resolution is not
controlled. Use
parse(InputStream, String, String, String, Boolean, Boolean, Boolean, String, String, Object)
instead. |
static Document |
parse(InputStream input,
String systemId,
String publicId,
String baseURI,
Boolean namespaceAware,
Boolean ignoringElementContentWhitespace,
Boolean expandEntityReferences,
String schemaType,
String schemaLocation) |
static Document |
parse(InputStream input,
String systemId,
String publicId,
String baseURI,
Boolean namespaceAware,
Boolean ignoringElementContentWhitespace,
Boolean expandEntityReferences,
String schemaType,
String schemaLocation,
Object resourceResolver)
This method uses the DOM Level 3 API to parse an XML document.
|
static Document |
parse(InputStream input,
String systemId,
String publicId,
String baseURI,
Boolean namespaceAware,
Boolean ignoringElementContentWhitespace,
Boolean expandEntityReferences,
String schemaType,
String schemaLocation,
Object resourceResolver,
Object errorHandler)
Parses a document without using a (XERCES) security manager.
|
static Document |
parse(InputStream input,
String systemId,
String publicId,
String baseURI,
Boolean namespaceAware,
Boolean ignoringElementContentWhitespace,
Boolean expandEntityReferences,
String schemaType,
String schemaLocation,
Object resourceResolver,
Object errorHandler,
Object securityManager)
This method uses the DOM Level 3 API to parse an XML document.
|
static Document |
parse(InputStream input,
String systemId,
String publicId,
String baseURI,
String schemaLocation)
Deprecated.
This method should not be used as entity resolution is not
controlled. Use
parse(InputStream, String, String, String, Boolean, Boolean, Boolean, String, String, Object)
instead. |
static Document |
parse(InputStream input,
String systemId,
String publicId,
XMLCryptoContext context) |
protected static Date |
parseDateTime(String dateTimeString)
Parse the dateTime string that has the format as specified in XML Schema
Datatypes.
|
static void |
serialize(Document doc,
OutputStream os)
Serialized the
Document to the OutputStream using DOM Level
3 Load and Save API if available. |
static void |
withdrawDistributedNSDeclarations(Element element,
List addedNSDecls)
This method is part of a workaround necessary to cope with differences in
the tree model of XPath and DOM with respect to namespace declarations
(TreeModelWorkaround).
|
static String |
XERCES_VERSION_CLASS() |
public static final String NamespaceSpecNS
public static final String NS_XMLSCHEMA
public static final String NS_DTD
public static final String NamespaceSpecNSPrefix
public static final int NamespaceSpecNSPrefixLength
protected static final String DATE_DELIMITER
protected static final String TIME_DELIMITER
protected static final String DATE_TIME_DELIMITER
protected static final String TIME_ZONE_PREFIX
protected static final String WHITESPACE_DELIMITER
protected static final String NO_DELIMITER
public static final String XERCES_VERSION_CLASS_PROPERTY
XSecProvider.setSysProperty(String, String)
to use
"com.sun.org.apache.xerces.internal.impl.Version" instead of "org.apache.xerces.impl.Version"
to check the Version of Xerces. XSECT is tested against the standard apache Xerces library,
if used with the sun/oracle repackaged versions please do extensive sign/verify cross testing.public static final String DOM_LVL3_XERCES_MIN_VERSION_PROPERTY
XSecProvider.setSysProperty(String, String)
to change the
minimum required version.public static final String[] nodeTypes
protected static Date parseDateTime(String dateTimeString)
dateTimeString
- The dateTime string.public static byte[] bigInteger2byteArray(BigInteger bigPositiveInt)
BigInteger
to a byte[]
.bigPositiveInt
- A positive BigInteger
.byte[]
representation of the BigInteger
public static String getAllTextFromChildren(Element element)
element
.element
- the elementelement
's
text node children.public static byte[] getBytesFromElementChildrens(Element element) throws IOException
element
and
returns the base64-decoded result as byte array.element
- the element to get all child text nodes fromIOException
public static InputStream getBytesFromElementChildrensStream(Element element) throws IOException
element
and returns the base64-decoded result as InputStream
.element
- the element to get all child text nodes fromIOException
public static Date getDateTimeFromElementChildren(Element element) throws ParseException
element
s
children.element
- the element to the text node children fromParseException
- if parsing the date failspublic static BigInteger getBigIntegerFromElementChildrens(Element element) throws NumberFormatException
element
- the element to get the text node children fromNumberFormatException
- if parsing the value failspublic static void addReturnToElement(Element e)
e
- the element to append the text node topublic static void addTextToElement(Element e, String text)
text
as text node to the element
e
.e
- the element to append the text node totext
- the value of the text node to appendpublic static void addDateTimeToElement(Element e, Date dateTime)
dateTime
as text node to the element
e
.e
- the element to append the text node todateTime
- the date value to append, null
means the current date.public static void addBigIntegerToElement(Element e, BigInteger bigInteger)
bigInteger
as text node to the
element e
.e
- the element to append to text node tobigInteger
- the BigInteger value to appendpublic static void addBytesToElement(Element element, byte[] bytes) throws IOException
element
- the element to append the text nodebytes
- the bytes to be encodedIOException
- if the encoding fails for any reasonpublic static String bytesToBase64String(byte[] bytes, byte[] linebreak) throws IOException
bytes
.bytes
- the bytes to be encodedlinebreak
- the line breakString
IOException
- if the encoding fails for any reasonpublic static void addBytesToElement(Element element, byte[] bytes, byte[] linebreak) throws IOException
element
- the element to append the text nodebytes
- the bytes to be encodedlinebreak
- the line breakIOException
- if the encoding fails for any reasonpublic static void addBytesToElement(Element element, InputStream bytes) throws IOException
element
- the element to append the text nodebytes
- the bytes to be encodedIOException
- if the encoding fails for any reasonpublic static void addBytesToElement(Element element, InputStream bytes, byte[] linebreak) throws IOException
element
- the element to append the text nodebytes
- the bytes to be encodedlinebreak
- the line breakIOException
- if the encoding fails for any reasonpublic static String getQualifiedName(String localName, String namespaceURI, DOMSignContext domSignContext)
localName
,
namespaceURI
and the default prefix mapping of the
domMarshalOutput
.Property
. If the domMarshalOutput
contains a
default prefix for the given namespaceURI
this prefix is used,
else the namespace prefix is left empty.localName
- The localname of the element.namespaceURI
- The namespace URI of the element.domSignContext
- The context.public static Element createElementPNS(Document doc, String localName, String namespaceURI, DOMSignContext domSignContext)
Element
in the given
Document
with the given local name, in the given namespace and
the prefix computed by getQualifiedName(java.lang.String, java.lang.String, javax.xml.crypto.dsig.dom.DOMSignContext)
.doc
- the document to create the element forlocalName
- the local name of the elementnamespaceURI
- the namespace URI of the namespace of the elementdomSignContext
- the contextpublic static void addNSDeclAttribute(Element element, String nameSpaceURI, String nameSpacePrefix)
element
- the element to add the namespace-declaration attribute tonameSpaceURI
- the namespace URInameSpacePrefix
- the namespace prefixpublic static Document getOwnerDocument(Node node)
node
- the nodepublic static Node getParentFromDOMCryptoContext(DOMCryptoContext context)
Document
of the given context
.context
- the context to get the parent frompublic static Document getDocFromDOMCryptoContext(DOMCryptoContext context)
context
- the context to get the Document frompublic static Map getInScopeNSDecls(Element element)
element
- the element to get all in-scope namespace declarations forpublic static void createNSDeclAttribute(DOMCryptoContext context, Element parent, String namespaceURI) throws MarshalException
context
- the DOMMarshalContext
holding context information about
the marshaling of this DOMStructure
parent
- is the Element the attributes are associated to.namespaceURI
- the namespace URI to create the namespace declaration attribute forMarshalException
- if the marshaling fails for any reasonpublic static void withdrawDistributedNSDeclarations(Element element, List addedNSDecls)
This method is part of a workaround necessary to cope with differences in the tree model of XPath and DOM with respect to namespace declarations (TreeModelWorkaround).
Removes all namespace declarations specified in parameterCaddedNSDecls
from the owner document of the specified DOM
element. If the owner document of a namespace declaration is not the
specified owner document of the specified DOM element, or if the owner
element of a namespace declaration is not set, the declaration will be
ignored.element
- A DOM element part of the DOM document to remove the namespace
declarations from. Must not be null
.addedNSDecls
- A List containing objects of type org.w3c.dom.Attr
representing the namespace declarations to be removed. Must not be
null
.public static List distributeNSDeclarations(Element specElement)
This method is part of a workaround necessary to cope with differences in the tree model of XPath and DOM with respect to namespace declarations (TreeModelWorkaround).
Takes the owner document of the specified DOM element and distributes all
namespace declarations (i. e. attributes named xmlns
or with a
name prefix xmlns:
) to all elements of the document. This
means, that all namespace declarations which are in scope for a particular
element being part of the owner document, will be explicitly set after an
invocation of this method.
If the parameter skipStylesheet
is true
,
namespace declarations are not distributed to an element elem if it
fulfills all of the following conditions:
stylesheet
or
transform
.http://www.w3.org/1999/XSL/Transform
.specElement
or one of
its ancestors is an XML Signature element (dsig:Signature) and elem
is a descendant of that XML Signature element as well.specElement
- An element part of the document to be treated as explained above.public static String XERCES_VERSION_CLASS()
public static String DOM_LVL3_XERCES_MIN_VERSION()
public static boolean isAtLeastVersion(String dotSeparatedVersion, String minimumRequiredVersion)
dotSeparatedVersion
- the version to be checkedminimumRequiredVersion
- the minimum version requiredNumberFormatException
- if the values separated by dots aren't integers.public static DOMImplementationLS getDOMImplementationLS()
DOMImplementationLS
or null if not
available.public static Document parse(InputStream input, String systemId, String publicId, String baseURI, Boolean namespaceAware, Boolean ignoringElementContentWhitespace, Boolean expandEntityReferences, String schemaType, String schemaLocation, Object resourceResolver) throws ParserConfigurationException, SAXException, IOException
public static Document parse(InputStream input, String systemId, String publicId, String baseURI, Boolean namespaceAware, Boolean ignoringElementContentWhitespace, Boolean expandEntityReferences, String schemaType, String schemaLocation, Object resourceResolver, Object errorHandler) throws ParserConfigurationException, SAXException, IOException
parse(InputStream, String, String, String, Boolean, Boolean, Boolean, String, String, Object, Object, Object)
input
- systemId
- publicId
- baseURI
- namespaceAware
- ignoringElementContentWhitespace
- expandEntityReferences
- schemaType
- schemaLocation
- resourceResolver
- errorHandler
- ParserConfigurationException
SAXException
IOException
parse(InputStream, String, String, String, Boolean, Boolean, Boolean, String, String, Object, Object, Object)
public static Document parse(InputStream input, String systemId, String publicId, String baseURI, Boolean namespaceAware, Boolean ignoringElementContentWhitespace, Boolean expandEntityReferences, String schemaType, String schemaLocation, Object resourceResolver, Object errorHandler, Object securityManager) throws ParserConfigurationException, SAXException, IOException
input
- the binary input stream.systemId
- the system
identifier, that shall be interpreted as the resource or
location of the binary input stream. It will be used for relative
URI reference resolution. Refer also to
LSInput.setSystemId(java.lang.String)
.publicId
- the public
identifier, may be used resource resolvers instead of the system
identifier. Refer also to
LSInput.setPublicId(java.lang.String)
.baseURI
- it will be used for resolving a relative systemId. Refer also to
LSInput.setBaseURI(java.lang.String)
.namespaceAware
- namespacesignoringElementContentWhitespace
- the negation of element-content-whitespaceexpandEntityReferences
- is the inversion of entitiesschemaType
- schema-typeschemaLocation
- schema-locationresourceResolver
- resource-resolver Can be either an XMLCryptoContext
providing a URIDereferencer
, a
LSResourceResolver
or a
EntityResolver
in systems where DOM LS API is not available.errorHandler
- error-handler Can be either a DOMErrorHandler
or an
ErrorHandler
in systems where DOM LS API is not available.securityManager
- security-manager.ParserConfigurationException
SAXException
IOException
public static Document parse(InputStream input, String systemId, String publicId, XMLCryptoContext context) throws ParserConfigurationException, SAXException, IOException
public static Document parse(InputStream input, String systemId, String publicId, String baseURI, Boolean namespaceAware, Boolean ignoringElementContentWhitespace, Boolean expandEntityReferences, String schemaType, String schemaLocation) throws ParserConfigurationException, SAXException, IOException
public static Document parse(InputStream input) throws ParserConfigurationException, SAXException, IOException
parse(InputStream, String, String, String, Boolean, Boolean, Boolean, String, String, Object)
instead.input
- the stream containing the xml Document in a serialized form.IOException
SAXException
ParserConfigurationException
parse(InputStream, String, String, String, Boolean, Boolean, Boolean,
String, String, Object)
public static Document parse(InputStream input, Boolean namespaceAware, Boolean ignoringElementContentWhitespace, Boolean expandEntityReferences, String schemaLocation) throws ParserConfigurationException, SAXException, IOException
parse(InputStream, Boolean, Boolean, Boolean, String, String)
. If schemaLocation != null and ends with ".dtd" the schema
type is "http://www.w3.org/TR/REC-xml", otherwise the schema
type defaults to "http://www.w3.org/2001/XMLSchema". However it
is recommended to use
parse(InputStream, String, String, String, Boolean, Boolean, Boolean, String, String, Object)
directly.public static Document parse(InputStream input, Boolean namespaceAware, Boolean ignoringElementContentWhitespace, Boolean expandEntityReferences, String schemaType, String schemaLocation) throws ParserConfigurationException, SAXException, IOException
parse(InputStream, String, String, String, Boolean, Boolean, Boolean, String, String, Object)
instead.input
- the binary input stream.namespaceAware
- namespacesignoringElementContentWhitespace
- element-content-whitespaceexpandEntityReferences
- is the inversion of entitiesschemaType
- schema-typeschemaLocation
- schema-locationParserConfigurationException
SAXException
IOException
parse(InputStream, String, String, String, Boolean, Boolean, Boolean,
String, String)
public static Document parse(InputStream input, String systemId, String publicId, String baseURI, String schemaLocation) throws ParserConfigurationException, SAXException, IOException
parse(InputStream, String, String, String, Boolean, Boolean, Boolean, String, String, Object)
instead.input
- the binary input stream.systemId
- the system
identifier, that shall be interpreted as the resource or
location of the binary input stream. It will be used for relative
URI reference resolution. Refer also to
LSInput.setSystemId(java.lang.String)
.publicId
- the public
identifier, may be used resource resolvers instead of the system
identifier. Refer also to
LSInput.setPublicId(java.lang.String)
.baseURI
- it will be used for resolving a relative systemId. Refer also to
LSInput.setBaseURI(java.lang.String)
.schemaLocation
- schema-locationParserConfigurationException
SAXException
IOException
public static Document newDocument(Boolean namespaceAware, Boolean ignoringElementContentWhitespace, Boolean expandEntityReferences) throws ParserConfigurationException
Document
.public static boolean isXML11(Node n)
n
- the node to be tested.public static void serialize(Document doc, OutputStream os) throws TransformerException
Document
to the OutputStream
using DOM Level
3 Load and Save API if available. Defaults to TransformerFactory
otherwise.doc
- the Document
os
- the OutputStream
TransformerException
© 2002-2005 IAIK, © 2004, 2006 - 2019 Stiftung SIC