2016-07-14 2 views
0

В принципе, я пытаюсь создать пользовательский WSClient в своем приложении SBT с помощью Java. Поскольку я не хочу никаких зависимостей от инъекций, я использую метод, который показан в documentation. Чтобы создать пользовательский WSClient, ему нужен объект Akka.stream.Materializer, но поскольку он абстрактный, я не могу создать объект Materializer.Создание WSClient с помощью Java с помощью PlayWS - Materializer null

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; 
} 

Примечание - Я не хочу использовать Dependency Injection

Как я должен продолжать это?

+0

Прежде всего, почему вы пытаетесь избежать инъекции зависимостей? Вот как работает рамочная система. Почему вы пытаетесь избежать этого? – marcospereira

+0

Потому что я разрабатываю api, который, как предполагается, запускается на фреймворке. Поэтому, если я создаю отдельное приложение для воспроизведения, тогда я запустил приложение для воспроизведения в игровом приложении. –

ответ

1

От Akka Streams docs:

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

Это изолированный. –