Java Webservice konfigurierbar machen

Neben den üblichen Verdächtigen wie der web.xml kann man bei einem Java Webservice auch eine eigene Konfigurationsdatei verwenden. Am einfachsten geht dies unter Zuhilfenahme des von Java mitgelieferten java.util.Properties Objekts. Diesem muss der Pfad zur Konfigurationsdatei dann nur noch bekannt gemacht werden und schon kann man sie über eine einfach zu bedienende Schnittstelle auslesen.

Zunächst muss man allerdings den Pfad zu der Konfigdatei finden. Und das ist nicht immer ganz so einfach. Über den unten gezeigten Weg erhält man für die Variable propertiesPath einen Wert der etwa so lautet: "file:/path/to/webapp/WEB-INF/classes/myNamespace/myWebservice.class"

String propertiesPath = this.getClass()
			    .getProtectionDomain()
			    .getCodeSource()
			    .getLocation()
			    .toString();

Möchte man die Konfigurationsdatei nun zum Beispiel im Ordner WEB-INF/ platzieren muss man den String entsprechend zuschneiden:

int stopIndex   = propertiesPath.length() - "classes/myNamespace/myWebservice.class".length();
int startIndex  = 5; //"file:"
propertiesPath = propertiesPath.substring( startIndex, stopIndex );
propertiesPath += "myWebservice.properties";

Danach wird die Datei einfach über einen FileInputStream eingelesen und kann über die getProperty-Methoden des Properties-Objekts zugegriffen werden.

FileInputStream propsFis = null;

try {
   //read in properties
   Properties props = new Properties();
   propsFis = new FileInputStream( propertiesPath );
   props.load( propsFis );
   propsFis.close();

   this.mSomeString   = props.getProperty( "SomeString", "SomeDefaultValue" );
   this.mSomeBoolean = Boolean.parseBoolean( props.getProperty( "SomeBoolean", "false" ) );
}
catch ( Exception ex ) {
   //catch the exception
}

Mit Sicherheit gibt es auch andere Lösungen für diese Aufgabe. Ich freue mich wie immer über Kommentare zu diesem Thema.