私のRESTfulサービスの1つにEJB 3.1を注入しようとしています。私はポストに従った:Inject an EJB into JAX-RS (RESTful service)と注射プロバイダを構築する以外のすべてのオプションを試してみました。私が試している現在の解決策は@RequestScoped
と@Inject
の組み合わせを使用しますが、注入されたbean変数はまだnull
です。 /WEB-INF
フォルダにbeans.xml
があります。エンタープライズBeanをJAX-RS 2.0 RESTサービスに挿入するとNullPointerExceptionが発生する
EJBをRESTサービスクラスに挿入するにはどうすればよいですか?
UserServiceの
@Local
@Path("user/v1")
@Produces(MediaType.APPLICATION_JSON)
public class UserServiceV1 implements SystemLogger {
@Inject
private ApplicationBean appBean;
@GET
@Path("pingbean")
@Produces(MediaType.APPLICATION_JSON)
public Response pingAppBean() {
if(appBean == null) {
return Response.status(Response.Status.UNAUTHORIZED).entity("{\"faild\": \"App bean is null\"}").build();
}
String message = appBean.getHello();
return Response.status(Response.Status.OK)
.entity(message)
.build();
}
}
ApplicationBean SystemHandler
は、JARモジュールに常駐し、ビジネス・ロジックを有する標準的なクラスです。
@Stateless
@Local
public class ApplicationBean implements ApplicationBeanLocal {
@Override
public String getHello() {
return "Hello from ApplicationBean";
};
}
JAX-RS構成
@ApplicationPath("service")
public class ApplicationService extends Application {
@Override
public Set<Class<?>> getClasses() {
Set<Class<?>> resources = new HashSet<>();
resources.add(UserServiceV1.class);
resources.add(ApplicationBean.class);
resources.add(CorsFilterProvider.class);
return resources;
}
}
例外
14:07:01,230 ERROR [io.undertow.request] UT005023: Exception handling request to /MyApp/service/user/v1/login: org.jboss.resteasy.spi.UnhandledException: java.lang.NullPointerException
at org.jboss.resteasy.core.ExceptionHandler.handleApplicationException(ExceptionHandler.java:76) [resteasy-jaxrs-3.0.14.Final.jar:3.0.14.Final]
at org.jboss.resteasy.core.ExceptionHandler.handleException(ExceptionHandler.java:212) [resteasy-jaxrs-3.0.14.Final.jar:3.0.14.Final]
RESTEasyに/ JAX-RS 私はthe documentation
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-jaxrs</artifactId>
<version>3.0.14.Final</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-cdi</artifactId>
<version>3.0.14.Final</version>
<scope>provided</scope>
</dependency>
に応じてRESTEasyのためのCDIの実装を追加しました
EDIT:質問とタイトルに変更されたコードの詳細
私は私がやった他のプロジェクト内のBeanを注入する@EJBを使用JAX-RS 1.1。しかし、私の現在のプロジェクトでは、JAX-RS 2.0を使用しています。resteasy-jaxrsの依存関係を参照してください。明日の問題を解決しようとするだろう、どんな入力も歓迎される。 – Chris
使用しているアプリケーションサーバーとバージョンは何ですか?あなたがRestEasyを宣言し、Jerseyを依存関係として宣言していないので、私はJBoss EAPまたはWildflyを想定しています。 – RafaelHamasaki
JBossで提供されているRestEasyバージョン(旧バージョンのJAX-RS 1.1準拠バージョンでも可)を使用しない場合は、モジュールをデプロイメントから除外する必要があります。 参照: [リンク](https://access.redhat.com/documentation/en-US/JBoss_Enterprise_Application_Platform/6/html/Development_Guide/Exclude_a_Subsystem_from_a_Deployment.html) [リンク](HTTPS://docs.jboss .org/author/display/WFLY8/Class + Loading + in + WildFly) – RafaelHamasaki