2.16 Axisメッセージ・ハンドラー
「SOAPエージェントメッセージ・ハンドラー」を参照してください。
Apache Axisを使用すると、カスタム・メッセージ・ハンドラーを作成して配布することができます。
これらのハンドラーでは、送信前にSOAP XMLメッセージに追加処理を行うことができます。
サービスの構成名を決めるには、LOG4Jのログを有効にしてSOAPエージェントサービスを一度実行します。
log4j.logger.org.apache.axis=DEBUG, FILE
log4j.additivity.org.apache.axis=false
LOG4J.TXTファイルでsetTargetService文字列を検索します。括弧内の値が構成サービス名です。
[DEBUG] [message.SOAPBody] addBodyElement - Adding body element to message...
[DEBUG] [client.Call] invoke - Enter: Call::invoke()
[DEBUG] [axis.MessageContext] setTargetService - MessageContext: setTargetService(MyServicePort)
構成ファイルに配布サービス・エントリーを追加します。
ハンドラー・タイプの値はカスタムJavaハンドラー・クラスです。
ハンドラー・インスタンスに構成パラメータを渡すこともできます。
<service name="MyServicePort">
<requestFlow>
<handler type="java:com.acme.axis.handler.MyHandler">
<parameter name="acme.keyword" value="value"/>
</handler>
</requestFlow>
</service>
カスタム・ハンドラー・クラスでは、org.apache.axis.handlers.BasicHandlerクラスを拡張する必要があります。
package com.acme.axis.handler ;
import org.apache.axis.AxisFault ;
import org.apache.axis.MessageContext ;
import org.apache.axis.message.PrefixedQName ;
import org.apache.axis.handlers.BasicHandler ;
import org.w3c.dom.Node ;
import org.w3c.dom.NodeList ;
import javax.xml.soap.Name ;
import javax.xml.soap.SOAPPart ;
import javax.xml.soap.SOAPBody ;
import javax.xml.soap.SOAPElement ;
import javax.xml.soap.SOAPMessage ;
import javax.xml.soap.SOAPEnvelope ;
import javax.xml.soap.SOAPException ;
import javax.xml.rpc.handler.soap.SOAPMessageContext ;
public class MyHandler extends BasicHandler
{
public void invoke ( MessageContext messageContext ) throws AxisFault
{
System.out.println ( "MyHandler: invoke" ) ;
String value = (String)getOption ( "acme.keyword" ) ;
modifyMessage ( messageContext ) ;
}
}