在Spring中动态配置远程Web服务端点

时间:2016-02-20 16:08:08

标签: java spring

我想从Spring应用程序调用远程SOAP / CXF Web服务。复杂的是我无法通过XML或Java配置在app启动时预先配置调用参数(远程端点URL)。相反,我需要从外部配置动态获取它们,每次调用都获取一个新值。 (实际上,配置由LDAP支持,可通过自定义Java库进行访问。)

¿Spring 4是否提供了实现这一目标的常用方法?

目前,我提供了以下自定义解决方案,但我不喜欢它,因为我需要至少定义一个虚拟代理类DynamicallyConfiguredMyService

@Component
class ParentBean {
    @Inject
    MyService service;
    ...
    service.doAction(); // calling WS
}

interface MyService {
    void doAction();
}

@Component
class DynamicallyConfiguredMyService implements MyService {
    void doAction() {
        getRealService.doAction();
    }

    private MyService getRealService() {
        String url = get URL from external config
        MyService endpoint = new MyServiceHelper().getMyService();
        Map<String, Object> ctx = ((BindingProvider) endpoint).getRequestContext();
        ctx.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, url);
        return endpoint;
    }
}

Spring 4,Java 7,JBoss EAP 6.4.x

0 个答案:

没有答案