詳細は、「2.17 SOAP Agent メッセージ・ハンドラー」を参照してください。

Apache Axisを使用すると、カスタム・メッセージ・ハンドラーを作成して配布することができます。

これらのハンドラーでは、送信前にSOAP XMLメッセージに追加処理を行うことができます。

サービスの構成名を決めるには、LOG4Jのログを有効にしてSOAP Agentサービスを一度実行します。

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 ) ;
 
    }
}
  • No labels