我正在尝试配置 CXF 总线,并为所有客户端设置通用超时。为此,我使用 HttpConduitFeature 并在初始配置期间将其添加到总线,如下所示:
@Configuration
public class CxfContext {
@Autowired
private SoapConfigurations soapConfigurations;
@Bean
public Bus bus() {
SpringBus b = new SpringBus();
List<Feature> features = ImmutableList.<Feature> builder() //
.add(loggingFeature()) //
.add(conduitFeature()) //
.build();
b.setFeatures(features);
return b;
}
private LoggingFeature loggingFeature() {
LoggingFeature f = new LoggingFeature();
f.setPrettyLogging(true);
f.setVerbose(true);
f.setLimit(-1);
return f;
}
private HttpConduitFeature conduitFeature() {
HttpConduitFeature feature = new HttpConduitFeature();
HttpConduitConfig conduitConfig = new HttpConduitConfig();
HTTPClientPolicy clientPolicy = new HTTPClientPolicy();
clientPolicy.setConnectionTimeout(10000);
clientPolicy.setReceiveTimeout(10000);
conduitConfig.setClientPolicy(clientPolicy);
feature.setConduitConfig(conduitConfig);
return feature;
}
}
Run Code Online (Sandbox Code Playgroud)
之后,在生成 Soap 客户端时,我使用 JaxWsProxyFactoryBean 并将总线设置为它:
@Configuration
public class SoapClientContext {
@Autowired
private Bus bus;
@Bean
public IService myService(SoapConfigurations soapConfigurations) {
JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
factory.setAddress(soapConfigurations.getUrl());
factory.setBus(bus);
return factory.create(IService.class);
}
}
Run Code Online (Sandbox Code Playgroud)
客户端正确使用总线中配置的日志记录功能,但未考虑 HttpConduitFeature。所以超时是默认的 1 分钟,而不是配置的 10 秒。
我现在看到的唯一解决方案是直接在工厂中设置 HttpConduitFeature:
JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
factory.setAddress(soapConfigurations.getUrl());
factory.setBus(bus);
factory.getFeatures().add(conduitFeature());
Run Code Online (Sandbox Code Playgroud)
我是否需要一些额外的配置,以便生成的客户端直接使用 Bus 中定义的 HttpConduitFeature ?
| 归档时间: |
|
| 查看次数: |
327 次 |
| 最近记录: |