Axis2でRPC通信をする際の問題 その2
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サービスの仕様なのか、バグなのかは良く分かってません。