You are viewing a plain text version of this content. The canonical link for it is here.
Posted to axis-user-ja@ws.apache.org by to...@nts.ricoh.co.jp on 2006/07/27 10:39:03 UTC

createCall

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

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: axis-user-ja-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-user-ja-help@ws.apache.org


Re: createCall

Posted by Toshiyuki Kimura <to...@apache.org>.
To: 阿久津さん

 はじめまして。
 木村と申します。

> 初歩的な話かも知れませんが、スタブはそもそも複数newして
> 使用してはいけないという仕様なのでしょうか?

 「複数newして使用してはいけない」という仕様がある訳では
ありません。実際、複数インスタンスを生成して動作している
例も報告されているので、不具合があるようであればAxis内の
バグの可能性も考えられます。

 完全に同一のソースである必要は無いのですが、現象が再現
可能なレベルのサンプルを共有することは可能でしょうか?

よろしくお願いします。
---
Toshi <to...@apache.org>

On Thu, 27 Jul 2006, tohru.akutsu@nts.ricoh.co.jp wrote:

> はじめまして。阿久津と申します。
>
> 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(DeserializationContextI$
>      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: axis-user-ja-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-user-ja-help@ws.apache.org