Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Spring中动态配置远程web服务端点_Java_Spring - Fatal编程技术网

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

Java 在Spring中动态配置远程web服务端点,java,spring,Java,Spring,我想从Spring应用程序调用远程SOAP/CXF web服务。复杂的是,我无法在应用程序启动时通过XML或Java配置预先配置调用参数(远程端点URL)。相反,我需要从外部配置中动态地获取它们,每次调用都会获取一个新值。(实际上,配置是由LDAP和accessbible通过自定义Java库支持的。) Spring4是否提供了实现这一目标的通用方法 目前,我提供了以下定制解决方案,但我不太喜欢它,因为我至少需要定义一个虚拟代理类dynamicallyconfiguedmyservice @Com

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

Spring4是否提供了实现这一目标的通用方法

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

@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;
    }
}
@组件
类ParentBean{
@注入
我的服务;
...
service.doAction();//调用WS
}
接口MyService{
无效动作();
}
@组成部分
类dynamicallyconfigueredyservice实现MyService{
无效doAction(){
getRealService.doAction();
}
私有MyService getRealService(){
字符串url=从外部配置获取url
MyService端点=新建MyServiceHelper().getMyService();
映射ctx=((BindingProvider)端点).getRequestContext();
put(BindingProvider.ENDPOINT\地址\属性,url);
返回端点;
}
}
Spring4、Java7、JBossEAP6.4.x