読者です 読者をやめる 読者になる 読者になる

Axis2でRPC通信をする際の問題 その2

Axis2 S2Axis

void のサービス呼び出しに失敗する

サービスのメソッドの戻り値が void の場合、同期型要求応答形式(InOut)の呼び出しに失敗してしまいます。
サーバ側では処理を受け付けるのですが、クライアント側で応答を処理する際に、以下のエラーが発生します。

Caused by: org.apache.axis2.AxisFault: Incoming message input stream is null
	at org.apache.axis2.transport.TransportUtils.createSOAPMessage(TransportUtils.java:64)
	at org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:349)
	at org.apache.axis2.description.OutInAxisOperationClient.execute(OutInAxisOperation.java:279)
	at org.apache.axis2.client.ServiceClient.sendReceive(ServiceClient.java:457)
	at org.apache.axis2.client.ServiceClient.sendReceive(ServiceClient.java:399)

void のメソッドは、一方向形式(InOnly)として処理されるのですが、その場合、SOAPのレスポンスメッセージが返ってくるわけではなく、「HTTP/1.1 202 Accepted」 のステータスが返ってくるだけのようです。

サービスのメソッドで、何らかの戻り値を設定すれば回避することができます。
これがWebサービスの仕様なのか、バグなのかは良く分かってません。