2016-05-20 2 views
0

RemoteStatisticServiceというインターフェイスを注入したいのでJavaの注入に問題がありますが、この場合NullPointerExceptionというエラーが返され続けます。私はthisにinit()メソッドと@PostConstructを実行しようとしましたが、私には同じエラーが表示されます。ここインターフェイスのインジェクションCDIが返されるNullPointerException

MeasurementAspectServiceクラスのコードされている:

import javax.annotation.PostConstruct; 
import javax.inject.Inject; 

import *.dto.MeasureDownloadDto; 
import *.dto.MeasureUploadDto; 
import *.rs.RemoteStatisticService; 

public class MeasurementAspectService { 

    private @Inject RemoteStatisticService remoteStatisticService; 

    public void storeUploadDto(MeasureUploadDto measureUploadDto) { 

     remoteStatisticService.postUploadStatistic(measureUploadDto); 

    } 

    public void storeDownloadDto(MeasureDownloadDto measureDownloadDto) { 

     remoteStatisticService.postDownloadStatistic(measureDownloadDto); 

    } 

    @PostConstruct 
    public void init() { 

    } 

} 

ここでは、すべてのヘルプが理解されるインタフェースクラスRemoteStatisticService

import static *.util.RemoteServiceUtil.PRIV; 

import javax.ws.rs.Consumes; 
import javax.ws.rs.POST; 
import javax.ws.rs.Path; 
import javax.ws.rs.Produces; 
import javax.ws.rs.core.MediaType; 

import *.dto.MeasureDownloadDto; 
import *.dto.MeasureUploadDto; 

@Path(PRIV + "stats") 
@Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML }) 
@Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML }) 
public interface RemoteStatisticService { 
    @POST 
    @Path("upload") 
    void postUploadStatistic(MeasureUploadDto mud); 

    @POST 
    @Path("download") 
    void postDownloadStatistic(MeasureDownloadDto mdd); 

} 

するためのコードです。ありがとう

+0

注射に有効であるためには、CDIプロバイダが処理するために '@ Named' Beanとしてマークする必要があります。 'Weld' – PDStat

+0

この場合、どこに@Named beanを置くべきですか?私はMavenを使用していますが、まだCDIで新しいです –

+0

クラスレベルで例えば。 '@Named public class MeasurementAspectService' – PDStat

答えて

0

CDI 1.1+は、デフォルトで暗黙のBeanで動作します。 CDIが取得するクラスには、@Dependentまたは@ApplicationScopedのようなBean定義のアノテーションを追加する必要があります。

1

問題は、aspectjを使用してアスペクトを定義しましたが、CDI Beanへの参照を取得しようとしていることです。これはうまくいきません。あなたが参照を取得するためにCDIを使用する必要があります

private final MeasurementAspectService measurementAspectService = new MeasurementAspectService();

ここでこの行は犯人です。 CDI 1.1を使用している場合は、このスニペットを使用できます。

private final MeasurementAspectService measurementAspectService = CDI.current().select(MeasurementAspectService.class).get();

AspectJのは、CDIの使用を意図していないためです。 CDIでもinterceptorsを使用できます。

+0

参照できなかったため、CDIのエラーがありますそれ。インポートするために別のパッケージが必要ですか?私はMavenを使用しています。バージョン1.1.0のjavax.validationグループ(artifact validation-api)からインポートしたJavaxパッケージを使用していると思います。 –

+0

ok私は以前のエラーを修正しました。新しいエラーは "初期化中の例外MeasurementAspect:java.lang.IllegalStateException:CDIProviderが見つかりません " –

+0

CDIを使用していますか? –

関連する問題