2

クラスを使用して2つのテストケースを作成しようとしていorg.springframework.ws.client.core.WebServiceTemplateます。両方のテストケースは異なるクラスにあるため、2つの異なる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が見つかりました:[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>

この問題を解決する方法、またはこのエラーが発生する理由を教えてください。助けていただければ幸いです。

4

2 に答える 2

1

アノテーションを使用して、@QualifierSpringがどのBeanを注入するかを決定できるようにします。

public class TestClass {

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

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

    // ... Rest of your class

}

修飾子を使用したアノテーションベースの自動配線の微調整のセクションにあるドキュメントを読んでください

アップデート:

また、次のようにxmlBean定義を変更する必要があります。

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

<qualifier>各Bean定義の下にタグが含まれていることに注意してください。

于 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 に答える