2010-04-22 4 views
3

저는 Apache HttpClient에서 scala를 사용하고 있으며 예제를 통해 작업하고 있습니다. 문제의 오류 및 라인 코드는 여기에스칼라 및 HttpClient : 어떻게이 오류를 해결합니까?

/Users/name/IdeaProjects/JakartaCapOne/src/JakExamp.scala 
    Error:Error:line (16)error: overloaded method value execute with alternatives 
(org.apache.http.HttpHost,org.apache.http.HttpRequest)org.apache.http.HttpResponse 
<and> 
(org.apache.http.client.methods.HttpUriRequest,org.apache.http.protocol.HttpContext)org.apache.http.HttpResponse 
cannot be applied to 
(org.apache.http.client.methods.HttpGet,org.apache.http.client.ResponseHandler[String]) 
val responseBody = httpclient.execute(httpget, responseHandler) 

강조 : 나는 다음과 같은 오류를 받고 있어요 ...

import org.apache.http.client.ResponseHandler 
import org.apache.http.client.HttpClient 
import org.apache.http.client.methods.HttpGet 
import org.apache.http.impl.client.BasicResponseHandler 
import org.apache.http.impl.client.DefaultHttpClient 


object JakExamp { 
def main(args : Array[String]) : Unit = { 
    val httpclient: HttpClient = new DefaultHttpClient 
    val httpget: HttpGet = new HttpGet("www.google.com") 

    println("executing request..." + httpget.getURI) 
    val responseHandler: ResponseHandler[String] = new BasicResponseHandler 
    val responseBody = httpclient.execute(httpget, responseHandler) 
    // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 
    println(responseBody) 

    client.getConnectionManager.shutdown 

} 
} 

나는 성공적으로 자바의 예를 실행할 수 있습니다

+0

질문 자체에 코드와 오류를 넣으십시오. –

+0

나는 Daniel에게 사과한다. 나는 그것을 질문에 추가 할 것이다. – Vonn

+0

다시 사과해야합니다 ... 지금부터 문제의 코드/오류를 게시 할 것입니다. – Vonn

답변

1

Scala 2.7의 경우 (2016)보고되었지만 거의 성공하지 못했습니다. 어쩌면 재현 할 수있는 케이스를 제공하여 다시 열 수 있습니다.

다음과 같이,이 문제를 해결하기 위해 (스칼라의 구조 입력을 통해) 반사를 사용할 수 있습니다

나는 다음과 같은 코드가 작동하는 것을 발견했다 스칼라 2.8으로
import org.apache.http.client._ 
import org.apache.http.client.methods._ 
import org.apache.http.impl.client._ 
val httpclient = new DefaultHttpClient 
val httpget = new HttpGet("www.google.com") 
val brh = new BasicResponseHandler[String] 
//httpclient.execute (httpget, brh) 
httpclient.asInstanceOf[{ 
    def execute (request: HttpUriRequest, 
       responseHandler: ResponseHandler[String]): String 
}].execute (httpget, brh) 

: 따라서

import org.apache.http.client._ 
import org.apache.http.client.methods._ 
import org.apache.http.impl.client._ 
val httpclient = new DefaultHttpClient 
val httpget = new HttpGet("www.google.com") 
val brh = new BasicResponseHandler 
httpclient.execute (httpget, brh) 

나는 생각한다 2.8로 고정됩니다.

+0

이것은 잘 작동했습니다 ... 2.8에서 수정 된 점을 알아두면 좋습니다. 고맙습니다. – Vonn

2

필자도이 문제를 처리해야했습니다. 다음과 같은 것을 시도하십시오 :

val handler:ResponseHandler[String] = new BasicResponseHandler 
val request = new HttpGet("...") 
val response = client execute request 
val body = handler handleResponse response 

이것은 2.7.7에서 저에게 잘 돌아갑니다. 그 유일한 1 개의 여분의 선 (그렇게 그렇게 나쁘지 않은).

+0

이 효과가 있습니다! 고맙습니다. – Vonn

관련 문제