rsitze 2002/06/13 06:33:04
Modified: java/src/org/apache/axis/utils XMLUtils.java
Log:
Patch supplied by Takashi Okamoto to correct thread unsafe
access to DocumentationBuilderFactory.
Eliminate (redundant!) side-effect in initDOMFactory,
rename to getDOMFactory, and make private.
Revision Changes Path
1.52 +12 -5 xml-axis/java/src/org/apache/axis/utils/XMLUtils.java
Index: XMLUtils.java
===================================================================
RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/utils/XMLUtils.java,v
retrieving revision 1.51
retrieving revision 1.52
diff -u -r1.51 -r1.52
--- XMLUtils.java 12 Jun 2002 18:45:58 -0000 1.51
+++ XMLUtils.java 13 Jun 2002 13:33:04 -0000 1.52
@@ -93,7 +93,7 @@
public static final String charEncoding = "ISO-8859-1";
- private static DocumentBuilderFactory dbf = initDOMFactory();
+ private static DocumentBuilderFactory dbf = getDOMFactory();
private static SAXParserFactory saxFactory;
private static Stack saxParsers = new Stack();
@@ -171,17 +171,19 @@
saxFactory.setValidating(validating);
}
- public static DocumentBuilderFactory initDOMFactory() {
+ private static DocumentBuilderFactory getDOMFactory() {
+ DocumentBuilderFactory dbf;
try {
dbf = DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(true);
}
catch( Exception e ) {
log.error(JavaUtils.getMessage("exception00"), e );
+ dbf = null;
}
return( dbf );
}
-
+
private static boolean tryReset= true;
/** Get a SAX parser instance from the JAXP factory.
@@ -231,7 +233,9 @@
public static Document newDocument() {
try {
- return dbf.newDocumentBuilder().newDocument();
+ synchronized (dbf) {
+ return dbf.newDocumentBuilder().newDocument();
+ }
} catch (Exception e) {
return null;
}
@@ -239,7 +243,10 @@
public static Document newDocument(InputSource inp) {
try {
- DocumentBuilder db = dbf.newDocumentBuilder();
+ DocumentBuilder db;
+ synchronized (dbf) {
+ db = dbf.newDocumentBuilder();
+ }
db.setErrorHandler( new ParserErrorHandler() );
return( db.parse( inp ) );
}