Folks,
We've run into a issue whereby a fault thrown from an implementor is just being dropped on the floor, and an empty HTTP response returned to the client. After digging into it, it turns out that the problem is in the MultipleEndpointObserver. Unlike the single-endpoint ChainInitiationObserver, the MEO does not call setFaultObserver() on the in-interceptor-chain. As a result, predictably, when an exception is thrown from any interceptor in the in-chain, there's no fault observer available to dispatch a fault response, so the fault is just lost. In my case, the fault-throwing interceptor is the ServiceInvokerInterceptor, but I guess the same issue would impact on any other interceptor in the server-side in-chain. I guess the reason for this over-sight is that within MOE.onMessage() its not yet clear which of the multiple endpoints maintained by the MOE should provide the fault observer to set on the in-chain. The obvious fix is to call setFaultObserver() on the in-interceptor-chain in AbstractEndpointSelectionInterceptor.handleMessage(). However, my concern is that there's still a window into the dispatch before the endpoint selector interceptor is traversed ... e.g. the AttachmentInInterceptor, StaxInInterceptor, ReadHeadersInterceptor ... So rather than closing off a big gaping hole, I've just tightened it up to a small non-gaping hole :) Thoughts? /Eoghan ---------------------------- IONA Technologies PLC (registered in Ireland) Registered Number: 171387 Registered Address: The IONA Building, Shelbourne Road, Dublin 4, Ireland
