Я регистрирую определение 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?
Спасибо.