6

私の JAX-WS war には、次のエントリが含まれています。

WEB-INF/lib/
WEB-INF/beans.xml // empty
WEB-INF/lib/commons-logging-1.1.1.jar
WEB-INF/lib/corrs-beans-1.0-alpha-1-SNAPSHOT.jar // EJBs are here
WEB-INF/lib/corrs-entities-1.0-alpha-1-SNAPSHOT.jar
WEB-INF/lib/joda-time-1.6.2.jar
WEB-INF/lib/opensaml-2.5.1-1.jar
WEB-INF/lib/openws-1.4.2-1.jar
WEB-INF/lib/slf4j-api-1.6.1.jar
WEB-INF/lib/wss4j-1.6.8.jar
WEB-INF/lib/xmlsec-1.5.3.jar
WEB-INF/lib/xmltooling-1.3.2-1.jar
WEB-INF/web.xml
META-INF/maven/
META-INF/maven/kr.co.ticomms.corrs/
META-INF/maven/kr.co.ticomms.corrs/corrs-services/
META-INF/maven/kr.co.ticomms.corrs/corrs-services/pom.xml
META-INF/maven/kr.co.ticomms.corrs/corrs-services/pom.properties

EJB を呼び出そうとする SOAPHandlers の 1 つ。

@HandlerChain(file=...)
@WebService(...)
public class MyService {
}

public class MyHandler implements SOAPHandler<SOAPMessageContext> {

    @Override
    public boolean handleMessage(final SOAPMessageContext context) {
        // MyEJB null
    }

    @Inject
    private MyEJB myEJB; // << NULL
}

MyEJB は単なる非インターフェース ビュー EJB です。

@LocalBean
@Stateless
public class MyEJB {
}

SOAPHandlers に EJB を注入する方法を教えてください。

更新/(おそらく)回答

私はに変更@Inject@EJB、それは動作します。

で作業する方法はあります@Injectか? 私は私見が良く見えます。:)

4

3 に答える 3

5

私が間違っていなければ、SOAPHandlers は Web サービス呼び出しの前に呼び出されます。CDI 仕様 (「スコープとコンテキスト」を参照) によると、Web サービス コンテキストでは、すべての通常のスコープはWeb サービスの呼び出し中にのみアクティブになります。@Dependentすべての通常のスコープに加えて、疑似スコープもあります。特に指定がない限り、これがデフォルトのスコープです。そのライフサイクルは通常のスコープの 1 つに依存するため、それ自体では存在できません。

現在、ステートレス EJB は CDI 関連のアノテーションを持たないため、通常のスコープがアクティブでない場所では自動的@Dependentに ( を使用して) 注入できません。@Injectあなたの場合、 a 内SOAPHandlerにはアクティブなスコープがないため、使用できません@Inject

を使用@EJBしてください。問題はありません。

于 2013-03-16T06:01:56.057 に答える
1

Soap ハンドラー クラスに CDI "@named" アノテーションを付けると、任意の EJB コンポーネントを注入できます。そうすることで、SOAP ハンドラー クラスがコンテナー管理 Bean になり、他のコンテナー管理 Bean を EJB として使用できるようになります。

@Named

public class MyHandler implements SOAPHandler'<'SOAPMessageContext'>' {

....

@Inject

private MyEJB myEJB; 

...

}
于 2016-04-06T06:41:59.257 に答える
0

私のように他の誰かがここでグーグルした場合、TomEEでそれを行うことができます: http://svn.apache.org/repos/asf/tomee/tomee/trunk/server/openejb-cxf/src/test/java/ org/apache/openejb/server/cxf/handler/SimpleHandler.java

于 2014-09-15T11:46:15.123 に答える