1 package org.codehaus.xfire.plexus.config; 2 3 import java.io.File; 4 import java.io.FileNotFoundException; 5 import java.io.FileReader; 6 import java.io.InputStream; 7 import java.io.InputStreamReader; 8 import java.io.Reader; 9 10 import org.codehaus.plexus.configuration.PlexusConfiguration; 11 import org.codehaus.plexus.configuration.PlexusConfigurationException; 12 import org.codehaus.plexus.configuration.xml.XmlPlexusConfiguration; 13 import org.codehaus.plexus.personality.plexus.lifecycle.phase.Configurable; 14 import org.codehaus.plexus.personality.plexus.lifecycle.phase.Initializable; 15 import org.codehaus.plexus.util.xml.Xpp3DomBuilder; 16 import org.codehaus.xfire.plexus.PlexusXFireComponent; 17 import org.codehaus.xfire.service.Service; 18 19 /*** 20 * Loads in XFire components from the XFire configuration file. 21 * 22 * @author <a href="mailto:dan@envoisolutions.com">Dan Diephouse</a> 23 */ 24 public class DefaultConfigurationService 25 extends PlexusXFireComponent 26 implements Initializable, ConfigurationService, Configurable 27 { 28 private Configurator configurator; 29 30 private PlexusConfiguration services; 31 32 public void initialize() throws Exception 33 { 34 try 35 { 36 createServices(services); 37 38 Reader reader = findConfigurationReader(); 39 40 if ( reader == null ) 41 { 42 return; 43 } 44 45 PlexusConfiguration configuration = new XmlPlexusConfiguration( Xpp3DomBuilder.build(reader) ); 46 47 createServices( configuration.getChild("services") ); 48 } 49 catch( Exception e ) 50 { 51 getLogger().error("Could not start the configuration service.", e); 52 throw e; 53 } 54 } 55 56 private void createServices(PlexusConfiguration child) 57 throws Exception 58 { 59 PlexusConfiguration[] service = child.getChildren("service"); 60 61 for ( int i = 0; i < service.length; i++ ) 62 { 63 createService( service[i] ); 64 } 65 } 66 67 private void createService(PlexusConfiguration c) 68 throws Exception 69 { 70 Service service = configurator.createService(c); 71 } 72 73 protected Reader findConfigurationReader() throws FileNotFoundException 74 { 75 String configFileName = System.getProperty("xfire.config"); 76 77 Reader reader = null; 78 79 if ( configFileName == null ) 80 { 81 getLogger().info("No configuration file specified. Looking for xfire.xml in the current directory."); 82 configFileName = "xfire.xml"; 83 } 84 85 File file = new File( configFileName ); 86 87 if ( file.exists() ) 88 { 89 getLogger().info("Found configuration file " + file.getAbsolutePath()); 90 reader = new FileReader( file ); 91 } 92 else 93 { 94 getLogger().info("Could not find configuration file " + file.getAbsolutePath() + 95 ". Looking in the classpath."); 96 97 InputStream is = getClass().getResourceAsStream(configFileName); 98 99 if ( is == null ) 100 { 101 getLogger().info("Could not find configuration file " + configFileName + 102 " on classpath. Looking for META-INF/xfire/xfire.xml " + 103 "on the classpath"); 104 105 is = getClass().getResourceAsStream("META-INF/xfire/xfire.xml"); 106 107 if ( is == null ) 108 { 109 getLogger().info("No configuration found."); 110 return null; 111 } 112 } 113 114 reader = new InputStreamReader( is ); 115 } 116 117 return reader; 118 } 119 120 /*** 121 * @param arg0 122 * @throws PlexusConfigurationException 123 */ 124 public void configure(PlexusConfiguration config) 125 throws PlexusConfigurationException 126 { 127 services = config.getChild("services"); 128 } 129 }