Steven Huypens
Steven Huypens

Reputation: 46

How can I use the CXF HttpConduitFeature for DOSGi?

Has anyone succesfully used the CXF HttpConduitFeature for DOSGi ?

Looking at the CXF code for HttpConduitFeature.java

    public class HttpConduitFeature extends DelegatingFeature<HttpConduitFeature.Portable> {
    public HttpConduitFeature() {
        super(new Portable());
    }

    public void setConduitConfig(HttpConduitConfig conduitConfig) {
        delegate.setConduitConfig(conduitConfig);
    }

    public static class Portable implements AbstractPortableFeature {
        private HttpConduitConfig conduitConfig;

        @Override
        public void initialize(Client client, Bus bus) {
            Conduit conduit = client.getConduit();
            if (conduitConfig != null && conduit instanceof HTTPConduit) {
                conduitConfig.apply((HTTPConduit)conduit);
            }
        }

        public void setConduitConfig(HttpConduitConfig conduitConfig) {
            this.conduitConfig = conduitConfig;
        }
    }
}

And this method from the class JAXRSClientFactoryBean.java

    protected void applyFeatures(AbstractClient client) {
        if (getFeatures() != null) {
            getFeatures().forEach(feature -> {
                feature.initialize(client.getConfiguration(), getBus());
            });
        }
    }

Which is what happens from the RsProvider-class in CXF-DOSGi, I don't understand how the initialize() from the HttpConduitFeature.Portable class will ever get called..

I tried to create my own implementation, a copy from HttpConduitFeature, but with an override of the method initialize(final InterceptorProvider interceptorProvider, final Bus bus), but then I have nothing to add the conduitConfig to. I don't see how I can make progress here.

Anyone has a better idea to add a Basic Authentication AuthorizationPolicy to my DOSGi client ? This was my attempt :

public class BasicAuthorizationIntent implements IntentsProvider {

    @Override
    public List<?> getIntents() {
        HttpConduitConfig conduitConfig = new HttpConduitConfig();
        conduitConfig.setAuthorizationPolicy(basicAuthorization());

        HttpConduitFeature conduitFeature = new HttpConduitFeature();
        conduitFeature.setConduitConfig(conduitConfig);

        return Arrays.asList((Object) conduitFeature);
    }

    private AuthorizationPolicy basicAuthorization() {
        AuthorizationPolicy authorizationPolicy = new AuthorizationPolicy();
        authorizationPolicy.setUserName("dosgi");
        authorizationPolicy.setPassword("dosgi");
        authorizationPolicy.setAuthorizationType("Basic");

        return authorizationPolicy;
    }
}

Upvotes: 0

Views: 127

Answers (0)

Related Questions