セクション 9. HTTP Server オペレーションの実装
このセクションでは、httpd.conf ファイルを使用して、リソース・プロパティー・フィールドの値を埋めていきます。実装では、WS-Security 認証を導入する必要がないように、リモート・クライアントに対して 3 つの プロパティーが読み取り専用として定義されています。また、これらのプロパティーを読み取り専用のままにしておけば、httpd プロセス実行中の変更を防止するためのチェックも、回避することができます。
プロパティーは起動後に変化することがないため、初期化中に httpd.conf からプロパティーを読み込んでおき、WSDL2Java が MyCapability クラスに作成したフィールドに、それらのプロパティーを保持することも可能です。この実装コードを MyCapability ファイルにコピー・アンド・ペーストしてください。
リスト 8. 実装コード
public void initialize()
throws SoapFault
{
super.initialize();
Map configParams = null;
try
{
configParams = readConfigFile("/apache-2.2/conf/httpd.conf");
}
catch (IOException error)
{
throw new SoapFault("Error while reading httpd.conf.", error);
}
_ServerName = (String)configParams.get("ServerName");
String portString = (String)configParams.get("Listen");
String threadsString = (String)configParams.get("ThreadsPerChild");
_PortNumber = Integer.valueOf(portString);
_ThreadsPerChild = Integer.valueOf(threadsString);
}
protected Map readConfigFile(String filePath)
throws IOException
{
BufferedReader reader = new BufferedReader(new FileReader(filePath));
String nextLine = null;
Map configParams = new HashMap();
while ((nextLine = reader.readLine()) != null)
{
nextLine = nextLine.trim();
// ignore comments and blank lines
if (nextLine.length() == 0 ||
nextLine.charAt(0) == '#' ||
nextLine.charAt(0) == '<')
continue;
int space = nextLine.indexOf(' ');
String name = nextLine.substring(0, space);
String value = nextLine.substring(space + 1);
configParams.put(name, value);
}
return configParams;
}
|
最初のメソッドは、基本クラスの initialize メソッド (すべての自己完結型開始タスクを機能が実行できるメソッド) をオーバーライドしています。このメソッドは、httpd.conf ファイル内にある「名前と値」の対を単純に java.util.Map に読み込んだ後、見つけた値を使ってクラスのフィールドを設定します。initialize メソッドが呼び出されるのは、Muse アプリケーションがいずれかの SOAP 要求にサービスを提供する前です。
2 番目のメソッドは、ファイルを解析して java.util.Map に渡し、入力データからコメント行とブランク行を入念に削除するという、実際のタスクを実行します。最後に、getter メソッドはそのままにしておく必要があります。これらの getter メソッドは、Muse の GetResourceProperty 実装から呼び出されたときに、httpd.conf から読み込まれた値を返します。
