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