Index: src/main/java/org/apache/jackrabbit/core/SessionImpl.java =================================================================== --- src/main/java/org/apache/jackrabbit/core/SessionImpl.java (revision 550753) +++ src/main/java/org/apache/jackrabbit/core/SessionImpl.java (working copy) @@ -16,40 +16,20 @@ */ package org.apache.jackrabbit.core; -import org.apache.commons.collections.IteratorUtils; -import org.apache.commons.collections.map.ReferenceMap; -import org.apache.jackrabbit.core.config.AccessManagerConfig; -import org.apache.jackrabbit.core.config.WorkspaceConfig; -import org.apache.jackrabbit.core.nodetype.NodeDefinitionImpl; -import org.apache.jackrabbit.core.nodetype.NodeTypeImpl; -import org.apache.jackrabbit.core.nodetype.NodeTypeManagerImpl; -import org.apache.jackrabbit.core.security.AMContext; -import org.apache.jackrabbit.core.security.AccessManager; -import org.apache.jackrabbit.core.security.AuthContext; -import org.apache.jackrabbit.core.security.SecurityConstants; -import org.apache.jackrabbit.core.state.NodeState; -import org.apache.jackrabbit.core.state.SessionItemStateManager; -import org.apache.jackrabbit.core.state.SharedItemStateManager; -import org.apache.jackrabbit.core.state.LocalItemStateManager; -import org.apache.jackrabbit.value.ValueFactoryImpl; -import org.apache.jackrabbit.core.version.VersionManager; -import org.apache.jackrabbit.core.xml.DocViewSAXEventGenerator; -import org.apache.jackrabbit.core.xml.ImportHandler; -import org.apache.jackrabbit.core.xml.SessionImporter; -import org.apache.jackrabbit.core.xml.SysViewSAXEventGenerator; -import org.apache.jackrabbit.core.util.Dumpable; -import org.apache.jackrabbit.core.lock.LockManager; -import org.apache.jackrabbit.name.NameException; -import org.apache.jackrabbit.name.NamePathResolver; -import org.apache.jackrabbit.name.NamespaceResolver; -import org.apache.jackrabbit.name.Path; -import org.apache.jackrabbit.name.QName; -import org.apache.jackrabbit.uuid.UUID; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.xml.sax.ContentHandler; -import org.xml.sax.InputSource; -import org.xml.sax.SAXException; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.io.PrintStream; +import java.security.AccessControlException; +import java.security.Principal; +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.Map; +import java.util.Set; import javax.jcr.AccessDeniedException; import javax.jcr.Credentials; @@ -74,33 +54,51 @@ import javax.jcr.nodetype.ConstraintViolationException; import javax.jcr.nodetype.NoSuchNodeTypeException; import javax.jcr.observation.EventListener; -import javax.jcr.observation.EventListenerIterator; import javax.jcr.observation.ObservationManager; import javax.jcr.version.VersionException; import javax.security.auth.Subject; import javax.xml.parsers.ParserConfigurationException; -import javax.xml.parsers.SAXParser; -import javax.xml.parsers.SAXParserFactory; import javax.xml.transform.OutputKeys; import javax.xml.transform.TransformerException; import javax.xml.transform.sax.SAXTransformerFactory; import javax.xml.transform.sax.TransformerHandler; import javax.xml.transform.stream.StreamResult; -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.io.PrintStream; -import java.security.AccessControlException; -import java.security.Principal; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Iterator; -import java.util.Map; -import java.util.Set; +import org.apache.commons.collections.IteratorUtils; +import org.apache.commons.collections.map.ReferenceMap; +import org.apache.jackrabbit.core.config.AccessManagerConfig; +import org.apache.jackrabbit.core.config.WorkspaceConfig; +import org.apache.jackrabbit.core.lock.LockManager; +import org.apache.jackrabbit.core.nodetype.NodeDefinitionImpl; +import org.apache.jackrabbit.core.nodetype.NodeTypeImpl; +import org.apache.jackrabbit.core.nodetype.NodeTypeManagerImpl; +import org.apache.jackrabbit.core.security.AMContext; +import org.apache.jackrabbit.core.security.AccessManager; +import org.apache.jackrabbit.core.security.AuthContext; +import org.apache.jackrabbit.core.security.SecurityConstants; +import org.apache.jackrabbit.core.state.LocalItemStateManager; +import org.apache.jackrabbit.core.state.NodeState; +import org.apache.jackrabbit.core.state.SessionItemStateManager; +import org.apache.jackrabbit.core.state.SharedItemStateManager; +import org.apache.jackrabbit.core.util.Dumpable; +import org.apache.jackrabbit.core.version.VersionManager; +import org.apache.jackrabbit.core.xml.DocViewSAXEventGenerator; +import org.apache.jackrabbit.core.xml.ImportHandler; +import org.apache.jackrabbit.core.xml.SAXParserProvider; +import org.apache.jackrabbit.core.xml.SessionImporter; +import org.apache.jackrabbit.core.xml.SysViewSAXEventGenerator; +import org.apache.jackrabbit.name.NameException; +import org.apache.jackrabbit.name.NamePathResolver; +import org.apache.jackrabbit.name.NamespaceResolver; +import org.apache.jackrabbit.name.Path; +import org.apache.jackrabbit.name.QName; +import org.apache.jackrabbit.uuid.UUID; +import org.apache.jackrabbit.value.ValueFactoryImpl; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.xml.sax.ContentHandler; +import org.xml.sax.InputSource; +import org.xml.sax.SAXException; /** * A SessionImpl ... @@ -1107,13 +1105,7 @@ ImportHandler handler = (ImportHandler) getImportContentHandler(parentAbsPath, uuidBehavior); try { - SAXParserFactory factory = SAXParserFactory.newInstance(); - factory.setNamespaceAware(true); - factory.setFeature( - "http://xml.org/sax/features/namespace-prefixes", false); - - SAXParser parser = factory.newSAXParser(); - parser.parse(new InputSource(in), handler); + SAXParserProvider.getParser().parse(new InputSource(in), handler); } catch (SAXException se) { // check for wrapped repository exception Exception e = se.getException(); Index: src/main/java/org/apache/jackrabbit/core/xml/SAXParserProvider.java =================================================================== --- src/main/java/org/apache/jackrabbit/core/xml/SAXParserProvider.java (revision 0) +++ src/main/java/org/apache/jackrabbit/core/xml/SAXParserProvider.java (revision 0) @@ -0,0 +1,51 @@ +/* + * 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.jackrabbit.core.xml; + +import javax.xml.parsers.ParserConfigurationException; +import javax.xml.parsers.SAXParser; +import javax.xml.parsers.SAXParserFactory; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.xml.sax.SAXException; + +/** Provides configured SAXParser instances and logs which + * parser class is being used. + */ +public class SAXParserProvider { + private static Logger log = LoggerFactory.getLogger(SAXParserProvider.class); + private static boolean infoLogged; + + /** Return a configured SAXParser */ + public static SAXParser getParser() throws SAXException, ParserConfigurationException { + // we could save the factory, but it's not threadsafe so keep it simple + SAXParserFactory factory = SAXParserFactory.newInstance(); + factory.setNamespaceAware(true); + factory.setFeature( + "http://xml.org/sax/features/namespace-prefixes", false); + SAXParser parser = factory.newSAXParser(); + + // log only once (not threadsafe but good enough ;-) + if(log.isInfoEnabled() && !infoLogged) { + log.info("Using SAXParser class " + parser.getClass().getName()); + infoLogged = true; + } + return parser; + } + +} \ No newline at end of file Property changes on: src/main/java/org/apache/jackrabbit/core/xml/SAXParserProvider.java ___________________________________________________________________ Name: svn:keywords + author date id revision url Name: svn:eol-style + native Index: src/main/java/org/apache/jackrabbit/core/WorkspaceImpl.java =================================================================== --- src/main/java/org/apache/jackrabbit/core/WorkspaceImpl.java (revision 550753) +++ src/main/java/org/apache/jackrabbit/core/WorkspaceImpl.java (working copy) @@ -30,6 +30,7 @@ import org.apache.jackrabbit.core.version.VersionSelector; import org.apache.jackrabbit.core.xml.ImportHandler; import org.apache.jackrabbit.core.xml.Importer; +import org.apache.jackrabbit.core.xml.SAXParserProvider; import org.apache.jackrabbit.core.xml.WorkspaceImporter; import org.apache.jackrabbit.name.NameException; import org.apache.jackrabbit.name.Path; @@ -725,13 +726,7 @@ ImportHandler handler = (ImportHandler) getImportContentHandler(parentAbsPath, uuidBehavior); try { - SAXParserFactory factory = SAXParserFactory.newInstance(); - factory.setNamespaceAware(true); - factory.setFeature( - "http://xml.org/sax/features/namespace-prefixes", false); - - SAXParser parser = factory.newSAXParser(); - parser.parse(new InputSource(in), handler); + SAXParserProvider.getParser().parse(new InputSource(in), handler); } catch (SAXException se) { // check for wrapped repository exception Exception e = se.getException();