はじめまして。阿久津と申します。

axis1.1を用いてWebアプリケーションを作成しています。

wsdl2javaで作成されたスタブをハイパースレッド環境で複数newし、
同時にサービスを呼び出すと、スタブのcreateCall内のresisterTypeMappingが同時
に呼ばれてしまい
まれにSOAPメッセージを正しく受信できずにSAXExceptionが発生しました。

発生個所は以下です。
      at
org.apache.axis.encoding.ser.BeanDeserializer.onStartChild(BeanDeserializer.java:260)
      at
org.apache.axis.encoding.DeserializationContextImpl.startElement(DeserializationContextImpl.java:963)
      at
org.apache.axis.message.SAX2EventRecorder.replay(SAX2EventRecorder.java:198)
      at
org.apache.axis.message.MessageElement.publishToHandler(MessageElement.java:722)
      at
org.apache.axis.message.RPCElement.deserialize(RPCElement.java:323)
      at org.apache.axis.message.RPCElement.getParams(RPCElement.java:347)
      at org.apache.axis.client.Call.invoke(Call.java:2272)
      at org.apache.axis.client.Call.invoke(Call.java:2171)
      at org.apache.axis.client.Call.invoke(Call.java:1691)

とりあえずcreateCall内の”synchronized(this)”を”synchronized(staticなロック
オブジェクト)”に変更することで、問題は回避できました。

初歩的な話かも知れませんが、スタブはそもそも複数newして使用してはいけないと
いう仕様なのでしょうか?
(axis1.4からスタブを生成しても同様のようでした。)

どなたがご存知のかたがいらっしゃったら教えていただければと思います。

よろしくお願いいたします。






---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

メールによる返信