2.15 Axisプロパティ
JSMが開始すると、system/AxisDefault.propertiesファイル内の名前値エントリーが読み込まれ、スタティック・メソッドsetPropertyを使用するorg.apache.axis.AxisPropertiesクラスに追加されます。
以下はAxisDefault.propertiesファイルの例です。
#!<studio-project id="20000000-000000" name="lansa">
#
# Axisの省略値のプロパティ
#
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.xml
axis.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エージェントウィザードは、生成されたサービス・コードに以下のコードを入れることで、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エージェントのサービス・コードにコードを含めることで、SOAP要求にSOAPヘッダーを挿入できます。SOAPエージェントウィザードでサービス・コードを生成すると、ファイルAGENT_INCLUDE.TXTの内容が生成されたコードに含まれます。
また、メッセージ・ハンドラーを使用してメッセージにSOAPヘッダーを追加することもできます。「SOAPエージェントメッセージ・ハンドラー」を参照してください。
/*
SOAPヘッダーを追加する
*/
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 ) ;