有没有人成功地将 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;
}
}