cxf-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Seumas Soltysik <SSOLT...@progress.com>
Subject Issue with SoapTransportFactory
Date Mon, 15 Nov 2010 16:57:24 GMT
SoapTransportFactory extends AbstractTransportFactory which contains a protected Bus data member.
However, SoapTransportFactory has its own private Bus data member and does not make use of
the Bus data member inherited from AbstractTransportFactory. Why is this? Is this done on
purpose or is this an oversight?

public class SoapTransportFactory extends AbstractTransportFactory implements DestinationFactory,
    WSDLEndpointFactory, ConduitInitiator {    
    private Bus bus;
}

public abstract class AbstractTransportFactory {
    protected Bus bus;
}

In a testcase that I am developing this has led to problems. If I initialize an instance of
SoapTransportFactory using the cxf-extension-soap.xml configuration,  setTransportIDs() is
called on the base class AbstractTransportFactory which ultimately calls register() which
registers the transport IDs with the bus:

    public final void register() {
        if (null == bus) {
            return;
        }
        if (this instanceof DestinationFactory) {
            DestinationFactoryManager dfm = bus.getExtension(DestinationFactoryManager.class);
            if (null != dfm && getTransportIds() != null) {
                for (String ns : getTransportIds()) {
                    dfm.registerDestinationFactory(ns, (DestinationFactory)this);
                }
            }
        }

However, because AbstractTransportFactory has its own Bus instance, which is not initialized
and therefore null, the transport IDs are never registered with the Bus instance that is visible
to the SoapTransportFactory. I think this issue has been disguised by the fact that usually
SoapTransportFactory is not initialized without initializing other transport factories which
do the right thing registering namespaces with the Bus.




Mime
View raw message