2

私は単純な安らかなWSを持っています

@Path("basic")
public class ServiceRS
{

   private IServiceJAX service;

   @GET
   @Produces(MediaType.APPLICATION_JSON)
   @Consumes(MediaType.APPLICATION_FORM_URLENCODED)
   public String find(@FormParam("searchRequest") final String searchRequest)
   {
//...
      final List<Info> response = service.find(search);
//...
   }

}  

jax-webserviceのインターフェースはどこIServiceJAXにありますか。アノテーションを使用して@Local注入できますか? JNDIルックアップを使用したくない...IServiceJAXServiceRS

4

1 に答える 1

3

できますよ。他の方法もあると思いますが、アノテーションを付けたRESTFul Webサービスにアノテーションを介して注入された@Stateless @WebService、の@Local実装を使用して、簡単なテストプロジェクトを正常に実行しました。interface@EJB@Stateless@Path

これは、あなたが要求したように適切にCDI注入ではありませんが、うまく機能し、おそらくとにかくあなたのニーズに適合します。

IServiceJAXクラス:

public interface IServiceJAX {
    public String hello(String txt);
}

IServiceJAXImplクラス:

@WebService(serviceName = "NewWebService")
@Local
@Stateless
public class IServiceJAXImpl implements IServiceJAX {

    @WebMethod(operationName = "hello")
    @Override
    public String hello(@WebParam(name = "name") String txt) {
        return "Hello " + txt + " !";
    }
}

ServiceRSクラス:

@Path("basic")
@Stateless
public class ServiceRS {

    @EJB private IServiceJAX wsi;

    @GET
    @Path("{id}")
    @Produces(MediaType.APPLICATION_JSON)
    public String result(@PathParam("id") String id) {
        return wsi.hello(id);
    }
}

アップデート

CDIインジェクションが必要な場合は、上記のコードを保持し、から注釈を削除する@Localだけ@StatelessですIServiceJAXImpl。次を使用して、このクラスのインスタンスを注入できます。

@Inject private IServiceJAX wsi;

それ以外の

@EJB private IServiceJAX wsi;
于 2012-07-03T19:57:24.493 に答える