JSM が開始すると、system/AxisDefault.properties ファイル内の name の値エントリーが読み込まれ、スタティック・メソッド setProperty を使用する org.apache.axis.AxisProperties クラスに追加されます。
以下は AxisDefault.properties ファイルの例です。
#!<studio-project id="20000000-000000" name="lansa"> # # Axis default properties # axis.ClientConfigFile=system/axis-client-config.xml axis.ServerConfigFile=system/axis-server-config.xml # # axis.http.client.maximum.total.connections # axis.http.client.maximum.connections.per.host # axis.http.client.connection.pool.timeout # axis.http.client.connection.default.so.timeout # axis.http.client.connection.default.connection.timeout # axis.socketFactory # axis.socketSecureFactory # axis.ServerFactory # http.proxyHost # http.proxyPort # http.proxyUser # http.proxyPassword # http.nonProxyHosts # https.proxyHost # https.proxyPort # https.proxyUser # https.proxyPassword # https.nonProxyHosts # #!</studio-project>
Axis グローバル構成
Axis クライアント/サーバー構成
デフォルトでは、Axis はクライアント/サーバー構成用に jsmaxis.jar ファイルの org/apache/axis/client/client-config.wsdd ファイルと org/apache/axis/server/server-config.wsdd ファイルを使用します。
AxisDefault.properties のエントリー axis.ClientConfigFile および axis.ServerConfigFile は、異なる構成ファイルを使用するように Axis に指示します。
axis.ClientConfigFile=system/axis-client-config.xmlaxis.ServerConfigFile=system/axis-server-config.xml
Axis クライアント構成
<?xml version="1.0" encoding="utf-8"?> <deployment name="defaultClientConfiguration" xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"> <globalConfiguration> <parameter name="disablePrettyXML" value="true"/> <parameter name="addressing.sendReplyTo" value="true"/> <parameter name="enableNamespacePrefixOptimization" value="false"/> </globalConfiguration> <transport name="http" pivot="java:org.apache.axis.transport.http.HTTPSender"/> </deployment>
Axis サーバー構成
<?xml version="1.0" encoding="utf-8"?> <deployment name="defaultServerConfiguration" xmlns="http://xml.apache.org/axis/wsdd/"> <globalConfiguration> <parameter name="sendMultiRefs" value="false"/> <parameter name="dotNetSoapEncFix" value="true"/> <parameter name="disablePrettyXML" value="true"/> <parameter name="enableNamespacePrefixOptimization" value="false"/> </globalConfiguration> </deployment>
SOAP サーバー応答での MultiRef エンコーディングの無効化
Axisサーバー構成では、グローバルなsendMulitRefsパラメータを使用することにより、RPC/エンコードされた応答でのmultiRefの送信を無効にすることができます。
<parameter name="sendMultiRefs" value="false"/>
Axis での共通 HTTP クライアントの使用
デフォルトでは、Apache Axis 1.4はHTTP送信にorg.apache.axis.transport.http.HTTPSenderを使用します。
このデフォルト設定を、org.apache.commons.httpclientを使用するように変更できます。
構成内のtransport pivot属性を、CommonsHTTPSenderクラスを指し示すように変更します。
<transport name="http" pivot="java:org.apache.axis.transport.http.CommonsHTTPSender"/>
また、common.codec.1.3.jarとcommon-httpclient-3.0-rc4.jarをjarディレクトリに追加する必要があります。
http://jakarta.apache.org/commons/
http://jakarta.apache.org/commons/httpclient/
http://jakarta.apache.org/commons/httpclient/features
http://jakarta.apache.org/commons/httpclient/logging
http://jakarta.apache.org/site/downloads/downloads_commons
JSMDirect サーバーで共通 HTTP クライアントを使用する場合の問題
デフォルトでは、共通HTTPクライアントはHTTPプロトコル1.1を使用し、デフォルトでチャンク形式転送エンコーディングを使用します。
HTTPクライアント・プログラムがチャンク形式転送エンコーディングを送信する場合、内容の長さを送信することはできません。
JSMDirectは内容の長さを要求するため、HTTPクライアント・プログラムはSTDINを読み込みJSMに送信することができます。
そのため、JSM SOAPサーバー・サービスではSOAPメッセージ内容を受信しません。
SOAP Agentウィザードは、生成されたサービス・コードに以下のコードを入れることで、HTTPクライアント・プログラムに対してHTTP 1.0プロトコルを強制的に使用させることができます。
stub._setProperty ( org.apache.axis.MessageContext.HTTP_TRANSPORT_VERSION , org.apache.axis.transport.http.HTTPConstants.HEADER_PROTOCOL_V10 ) ;
SOAP 要求への SOAP ヘッダーの挿入
生成されたSOAP Agentのサービス・コードにコードを含めることで、SOAP要求にSOAPヘッダーを挿入できます。SOAP Agentウィザードでサービス・コードを生成すると、ファイルAGENT_INCLUDE.TXTの内容が生成されたコードに含まれます。
また、メッセージ・ハンドラーを使用してメッセージにSOAPヘッダーを追加することもできます。詳細は、「2.17 SOAP Agent メッセージ・ハンドラー」を参照してください。
/* Add SOAP header */ org.apache.axis.message.SOAPHeaderElement elementHead = new org.apache.axis.message.SOAPHeaderElement ( "namespace", "AuthHeader" ) ; javax.xml.soap.SOAPElement elementUserToken = elementHead.addChildElement ( "UserToken" ) ; javax.xml.soap.SOAPElement elementUserName = elementUserToken.addChildElement ( "UserName" ) ; elementUserName.addTextNode ( "username" ) ; javax.xml.soap.SOAPElement elementPassword = elementUserToken.addChildElement ( "Password" ) ; elementPassword.addTextNode ( "password" ) ; stub.setHeader ( elementHead ) ;