0

有没有人成功地将 CXF HttpConduitFeature 用于 DOSGi ?

查看 HttpConduitFeature.java 的 CXF 代码

    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;
        }
    }
}

这个方法来自 JAXRSClientFactoryBean.java 类

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

这是 CXF-DOSGi 中的 RsProvider 类发生的情况,我不明白 HttpConduitFeature.Portable 类中的 initialize() 将如何被调用..

我尝试创建自己的实现,从 HttpConduitFeature 复制,但是重写了方法initialize(final InterceptorProviderinterceptorProvider, final Bus bus),但是我没有任何东西可以添加conduitConfig。我看不出我怎么能在这里取得进展。

任何人都有更好的想法将基本身份验证 AuthorizationPolicy 添加到我的 DOSGi 客户端?这是我的尝试:

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;
    }
}
4

0 回答 0