/******************************************************************************* * Copyright (c) 2007 Exadel, Inc. and Red Hat, Inc. * Distributed under license by Red Hat, Inc. All rights reserved. * This program is made available under the terms of the * Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Exadel, Inc. and Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.jboss.tools.common.model.util; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import org.jboss.tools.common.model.plugin.ModelPlugin; public class SafeDocumentBuilderFactory extends Thread { DocumentBuilder d = null; boolean validate = false; private SafeDocumentBuilderFactory(boolean validate) throws InterruptedException { this.validate = validate; setContextClassLoader(getClass().getClassLoader()); start(); join(); } public void run () { try { DocumentBuilderFactory f = DocumentBuilderFactory.newInstance(); if(validate) f.setValidating(validate); d = f.newDocumentBuilder(); } catch (ParserConfigurationException e) { ModelPlugin.getPluginLog().logError(e); } } public static DocumentBuilder createDocumentBuilder(boolean validating) { /* * This Thread call is workaround that except empty thread Context ClassLoader */ try { return new SafeDocumentBuilderFactory(validating).d; } catch (InterruptedException e) { ModelPlugin.getPluginLog().logError(e); return null; } } }