2

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

在运行 junit 测试时,我遇到了这样的错误

创建名为“testcases.TestAdminMethodsWebService”的 bean 时出错:通过 bean 属性“admin”表达的不满足依赖关系::没有定义类型 [org.springframework.ws.client.core.WebServiceTemplate] 的唯一 bean:预期单个匹配 bean,但找到了 7 :[管理员,规则];嵌套异常是 org.springframework.beans.factory.NoSuchBeanDefinitionException:没有定义类型 [org.springframework.ws.client.core.WebServiceTemplate] 的唯一 bean:预期的单个匹配 bean 但找到了 2:[管理员,规则]

我的豆子是这样的:

<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>

请告诉我如何解决此问题或为什么会发生此错误,任何帮助将不胜感激,谢谢。

4

2 回答 2

1

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

public class TestClass {

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

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

    // ... Rest of your class

}

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

更新:

您还需要像这样更改您的 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>标记。

于 2012-05-29T10:48:03.330 回答
1

你好这是正确答案

  public class TestClass {  

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

// ... Rest of the class

}

于 2012-05-31T13:17:36.100 回答