When registering a receiver with the mule service, the Axis connector assumes that the endpoint is always async unless if the 'synchronous' property is explicitly set or if the protocol is one of a select few (http, https, tcp or ssl). Thus, when using the servlet provider, in an otherwise synchronous environment, axis services suddenly act in an asynchronous fashion.
The offending code is in AxisConnector.registerReceiverWithMuleService (excerpt):
//Default to using synchronous for socket based protocols unless the
//synchronous property has been set explicitly
boolean sync = false;
if(!receiver.getEndpoint().isSynchronousSet()) {
if (scheme.equals("http") || scheme.equals("https") || scheme.equals("ssl") || scheme.equals("tcp")) {
sync = true;
}
} else {
sync = receiver.getEndpoint().isSynchronous();
}
I think the best solution is to use the environment properties' default value for synchronous instead - that's the common concensus. Perhaps that way, the explicit checks for "protocols known to be synchronous" could be done away with, but I think that's secondary)
I haven't checked XFire or Glue implementations to see if they have similar issues.
If you agree to the fix, I can make the change.
This is the more gentle (safest) of the proposed strategies.
I can't think of any possible negative side effects. Please review!