我想在我的Spring REST项目中调用两个SOAP Web服务并获取数据。
我有两个用于不同两个(SOAP)Web服务的WSDL(VoucherService.wsdl和CGWebService.wsdl)文件。
首先,我使用“gradle wsdl2java”命令将一个WSDL(VoucherService.wsdl)添加到项目并生成类。
然后用以下Beans更新了ModuleConfig类。
@Bean
public Jaxb2Marshaller getVoucherServiceMarshaller() {
Jaxb2Marshaller marshaller = new Jaxb2Marshaller();
marshaller.setContextPath(environment.getProperty("voucher.service.marshaller.contextPath"));
RPR 返回marshaller; }
@Bean
public WebServiceTemplate getVoucherServiceTemplate() {
WebServiceTemplate template = new WebServiceTemplate(getVoucherServiceMarshaller());
template.setDefaultUri(environment.getProperty("voucher.service.defaultUri"));
return template;
}
@Bean
public VoucherServiceProxy getVoucherServiceProxy() {
VoucherServiceProxy voucherServiceProxy = new VoucherServiceProxy();
return voucherServiceProxy;
}
然后创建VoucherServiceProxy类并添加这些自动装配。
@Autowired
private WebServiceTemplate voucherServiceTemplate;
@Autowired
private Jaxb2Marshaller marshaller;
然后在VoucherServiceProxy类中创建并部署所需的方法,它工作正常。
之后我使用“gradle wsdl2java”命令为第二个WSDL(CGWebService.wsdl)生成了类
然后在ModuleConfig类中创建了以下Bean。
@Bean
public ChargingGatewayServiceProxy getChargingGatewayServiceProxy() {
ChargingGatewayServiceProxy chargingGatewayServiceProxy = new ChargingGatewayServiceProxy();
return chargingGatewayServiceProxy;
}
@Bean
public Jaxb2Marshaller getChargingGatewayServiceMarshaller() {
Jaxb2Marshaller marshaller = new Jaxb2Marshaller();
marshaller.setContextPath(environment.getProperty("cg.service.marshaller.contextPath1"));
return marshaller;
}
@Bean
public WebServiceTemplate getChargingGatewayServiceTemplate() {
WebServiceTemplate template = new WebServiceTemplate(getChargingGatewayServiceMarshaller());
template.setDefaultUri(environment.getProperty("cg.service.url"));
return template;
}
然后创建ChargingGatewayServiceProxy并添加这些自动装配。
@Autowired
private WebServiceTemplate cgServiceTemplate;
@Autowired
private Jaxb2Marshaller marshaller;
在VoucherServiceProxy类中,我创建了必要的方法。
然后我尝试部署它,但出现此错误。
注入自动连接的依赖项失败;嵌套异常是org.springframework.beans.factory.BeanCreationException:无法自动装配字段:private org.springframework.ws.client.core.WebServiceTemplate lk.ideahub.symphony.product.dapp.common.VoucherServiceProxy.voucherServiceTemplate;嵌套异常是org.springframework.beans.factory.NoUniqueBeanDefinitionException:没有定义[org.springframework.ws.client.core.WebServiceTemplate]类型的限定bean:期望的单个匹配bean但找到2:getVoucherServiceTemplate,getChargingGatewayServiceTempla te
上下文初始化失败 org.springframework.beans.factory.BeanCreationException:创建名为'DAppSyncServiceImpl'的bean时出错:注入自动连接的依赖项失败;嵌套异常是org.springframework.beans.factory.BeanCreationException:无法自动装配字段:private lk.ideahub.symphony.product.dapp.common.VoucherServiceProxy lk.ideahub.symphony.product.dapp.sync.service.DAppSyncServiceImpl.voucherServiceProxy;嵌套异常是org.springframework.beans.factory.BeanCreationException:创建名为'voucherServiceProxy'的bean时出错:注入自动连接的依赖项失败;嵌套异常是org.springframework.beans.factory.BeanCreationException:无法自动装配字段:private org.springframework.ws.client.core.WebServiceTemplate lk.ideahub.symphony.product.dapp.common.VoucherServiceProxy.voucherServiceTemplate;嵌套异常是org.springframework.beans.factory.NoUniqueBeanDefinitionException:没有定义类型为[org.springframework.ws.client.core.WebServiceTemplate]的限定bean:期望的单个匹配bean但找到2:getVoucherServiceTemplate,getChargingGatewayServiceTemplate < / p>
当我在ModuleConfig类中评论与一个服务代理相关的bean方法时,其他服务代理可以正常工作。但无法同时部署。
有人可以帮我找到在同一个项目中创建这两个服务代理类的方法,而不会出现任何bean工厂错误。
答案 0 :(得分:0)
为@Qualifier
添加WebServiceTemplate
以供创建和使用,因此Spring可以区分它们并且也知道要使用哪个。
@Bean
@Qualifier("voucher")
public WebServiceTemplate getVoucherServiceTemplate() {...}
@Bean
@Qualifier("chargingGateway")
public WebServiceTemplate getChargingGatewayServiceTemplate() {...}
注射,例如:
@Autowired
@Qualifier("chargingGateway")
public WebServiceTemplate chargingGatewayServiceTemplate;