/******************************************************************************
* Copyright (c) 2006, 2010 VMware Inc.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* and Apache License v2.0 which accompanies this distribution.
* The Eclipse Public License is available at
* http://www.eclipse.org/legal/epl-v10.html and the Apache License v2.0
* is available at http://www.opensource.org/licenses/apache2.0.php.
* You may elect to redistribute this code under either of these licenses.
*
* Contributors:
* VMware Inc.
*****************************************************************************/
package org.eclipse.gemini.blueprint.context.support;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.xml.DefaultDocumentLoader;
import org.springframework.beans.factory.xml.DocumentLoader;
/**
* Specialized {@link DocumentLoader} that allows blueprint configurations without a schema location to be properly
* validated.
*
* @author Costin Leau
*/
class BlueprintDocumentLoader extends DefaultDocumentLoader {
static final String JAXP_SCHEMA_SOURCE = "http://java.sun.com/xml/jaxp/properties/schemaSource";
static final String BLUEPRINT_SCHEMA = "http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd";
/** logger */
private static final Log log = LogFactory.getLog(BlueprintDocumentLoader.class);
@Override
protected DocumentBuilderFactory createDocumentBuilderFactory(int validationMode, boolean namespaceAware)
throws ParserConfigurationException {
DocumentBuilderFactory factory = super.createDocumentBuilderFactory(validationMode, namespaceAware);
try {
factory.setAttribute(JAXP_SCHEMA_SOURCE, BLUEPRINT_SCHEMA);
} catch (IllegalArgumentException ex) {
log.warn("Cannot work with attribute " + JAXP_SCHEMA_SOURCE
+ " - configurations w/o a schema locations will likely fail to validate", ex);
}
return factory;
}
}