Scala Play 2.3 WS.url(...) 配置错误
Scala Play 2.3 WS.url(...) Configuration Error
我正在尝试对另一台服务器进行简单的、未经身份验证的 WS 调用
我们的内部网络,但如果没有
得到关于
的 NoSuchMethodException
AsyncHttpClientConfig$Builder.setConnectionTimeoutInMs(I)AsyncHttpClientConfig$Builder;
完整堆栈跟踪:
[error] Uncaught exception when running app.controllers.WSSuite:
java.lang.NoSuchMethodError: com.ning.http.client.AsyncHttpClientConfig$Builder.setConnectionTimeoutInMs(I)Lcom/ning/http/client/AsyncHttpClientConfig$Builder;
sbt.ForkMain$ForkError: com.ning.http.client.AsyncHttpClientConfig$Builder.setConnectionTimeoutInMs(I)Lcom/ning/http/client/AsyncHttpClientConfig$Builder;
at play.api.libs.ws.ning.NingAsyncHttpClientConfigBuilder.configureWS(NingAsyncHttpClientConfigBuilder.scala:45)
at play.api.libs.ws.ning.NingAsyncHttpClientConfigBuilder.build(NingAsyncHttpClientConfigBuilder.scala:28)
at app.controllers.WSSuite.<init>(NotificationActionsSuite.scala:110)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:422)
at java.lang.Class.newInstance(Class.java:442)
at org.scalatest.tools.Framework$ScalaTestTask.execute(Framework.scala:641)
at sbt.ForkMain$Run.call(ForkMain.java:294)
at sbt.ForkMain$Run.call(ForkMain.java:284)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
build.sbt
...
libraryDependencies ++= Seq(
"org.postgresql" % "postgresql" % "9.3-1100-jdbc4",
"org.flywaydb" % "flyway-sbt" % "3.0",
"org.dbunit" % "dbunit" % "2.5.0" % "test",
"org.scalatest" %% "scalatest" % "2.2.1" % "test",
"org.scalatestplus" %% "play" % "1.2.0" % "test",
"org.jdom" % "jdom" % "1.1.2" notTransitive(),
"org.pac4j" % "play-pac4j_scala2.11" % "1.4.0",
"org.pac4j" % "pac4j-http" % "1.7.0",
"jp.t2v" %% "play2-auth" % "0.13.2",
"jp.t2v" %% "play2-auth-test" % "0.13.2" % "test",
"javax.jms" % "javax.jms-api" % "2.0.1",
"org.apache.activemq" % "activemq-all" % "5.11.1",
"io.gatling.highcharts" % "gatling-charts-highcharts" % "2.1.7" % "test",
"io.gatling" % "gatling-test-framework" % "2.1.7" % "test",
jdbc,
anorm,
ws
)
lazy val root = (project in file("."))
.enablePlugins(PlayScala)
...
project/plugins.sbt
...
addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.3.10") // It works from Play 2.3.2
...
test/app/controllers/WSSuite.scala
import play.api.libs.ws.WS
import scala.concurrent.ExecutionContext.Implicits.global
import org.scalatestplus.play.{OneAppPerSuite, PlaySpec}
import play.api.Play.current
class WSSuite extends PlaySpec with OneAppPerSuite
{
"WS library" should {
"Hit an external web service" in {
WS.url("http://www.google.com").get().map { response =>
println("Body: " + response.body)
}
}
}
}
我不知道如何解决这个问题,因为 Play Docs 指出这个
应该可以正常工作。
相关文档:https://www.playframework.com/documentation/2.3.x/ScalaWS
您不能在同一项目中使用 Play 2.3 和 Gatling 2.1,因为 AsyncHttpClient 的版本存在冲突。
Play 2.3 需要 AHC 1.8,而 Gatling 2.1 需要 AHC 1.9。
要么升级到 Play 2.4,其中 AHC 依赖项已升级,要么将 Gatling 测试移至类路径不会冲突的单独项目或模块。
我正在尝试对另一台服务器进行简单的、未经身份验证的 WS 调用 我们的内部网络,但如果没有 得到关于
的 NoSuchMethodExceptionAsyncHttpClientConfig$Builder.setConnectionTimeoutInMs(I)AsyncHttpClientConfig$Builder;
完整堆栈跟踪:
[error] Uncaught exception when running app.controllers.WSSuite:
java.lang.NoSuchMethodError: com.ning.http.client.AsyncHttpClientConfig$Builder.setConnectionTimeoutInMs(I)Lcom/ning/http/client/AsyncHttpClientConfig$Builder;
sbt.ForkMain$ForkError: com.ning.http.client.AsyncHttpClientConfig$Builder.setConnectionTimeoutInMs(I)Lcom/ning/http/client/AsyncHttpClientConfig$Builder;
at play.api.libs.ws.ning.NingAsyncHttpClientConfigBuilder.configureWS(NingAsyncHttpClientConfigBuilder.scala:45)
at play.api.libs.ws.ning.NingAsyncHttpClientConfigBuilder.build(NingAsyncHttpClientConfigBuilder.scala:28)
at app.controllers.WSSuite.<init>(NotificationActionsSuite.scala:110)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:422)
at java.lang.Class.newInstance(Class.java:442)
at org.scalatest.tools.Framework$ScalaTestTask.execute(Framework.scala:641)
at sbt.ForkMain$Run.call(ForkMain.java:294)
at sbt.ForkMain$Run.call(ForkMain.java:284)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
build.sbt
...
libraryDependencies ++= Seq(
"org.postgresql" % "postgresql" % "9.3-1100-jdbc4",
"org.flywaydb" % "flyway-sbt" % "3.0",
"org.dbunit" % "dbunit" % "2.5.0" % "test",
"org.scalatest" %% "scalatest" % "2.2.1" % "test",
"org.scalatestplus" %% "play" % "1.2.0" % "test",
"org.jdom" % "jdom" % "1.1.2" notTransitive(),
"org.pac4j" % "play-pac4j_scala2.11" % "1.4.0",
"org.pac4j" % "pac4j-http" % "1.7.0",
"jp.t2v" %% "play2-auth" % "0.13.2",
"jp.t2v" %% "play2-auth-test" % "0.13.2" % "test",
"javax.jms" % "javax.jms-api" % "2.0.1",
"org.apache.activemq" % "activemq-all" % "5.11.1",
"io.gatling.highcharts" % "gatling-charts-highcharts" % "2.1.7" % "test",
"io.gatling" % "gatling-test-framework" % "2.1.7" % "test",
jdbc,
anorm,
ws
)
lazy val root = (project in file("."))
.enablePlugins(PlayScala)
...
project/plugins.sbt
...
addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.3.10") // It works from Play 2.3.2
...
test/app/controllers/WSSuite.scala
import play.api.libs.ws.WS
import scala.concurrent.ExecutionContext.Implicits.global
import org.scalatestplus.play.{OneAppPerSuite, PlaySpec}
import play.api.Play.current
class WSSuite extends PlaySpec with OneAppPerSuite
{
"WS library" should {
"Hit an external web service" in {
WS.url("http://www.google.com").get().map { response =>
println("Body: " + response.body)
}
}
}
}
我不知道如何解决这个问题,因为 Play Docs 指出这个 应该可以正常工作。
相关文档:https://www.playframework.com/documentation/2.3.x/ScalaWS
您不能在同一项目中使用 Play 2.3 和 Gatling 2.1,因为 AsyncHttpClient 的版本存在冲突。
Play 2.3 需要 AHC 1.8,而 Gatling 2.1 需要 AHC 1.9。
要么升级到 Play 2.4,其中 AHC 依赖项已升级,要么将 Gatling 测试移至类路径不会冲突的单独项目或模块。