没有定义类型为[org.springframework.ws.client.core.WebServiceTemplate]的唯一bean

时间:2012-05-29 10:44:08

标签: junit

我正在尝试使用类org.springframework.ws.client.core.WebServiceTemplate制作两个测试用例。两个测试用例都在不同的类中,因此我为它们制作了两个不同的bean。

在运行junit测试时,我收到了类似的错误

  

创建名为'testcases.TestAdminMethodsWebService'的bean时出错:   通过bean属性'admin'表示的不满意的依赖:::否   独特的豆类   定义了[org.springframework.ws.client.core.WebServiceTemplate]:   预计单个匹配bean但找到7:[admin,rules];嵌套   例外是   org.springframework.beans.factory.NoSuchBeanDefinitionException:没有   独特的豆类   定义了[org.springframework.ws.client.core.WebServiceTemplate]:   预期单个匹配bean但找到2:[admin,rules]

我的豆子是这样的:

<oxm:jaxb2-marshaller id="marshaller_admin" contextPath="a.com.b" />
<bean id="admin" class="org.springframework.ws.client.core.WebServiceTemplate">
    <property name="marshaller" ref="marshaller_admin" />
    <property name="unmarshaller" ref="marshaller_admin" />
    <property name="defaultUri"
        value="http://dev05:8080/.." />
</bean>
<oxm:jaxb2-marshaller id="marshaller_rules" contextPath="r.com.b" />
<bean id="rules" class="org.springframework.ws.client.core.WebServiceTemplate">
    <property name="marshaller" ref="marshaller_rules" />
    <property name="unmarshaller" ref="marshaller_rules" />
    <property name="defaultUri"
        value="http://dev05:8080/.." />
</bean>

请告诉我如何克服这个问题或为什么会出现这个错误任何帮助将不胜感激谢谢。

2 个答案:

答案 0 :(得分:1)

使用@Qualifier注释来帮助Spring确定应该注入哪个bean。

public class TestClass {

    @Autowired
    @Qualifier("admin")
    WebServiceTemplate admin;

    @Autowired
    @Qualifier("rules")
    WebServiceTemplate rules;

    // ... Rest of your class

}

阅读使用限定符微调基于注释的自动装配部分下的文档here

<强>更新

您还需要更改xml bean定义,如下所示:

<oxm:jaxb2-marshaller id="marshaller_admin" contextPath="a.com.b" />
<bean class="org.springframework.ws.client.core.WebServiceTemplate">
    <qualifier value="admin"/>
    <property name="marshaller" ref="marshaller_admin" />
    <property name="unmarshaller" ref="marshaller_admin" />
    <property name="defaultUri"
        value="http://dev05:8080/.." />
</bean>
<oxm:jaxb2-marshaller id="marshaller_rules" contextPath="r.com.b" />
<bean class="org.springframework.ws.client.core.WebServiceTemplate">
    <qualifier value="rules"/>
    <property name="marshaller" ref="marshaller_rules" />
    <property name="unmarshaller" ref="marshaller_rules" />
    <property name="defaultUri"
        value="http://dev05:8080/.." />
</bean>

请注意,在每个bean定义下都包含<qualifier>标记。

答案 1 :(得分:1)

你好,这是正确的答案

  public class TestClass {  

protected WebServiceOperations admin;
admin = (WebServiceOperations) getApplicationContext().getBean("admin");
protected WebServiceOperations rules;
rules = (WebServiceOperations) getApplicationContext().getBean("rules");

// ... Rest of the class

}