Как я могу внедрить компонент (ы) веб-службы прокси-клиента Apache-CXF, зарегистрированный в BeanDefinitionRegistryPostProcessor? - PullRequest
0 голосов
/ 17 октября 2018

Я регистрирую определение bean-компонента в классе BeanDefinitionRegistryPostProcessor X-проекта.Эти компоненты создаются методом create Apache-CXF (JaxWsProxyFactoryBean).

BeanDefinitionBuilder builder = BeanDefinitionBuilder
                            .genericBeanDefinition(Class.forName(endpoint.getServiceName()));
builder.addConstructorArgValue(Class.forName(endpoint.getServiceName()));
builder.addConstructorArgValue(endpointUrl);
builder.setFactoryMethodOnBean("create", "jaxWsProxyCreator");

registry.registerBeanDefinition(endpoint.getServiceName(), builder.getBeanDefinition());
LOGGER.info("Registred endpoint url like : " + endpointUrl);

Класс JaxWsProxyCreator:

public class JaxWsProxyCreator extends JaxWsProxyFactoryBean{

    private static final Logger logger = LoggerFactory.getLogger(JaxWsProxyCreator.class);

    public JaxWsProxyCreator(){
        super();
    }

    public Object create(Class<?> clazz, String endpointUrl){
        Object proxy = null;
        try {
            super.setServiceClass(clazz);
            super.setAddress(endpointUrl);
            proxy = super.create();
            logger.info("Client proxy created : " + endpointUrl);
        } catch(Exception e) {
            logger.error("Error creating service : " + ClassUtils.getQualifiedName(clazz), e);
        }
        return proxy;
    }

}

Я могу получить доступ к своей веб-службеbean-компоненты в контексте приложения, как показано ниже, и он работает четко.

MyWebService bean = (MyWebService) applicationContext.getBean(MyWebService.class);

Но когда я хочу автоматически связать эти bean-компоненты веб-службы с другими bean-компонентами Spring с @Autowired.он выдает исключение, например:

Ошибка создания компонента с именем «BusinessLogicServiceBean»: неудовлетворенная зависимость, выраженная через поле «myWebService»;вложенное исключение - org.springframework.beans.factory.NoSuchBeanDefinitionException: нет доступного квалифицирующего компонента типа com.xx.xx.xx.MyWebService: ожидается как минимум 1 компонент, который считается кандидатом на автоматическое подключение.Аннотации зависимостей: {@ org.springframework.beans.factory.annotation.Autowired (обязательно = true)}

Кстати: я могу автоматически связывать обычные не-cxf зарегистрированные bean-компоненты в одном и том же BeanDefinitionRegistryPostProcessor class.

Есть ли какой-нибудь трюк / обходной путь для возможности автоматического подключения для динамически зарегистрированных bean-прокси-серверов клиента apache cxf?

Спасибо.

...