org.springframework.beans.factory.BeanCreationException出错

时间:2015-11-30 06:10:25

标签: java spring web-services spring-mvc wsdl

我想在我的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工厂错误。

1 个答案:

答案 0 :(得分:0)

@Qualifier添加WebServiceTemplate以供创建和使用,因此Spring可以区分它们并且也知道要使用哪个。

@Bean
@Qualifier("voucher")
public WebServiceTemplate getVoucherServiceTemplate() {...}

@Bean
@Qualifier("chargingGateway")
public WebServiceTemplate getChargingGatewayServiceTemplate() {...}

注射,例如:

@Autowired
@Qualifier("chargingGateway")    
public WebServiceTemplate chargingGatewayServiceTemplate;