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