Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do i use play ws library in normal sbt project instead of play?

When i tried using Play WS library in a normal sbt project instead of play project I was bound to use play.api.Play.current and got java.lang.RuntimeException: "There is no started application" when tried to run the application.

like image 869
pamu Avatar asked Jul 22 '14 07:07

pamu


2 Answers

Usage in 2.4.x

import play.api.libs.ws.ning.NingWSClient   

val wsClient = NingWSClient()
wsClient.url("http://wwww.something.com").get()

build.sbt :

libraryDependencies += "com.typesafe.play" %% "play-ws" % "2.4.3"

Usage in 2.5.x

import play.api.libs.ws.ahc.AhcWSClient

implicit val actorSystem = ActorSystem()
implicit val materializer = ActorMaterializer()
wsClient.url("http://wwww.something.com").get()

//at the very end, to shutdown stuff cleanly :
wsClient.close()
actorSystem.terminate()

build.sbt :

libraryDependencies += "com.typesafe.play" %% "play-ws" % "2.5.4"

Logs

As someone noted in the comment, by default you might get a bunch of verbose logs coming from the underlying async-http-client. One way to fix it is to start configuring a logback.xml, and placing it in src/main/resources

<configuration>

<conversionRule conversionWord="coloredLevel" converterClass="play.api.Logger$ColoredLevel" />

<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
        <!-- The logging pattern, you might want to adapt it -->
        <pattern>%d %coloredLevel %t - %logger - %message%n%xException</pattern>
    </encoder>
</appender>

<!-- Here you can change the levels of specific loggers -->
<logger name="somelogger" level="INFO" />

<!-- Default logging level for every logger -->
<root level="ERROR">
    <appender-ref ref="STDOUT" />
</root>

</configuration>
like image 146
implicitdef Avatar answered Sep 28 '22 02:09

implicitdef


To use play-ws outside of play see "Using WSClient" section of documentation: http://www.playframework.com/documentation/2.3.x/ScalaWS

val builder = new com.ning.http.client.AsyncHttpClientConfig.Builder()
val client = new play.api.libs.ws.ning.NingWSClient(builder.build())
val response = client.url(url).get()
like image 37
planetenkiller Avatar answered Sep 28 '22 02:09

planetenkiller