You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@cxf.apache.org by William Tam <em...@gmail.com> on 2008/04/24 22:29:27 UTC
Feature or bug
In AbstractFeature.initialize methods, unlike the "initialize server"
counterpart, the initialize method for client is not passing
client.getEndpoint() to the initializeProvider() method.
public abstract class AbstractFeature {
public void initialize(Server server, Bus bus) {
initializeProvider(server.getEndpoint(), bus);
}
public void initialize(Client client, Bus bus) {
initializeProvider(client, bus);
}
As a result, adding InFault interceptors to the (client) provider
inside the initializeProvider() method does not really end up putting
them in the fault interceptor chain since the
InFaultChainInitiatorObserver.initializeInterceptors() method only
looks for inFault interceptors in the following places.
protected void initializeInterceptors(Exchange ex,
PhaseInterceptorChain chain) {
Endpoint e = ex.get(Endpoint.class);
chain.add(e.getInFaultInterceptors());
chain.add(e.getBinding().getInFaultInterceptors());
chain.add(e.getService().getInFaultInterceptors());
chain.add(getBus().getInFaultInterceptors());
}
I can enter a Jira.
Thanks,
William
Re: Feature or bug
Posted by Daniel Kulp <dk...@apache.org>.
William,
This is an interesting observation and may explain some other issues
we've seen. Definitely log a bug.
Specifically, for the incoming chain, the client does:
List<Interceptor> i1 = bus.getInInterceptors();
List<Interceptor> i2 = endpoint.getInInterceptors();
List<Interceptor> i3 = this.getInInterceptors();
List<Interceptor> i4 = endpoint.getBinding().getInInterceptors();
Basically, bus+endpoint+client+binding
The fault is bus+endpoint+binding+service.
Both should definitely be the same and probably should be all 5:
bus+client+endpoint+binding+service.
(I need to think about the order a little bit more, but both should be
consistent)
Dan
On Thursday 24 April 2008, William Tam wrote:
> In AbstractFeature.initialize methods, unlike the "initialize server"
> counterpart, the initialize method for client is not passing
> client.getEndpoint() to the initializeProvider() method.
>
> public abstract class AbstractFeature {
> public void initialize(Server server, Bus bus) {
> initializeProvider(server.getEndpoint(), bus);
> }
>
> public void initialize(Client client, Bus bus) {
> initializeProvider(client, bus);
> }
>
> As a result, adding InFault interceptors to the (client) provider
> inside the initializeProvider() method does not really end up putting
> them in the fault interceptor chain since the
> InFaultChainInitiatorObserver.initializeInterceptors() method only
> looks for inFault interceptors in the following places.
>
> protected void initializeInterceptors(Exchange ex,
> PhaseInterceptorChain chain) {
> Endpoint e = ex.get(Endpoint.class);
>
> chain.add(e.getInFaultInterceptors());
> chain.add(e.getBinding().getInFaultInterceptors());
> chain.add(e.getService().getInFaultInterceptors());
> chain.add(getBus().getInFaultInterceptors());
> }
>
> I can enter a Jira.
>
> Thanks,
> William
--
J. Daniel Kulp
Principal Engineer, IONA
dkulp@apache.org
http://www.dankulp.com/blog