Methods Summary |
---|
public void | addSource(org.w3c.dom.DOMImplementationSource s)Register an implementation.
if (s == null) {
throw new NullPointerException();
}
if (!sources.contains(s)) {
sources.addElement(s);
}
|
private static java.lang.ClassLoader | getClassLoader()Gets a class loader.
try {
ClassLoader contextClassLoader = getContextClassLoader();
if (contextClassLoader != null) {
return contextClassLoader;
}
} catch (Exception e) {
// Assume that the DOM application is in a JRE 1.1, use the
// current ClassLoader
return DOMImplementationRegistry.class.getClassLoader();
}
return DOMImplementationRegistry.class.getClassLoader();
|
private static java.lang.ClassLoader | getContextClassLoader()This method returns the ContextClassLoader or null if
running in a JRE 1.1
return isJRE11()
? null
: (ClassLoader)
AccessController.doPrivileged(new PrivilegedAction() {
public Object run() {
ClassLoader classLoader = null;
try {
classLoader =
Thread.currentThread().getContextClassLoader();
} catch (SecurityException ex) {
}
return classLoader;
}
});
|
public org.w3c.dom.DOMImplementation | getDOMImplementation(java.lang.String features)Return the first implementation that has the desired
features, or null if none is found.
int size = sources.size();
String name = null;
for (int i = 0; i < size; i++) {
DOMImplementationSource source =
(DOMImplementationSource) sources.elementAt(i);
DOMImplementation impl = source.getDOMImplementation(features);
if (impl != null) {
return impl;
}
}
return null;
|
public org.w3c.dom.DOMImplementationList | getDOMImplementationList(java.lang.String features)Return a list of implementations that support the
desired features.
final Vector implementations = new Vector();
int size = sources.size();
for (int i = 0; i < size; i++) {
DOMImplementationSource source =
(DOMImplementationSource) sources.elementAt(i);
DOMImplementationList impls =
source.getDOMImplementationList(features);
for (int j = 0; j < impls.getLength(); j++) {
DOMImplementation impl = impls.item(j);
implementations.addElement(impl);
}
}
return new DOMImplementationList() {
public DOMImplementation item(final int index) {
if (index >= 0 && index < implementations.size()) {
try {
return (DOMImplementation)
implementations.elementAt(index);
} catch (ArrayIndexOutOfBoundsException e) {
return null;
}
}
return null;
}
public int getLength() {
return implementations.size();
}
};
|
private static java.io.InputStream | getResourceAsStream(java.lang.ClassLoader classLoader, java.lang.String name)This method returns an Inputstream for the reading resource
META_INF/services/org.w3c.dom.DOMImplementationSourceList after checking
access control privileges. For a JRE 1.1, this check is not done.
if (isJRE11()) {
InputStream ris;
if (classLoader == null) {
ris = ClassLoader.getSystemResourceAsStream(name);
} else {
ris = classLoader.getResourceAsStream(name);
}
return ris;
} else {
return (InputStream)
AccessController.doPrivileged(new PrivilegedAction() {
public Object run() {
InputStream ris;
if (classLoader == null) {
ris =
ClassLoader.getSystemResourceAsStream(name);
} else {
ris = classLoader.getResourceAsStream(name);
}
return ris;
}
});
}
|
private static java.lang.String | getServiceValue(java.lang.ClassLoader classLoader)This method attempts to return the first line of the resource
META_INF/services/org.w3c.dom.DOMImplementationSourceList
from the provided ClassLoader.
String serviceId = "META-INF/services/" + PROPERTY;
// try to find services in CLASSPATH
try {
InputStream is = getResourceAsStream(classLoader, serviceId);
if (is != null) {
BufferedReader rd;
try {
rd =
new BufferedReader(new InputStreamReader(is, "UTF-8"),
DEFAULT_LINE_LENGTH);
} catch (java.io.UnsupportedEncodingException e) {
rd =
new BufferedReader(new InputStreamReader(is),
DEFAULT_LINE_LENGTH);
}
String serviceValue = rd.readLine();
rd.close();
if (serviceValue != null && serviceValue.length() > 0) {
return serviceValue;
}
}
} catch (Exception ex) {
return null;
}
return null;
|
private static java.lang.String | getSystemProperty(java.lang.String name)This method returns the system property indicated by the specified name
after checking access control privileges. For a JRE 1.1, this check is
not done.
return isJRE11()
? (String) System.getProperty(name)
: (String) AccessController.doPrivileged(new PrivilegedAction() {
public Object run() {
return System.getProperty(name);
}
});
|
private static boolean | isJRE11()A simple JRE (Java Runtime Environment) 1.1 test
try {
Class c = Class.forName("java.security.AccessController");
// java.security.AccessController existed since 1.2 so, if no
// exception was thrown, the DOM application is running in a JRE
// 1.2 or higher
return false;
} catch (Exception ex) {
// ignore
}
return true;
|
public static org.w3c.dom.bootstrap.DOMImplementationRegistry | newInstance()Obtain a new instance of a DOMImplementationRegistry .
The DOMImplementationRegistry is initialized by the
application or the implementation, depending on the context, by
first checking the value of the Java system property
org.w3c.dom.DOMImplementationSourceList and
the the service provider whose contents are at
"META_INF/services/org.w3c.dom.DOMImplementationSourceList "
The value of this property is a white-space separated list of
names of availables classes implementing the
DOMImplementationSource interface. Each class listed
in the class name list is instantiated and any exceptions
encountered are thrown to the application.
Vector sources = new Vector();
ClassLoader classLoader = getClassLoader();
// fetch system property:
String p = getSystemProperty(PROPERTY);
//
// if property is not specified then use contents of
// META_INF/org.w3c.dom.DOMImplementationSourceList from classpath
if (p == null) {
p = getServiceValue(classLoader);
}
if (p == null) {
//
// DOM Implementations can modify here to add *additional* fallback
// mechanisms to access a list of default DOMImplementationSources.
//fall back to JAXP implementation class com.sun.org.apache.xerces.internal.dom.DOMXSImplementationSourceImpl
p = FALLBACK_CLASS;
}
if (p != null) {
StringTokenizer st = new StringTokenizer(p);
while (st.hasMoreTokens()) {
String sourceName = st.nextToken();
// Use context class loader, falling back to Class.forName
// if and only if this fails...
Class sourceClass = null;
if (classLoader != null) {
sourceClass = classLoader.loadClass(sourceName);
} else {
sourceClass = Class.forName(sourceName);
}
DOMImplementationSource source =
(DOMImplementationSource) sourceClass.newInstance();
sources.addElement(source);
}
}
return new DOMImplementationRegistry(sources);
|