2016-07-14 14 views
0

基本的には、Javaを使用してSBTアプリケーションでカスタムWSClientを作成しようとしています。私は注射依存を望まないので、私はdocumentationに示されている方法を使用しています。カスタムWSClientを作成するにはAkka.stream.Materializerオブジェクトが必要ですが、抽象的なのでMaterializerオブジェクトを作成することはできません。PlayWS - マテリアライザーを使用したJavaを使用したWSClientの作成

private Materializer materializer; 


private WSClient wsClient() throws IOException { 

    scala.Option<String> noneString = scala.None$.empty(); 
    WSClientConfig wsClientConfig = new WSClientConfig(
      Duration.apply(120, TimeUnit.SECONDS), // connectionTimeout 
      Duration.apply(120, TimeUnit.SECONDS), // idleTimeout 
      Duration.apply(120, TimeUnit.SECONDS), // requestTimeout 
      true, // followRedirects 
      true, // useProxyProperties 
      noneString, // userAgent 
      true, // compressionEnabled/enforced 
      SSLConfigFactory.defaultConfig()); 

    AhcWSClientConfig clientConfig = AhcWSClientConfigFactory.forClientConfig(wsClientConfig); 

    // Add underlying asynchttpclient options to WSClient 
    AhcConfigBuilder builder = new AhcConfigBuilder(clientConfig); 
    DefaultAsyncHttpClientConfig.Builder ahcBuilder = builder.configure(); 
    AsyncHttpClientConfig.AdditionalChannelInitializer logging = new AsyncHttpClientConfig.AdditionalChannelInitializer() { 
     @Override 
     public void initChannel(io.netty.channel.Channel channel) throws Exception { 

     } 
    }; 
    ahcBuilder.setHttpAdditionalChannelInitializer(logging); 
    // #ws-custom-client 


    WSClient customWSClient = new play.libs.ws.ahc.AhcWSClient(ahcBuilder.build(), materializer); 
    // #ws-client 

    // #ws-close-client 
    customWSClient.close(); 
    return customWSClient; 
} 

注 - 私はこれを進める必要がありますどのように依存性の注入に

を使用したくありませんか? Akka Streams docsから

+0

まず、なぜあなたは依存性注入を避けようとしていますか?これがフレームワークの仕組みです。なぜあなたはそれを避けようとしていますか? – marcospereira

+0

私はフレームワーク上で動くと思われるAPIを開発しているので、だから私は別のプレイアプリを作成する場合は、私はプレイアプリの中でプレイアプリを実行します。 –

答えて

1

akka.actor.ActorSystem system = play.libs.Akka.system(); 
akka.stream.Materializer materializer = akka.stream.ActorMaterializer.create(system); 

play.libs.Akka.system()が廃止されており、将来的に削除されることに注意してください。

+0

このようなエラーが発生します。 java.lang.RuntimeException:開始されたアプリケーションがありません。また、Akka.systemは非難されています。 –

+0

私が答えて言ったように、 'play.libs.Akka.system()'はDI(使用したくない)を使うことに賛成です。例外について、どのようにコードを実行していますか?それはPlayアプリケーションですか、または分離されていますか? – marcospereira

+0

これは孤立したものです。 –

関連する問題