質問: Axis はどのようにして、どのデプロイされたサービスを呼び出すかを解決しますか?

回答: Axis には、3つの組み込みオプションがあり、また自分用のカスタマイズができる、柔軟性のあるディスパッチ機構があります。Axis におけるサービスへのディスパッチは、実際にはMessageContextのサービスフィールドを設定することを意味します。なぜならディスパッチはあなたが設定した様々なハンドラの中を流れていくからです。一度サービスが設定されると、エンジンはサービスを適切な場面で呼び出すことができます。結局、誰が設定を行うのですか? それは、設定を行いたいあらゆるハンドラです。Axis におけるデフォルトのディスパッチ機構は URL によって行われます。ですからもし http://myhost/axis/services/WeatherReport にアクセスしたら"WeatherReport"サービスを受けることになります。Axis における HTTP トランスポートが、リクエストチェインにデプロイされたURLMapper (org.apache.axis.handlers.http.URLMapper)ハンドラを持っているので、この機構が働きます。URLMapperは入力された URL を受け取り、その最後の部分をサービスの名前として取り出し、現在のEngineConfigurationの中からその名前のサービスを検索しようとします。

同じく、SOAPAction HTTPヘッダを介してディスパッチするように、HTTPActionHandlerをデプロイすることができます。自分の好きなようにサービスを設定することもできます。例えば、もし単一のサービスに全てのメッセージを流し込むトランスポートを持っているならば、トランスポートがAxisEngineを呼ぶ前にMessageContextにそのサービスを設定するだけです。もしくは、もし SOAP ヘッダの内容や日時に基づいてディスパッチするならば、それを行うハンドラを書きます。

誰かが SOAP メッセージをデシリアライズする必要がある時に、どのハンドラもサービスを設定していなければ、最初ボディ要素の名前空間を使用して検索を試みます。ですから例えば、

<SOAP:Body>
  <ns:MyMethod xmlns:ns="http://ws.apache.org/axis/Weather"/>
</SOAP:Body>

このメッセージは、関連するサービスがあるかどうか名前空間マッピングリストの中の "http://ws.apache.org/axis/Weather" を検索します。

ja/axis/DeployedServiceTocall (last edited 2009-09-20 22:48:39 by localhost)