1

私はさまざまな瓶で春の統合を使用しようとしています。A.jar si-context.xml 内:

    <context:annotation-config />
    <int:annotation-config />

    <int:channel id="upperServiceChannel">
        <int:priority-queue />
    </int:channel>

    <int:gateway id="upperGateway" default-request-timeout="5000"
        default-reply-timeout="5000" default-request-channel="upperServiceChannel"
        service-interface="com.company.proj.gw.IUpperStringConversation">
        <int:method name="toUpperCase" />
    </int:gateway>


    <bean id="toUpperCaseService" class="com.company.proj.service.ToUpperCaseService" />
    <int:service-activator id="serviceActivatorToUpperCase"
        input-channel="upperServiceChannel" method="toUpperCase" ref="toUpperCaseService" />

    <int:poller id="poller" default="true" fixed-delay="1000" />
    <context:component-scan base-package="com.company"/>

Bean では、このゲートウェイを使用しています。

 @Component(value = "upper")
    public class UpperAdapter extends AAdapter<Message<String>> {

    @Autowired
    IUpperStringConversation gw;

それは働いています。問題は、他のプロジェクト (B.jar) から UpperAdapter を使用しようとした場合です。b-context.xml:

<import resource="classpath*:/*si-context.xml" />
<context:annotation-config />
<int:annotation-config />


    @Component(value="router")
public class Router {

    @Autowired
    private Map<String, AAdapter<?>> adapters;

そしてここで私は得る:

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'upper': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: com.company.proj.gw.IUpperStringConversation com.company.proj.adapter.UpperAdapter.gw; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [com.company.proj.gw.IUpperStringConversation] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}

spring ログ レベルを debug に設定した後、次の情報を取得します。

DEBUG o.s.c.a.ClassPathBeanDefinitionScanner - Ignored because not a concrete top-level class: URL [jar:file:/home/tomto/Documents/workspace-sts/integration-fw/src/main/resources/META-INF/lib/integration-fw-module-string-0.0.1-SNAPSHOT.jar!/com/company/proj/gw/IUpperStringConversation.class]

もちろん、それは本当です (多分私は間違っているかもしれません;)) それは実行時に春によって生成されたゲートウェイになるからです。

IUpperStringConversation:

public interface IUpperStringConversation {
    public String toUpperCase(String text);
}

私が逃したものは何ですか?

どうも!

4

1 に答える 1

0

同様の問題があり、ゲートウェイがサービス オブジェクトに挿入されませんでした。

Project structure:
----------------
-parent/
-common/
   --gateways defined here
-module-a/
-module-b/

module-b で受信した例外メッセージは次のとおりです。

org.springframework.beans.factory.BeanCreationException: ... Injection of autowired dependencies failed
...
IllegalArgumentException: Class must not be null

どうやら、この問題は、module-b クラスパスでの依存関係の競合によって引き起こされていたようです。pom.xml の Spring 依存関係をクリーンアップした後、機能しました!

于 2013-09-03T20:26:14.017 に答える