无法在Scala中生成简单的GET请求

时间:2013-10-06 13:10:18

标签: scala noclassdeffounderror

我无法在scalaj-http中执行get请求:

 Http("https://someUrl.com")
  .option(HttpOptions.connTimeout(6000))
  .option(HttpOptions.readTimeout(15000))
  .asString

Exception in thread "main" java.lang.NoSuchMethodError: scala.collection.mutable.StringBuilder.append([CII)Lscala/collection/mutable/StringBuilder;
    at scalaj.http.Http$.readOnce$1(Http.scala:163)
    at scalaj.http.Http$.readString(Http.scala:167)
    at scalaj.http.Http$Request$$anonfun$asString$1.apply(Http.scala:128)
    at scalaj.http.Http$Request$$anonfun$asString$1.apply(Http.scala:128)
    at scalaj.http.Http$.tryParse(Http.scala:148)
    at scalaj.http.Http$Request$$anonfun$apply$1.apply(Http.scala:85)
    at scalaj.http.Http$Request$$anonfun$apply$1.apply(Http.scala:85)
    at scalaj.http.Http$Request.process(Http.scala:99)
    at scalaj.http.Http$Request.apply(Http.scala:85)
    at scalaj.http.Http$Request.asString(Http.scala:128)
    at com.me.method1(API.scala:21)
    at com.me.Application$delayedInit$body.apply(Application.scala:5)
    at scala.Function0$class.apply$mcV$sp(Function0.scala:40)
    at scala.runtime.AbstractFunction0.apply$mcV$sp(AbstractFunction0.scala:12)
    at scala.App$$anonfun$main$1.apply(App.scala:71)
    at scala.App$$anonfun$main$1.apply(App.scala:71)
    at scala.collection.immutable.List.foreach(List.scala:318)
    at scala.collection.generic.TraversableForwarder$class.foreach(TraversableForwarder.scala:32)
    at scala.App$class.main(App.scala:71)
    at com.me.Application$.main(Application.scala:3)
    at com.me.Application.main(Application.scala)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)

如果我添加此选项

Http("https://someUrl.com")
  .option(HttpOptions.connTimeout(6000))
  .option(HttpOptions.readTimeout(15000))
  .option(HttpOptions.allowUnsafeSSL)
  .asString

然后错误变为:

Exception in thread "main" java.lang.NoClassDefFoundError: scala/reflect/ClassManifest$
    at scalaj.http.HttpOptions$$anonfun$allowUnsafeSSL$1.apply(Http.scala:30)
    at scalaj.http.HttpOptions$$anonfun$allowUnsafeSSL$1.apply(Http.scala:23)
    at scalaj.http.Http$Request$$anonfun$process$2.apply(Http.scala:95)
    at scalaj.http.Http$Request$$anonfun$process$2.apply(Http.scala:95)
    at scala.collection.immutable.List.foreach(List.scala:318)
    at scalaj.http.Http$Request.process(Http.scala:95)
    at scalaj.http.Http$Request.apply(Http.scala:85)
    at scalaj.http.Http$Request.asString(Http.scala:128)
    at com.me.API.getJsessionId(API.scala:21)
    at com.me.Application$delayedInit$body.apply(Application.scala:5)
    at scala.Function0$class.apply$mcV$sp(Function0.scala:40)
    at scala.runtime.AbstractFunction0.apply$mcV$sp(AbstractFunction0.scala:12)
    at scala.App$$anonfun$main$1.apply(App.scala:71)
    at scala.App$$anonfun$main$1.apply(App.scala:71)
    at scala.collection.immutable.List.foreach(List.scala:318)
    at scala.collection.generic.TraversableForwarder$class.foreach(TraversableForwarder.scala:32)
    at scala.App$class.main(App.scala:71)
    at com.me.Application$.main(Application.scala:3)
    at com.me.Application.main(Application.scala)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)
Caused by: java.lang.ClassNotFoundException: scala.reflect.ClassManifest$
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 24 more

网址可以肯定。事实上,无论我使用什么网址(甚至不是https),都会导致错误:

Exception in thread "main" java.lang.NoSuchMethodError: scala.collection.mutable.StringBuilder.append([CII)Lscala/collection/mutable/StringBuilder;
    at scalaj.http.Http$.readOnce$1(Http.scala:163)
    at scalaj.http.Http$.readString(Http.scala:167)
    at scalaj.http.Http$Request$$anonfun$asString$1.apply(Http.scala:128)
    at scalaj.http.Http$Request$$anonfun$asString$1.apply(Http.scala:128)
    at scalaj.http.Http$.tryParse(Http.scala:148)
    at scalaj.http.Http$Request$$anonfun$apply$1.apply(Http.scala:85)
    at scalaj.http.Http$Request$$anonfun$apply$1.apply(Http.scala:85)
    at scalaj.http.Http$Request.process(Http.scala:99)
    at scalaj.http.Http$Request.apply(Http.scala:85)
    at scalaj.http.Http$Request.asString(Http.scala:128)
    at com.me.method(API.scala:22)
    at com.me.Application$delayedInit$body.apply(Application.scala:5)
    at scala.Function0$class.apply$mcV$sp(Function0.scala:40)
    at scala.runtime.AbstractFunction0.apply$mcV$sp(AbstractFunction0.scala:12)
    at scala.App$$anonfun$main$1.apply(App.scala:71)
    at scala.App$$anonfun$main$1.apply(App.scala:71)
    at scala.collection.immutable.List.foreach(List.scala:318)
    at scala.collection.generic.TraversableForwarder$class.foreach(TraversableForwarder.scala:32)
    at scala.App$class.main(App.scala:71)

build.sbt

scalaVersion := "2.10.2"

libraryDependencies += "org.scalaj" % "scalaj-http_2.8.1" % "0.3.2"

P.S。如果Scala有更好的http库,请继续向我推荐。

1 个答案:

答案 0 :(得分:5)

你正在尝试使用针对scala 2.8.1编译的库(这是在3年前发布并且已经过时了),而你正在使用scala 2.10。主要的scala版本是二进制不兼容的。解决方案是使用适当版本的scalaj工件或降级scala版本。