0

私は22.1に従っています。カスタム インジェクション プロバイダーの実装の段落

https://jersey.java.net/documentation/latest/user-guide.html#deployment

クラスを次のように定義しました。

public class PrincipalConfig extends ResourceConfig {   

  public PrincipalConfig() {    
    packages("com.vex.klopotest.secured,com.klopotek.klas.auth.injection");         
        register(new MyBinder());
    }
}

MyBinder の場所:

Public class MyBinder extends AbstractBinder implements Factory<KasPrincipal> {


@Override
protected void configure() {

    bindFactory(this).to(MyInjectable.class).in(RequestScoped.class);                
    bind(KasPersistenceDaoInjectionResolver.class)
         .to(new TypeLiteral<InjectionResolver<KasPersistenceDaoAnnot>>(){})
         .in(Singleton.class);

    }

    @Override
    public MyInjectable provide() {
    // TODO Auto-generated method stub
        return new MyInjectable();
    }

    @Override
    public void dispose(MyInjectable instance) {
        // TODO Auto-generated method stub

    }
}

これは私の簡単な注釈です:

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface MyAnnot {

}

res サービスでアノテーションを使用したい:

@Path("modelORA")
public class ModelRetrieverORA {

   @Context
   SecurityContext securityContext;

    @Context
    private UriInfo uriInfo;

    @MyAnnot    
    private Myinjectable Principal;

私のweb.xmlでは、この構成コードでJerseyサーブレットコンテナー(間違っています)とjavax.ws.rs.Applicationをデプロイしました:

<servlet>
    <servlet-name>com.my.package.injection.PrincipalConfig</servlet-name>
</servlet>

<servlet-mapping>
    <servlet-name>com.my.package.injection.PrincipalConfig</servlet-name>
    <url-pattern>/rest</url-pattern>
</servlet-mapping>

デバッグモードに入ると、残りのサービスを呼び出すときに提供メソッドが呼び出されないことがわかります...実際には常にnullです。

どこが間違っていますか?私はjboss Wildfly 9.0に取り組んでおり、Jersey 2.21ライブラリを使用しています

4

2 に答える 2

1

私は解決策を見つけました:

1) web.xml に以下を追加します。

<context-param>
    <param-name>resteasy.scan</param-name>
    <param-value>false</param-value>
</context-param>
<context-param>
    <param-name>resteasy.scan.providers</param-name>
    <param-value>false</param-value>
</context-param>
<context-param>
    <param-name>resteasy.scan.resources</param-name>
    <param-value>false</param-value>
</context-param>

このようにして、Resteasy を戦争のスキャンから除外できます。

次に、これらの展開手順を使用します。

<servlet>
    <servlet-name>Jersey REST Service</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
    <init-param> 
        <param-name>javax.ws.rs.Application</param-name>
        <param-value>com.klopotek.klas.auth.injection.PrincipalConfig</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>Jersey REST Service</servlet-name>
    <url-pattern>/rest/*</url-pattern>
</servlet-mapping>

これは、以前のデプロイ方法が Servlet specs 3.0 用だったためです。

注射が効くようになりました。

于 2015-09-23T09:04:55.353 に答える
0

残りの Web サービスの実装での競合が原因である可能性があります。rest-ws の jersey 実装を使用していますが、wildfly には resteasy (rest-ws 実装) が付属しています。web.xmlに最小限の変更を加えてwildflyを使用している場合は、resteasyを使用することをお勧めします。ジャージ固有の構成を削除/コメントしてください。

 <!-- Set this if you want Resteasy to scan for JAX-RS classes.-->
<context-param>
    <param-name>resteasy.scan</param-name>
    <param-value>true</param-value>
</context-param>

<!-- this need same with resteasy servlet url-pattern -->
<context-param>
    <param-name>resteasy.servlet.mapping.prefix</param-name>
    <param-value>/rest</param-value>
</context-param>

<!--The ResteasyBootstrap listener is responsible for initializing 
some basic components of RESTeasy as well as scanning for annotation 
classes you have in your WAR file.-->
<listener>
    <listener-class>
        org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap
    </listener-class>
</listener>

<servlet>
    <servlet-name>resteasy-servlet</servlet-name>
    <servlet-class>org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher
    </servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>resteasy-servlet</servlet-name>
    <url-pattern>/rest/*</url-pattern>
</servlet-mapping>

また、 WEB-INF/libsディレクトリから jersey 関連の jar ファイルを削除する必要があります。

于 2015-09-22T19:42:32.197 に答える