package org.jvnet.jaxb2_commons.plugin.spring; import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.jvnet.jaxb2_commons.plugin.AbstractParameterizablePlugin; import org.springframework.beans.factory.config.AutowireCapableBeanFactory; import org.springframework.context.support.AbstractXmlApplicationContext; import org.springframework.context.support.FileSystemXmlApplicationContext; import com.sun.tools.xjc.BadCommandLineException; import com.sun.tools.xjc.Options; import com.sun.tools.xjc.outline.Outline; public abstract class AbstractSpringConfigurablePlugin extends AbstractParameterizablePlugin { protected Log logger = LogFactory.getLog(getClass()); private AbstractXmlApplicationContext applicationContext; public AbstractXmlApplicationContext getApplicationContext() { return applicationContext; } protected String[] getDefaultConfigLocations() { return null; } private String[] configLocations = getDefaultConfigLocations(); public String[] getConfigLocations() { return configLocations; } public void setConfigLocations(String[] configLocations) { this.configLocations = configLocations; } protected int getAutowireMode() { return AutowireCapableBeanFactory.AUTOWIRE_BY_TYPE; } protected boolean isDependencyCheck() { return false; } public void init(Options options) throws Exception { } @Override protected void beforeRun(Outline outline, Options options) throws Exception { super.beforeRun(outline, options); final String[] configLocations = getConfigLocations(); if (!ArrayUtils.isEmpty(configLocations)) { final String configLocationsString = ArrayUtils .toString(configLocations); logger.debug("Loading application context from [" + configLocationsString + "]."); try { applicationContext = new FileSystemXmlApplicationContext( configLocations, false); applicationContext.setClassLoader(Thread.currentThread() .getContextClassLoader()); applicationContext.refresh(); if (getAutowireMode() != AutowireCapableBeanFactory.AUTOWIRE_NO) { applicationContext.getBeanFactory().autowireBeanProperties( this, getAutowireMode(), isDependencyCheck()); } } catch (Exception ex) { ex.printStackTrace(); ex.getCause().printStackTrace(); logger.error("Error loading applicaion context from [" + configLocationsString + "].", ex); throw new BadCommandLineException( "Error loading applicaion context from [" + configLocationsString + "].", ex); } } } }