Finally I found the answer.
On the server side, no matter what problem happened,
org.apache.soap.server.http.RPCRouterServlet will catch all the Throwable
and then set the status of HttpServletResponse to SC_INTERNAL_SERVER_ERROR,
that is, 500 server side error. This would not cause problem if you
When invoking a soap service I always check for the resp.generatedFault(), if
no fault then get the return value.
fe:
Response resp = call.invoke(url, null);
if (resp.generatedFault()) {
return resp.getFault();
}
if (resp.getReturnValue() != null) {
return resp.getReturnValue().getValu