View Javadoc

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 }