2013-04-30 104 views
0

我正在使用hessdroid代理在我的android应用程序和我的webservice/hessianservlet之间进行通信。它的工作原理立刻启动程序后,但是当我等一下,让应用程序再次调用网络功能(例如,注销()),我收到此错误信息:HessianConnectionException:500导致:java.io.EOFException(Android)

com.caucho.hessian.client.HessianConnectionException: 500: java.io.EOFException 
    at com.caucho.hessian.client.HessianProxy.invoke(HessianProxy.java:197) 
    at $Proxy1.getPassword(Native Method) 
    at tsch.serviceApp.net.DataHandler.getPassword(DataHandler.java:50) 
    at tsch.serviceApp.PageSystemApps$1$1.run(PageSystemApps.java:91) 
Caused by: java.io.EOFException 
    at libcore.io.Streams.readAsciiLine(Streams.java:203) 
    at libcore.net.http.HttpEngine.readResponseHeaders(HttpEngine.java:573) 
    at libcore.net.http.HttpEngine.readResponse(HttpEngine.java:821) 
    at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:283) 
    at libcore.net.http.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:495) 
    at com.caucho.hessian.client.HessianProxy.invoke(HessianProxy.java:167) 

public String login() { 
    HessianProxyFactory factory = new HessianProxyFactory();   
    String url = "http://192.168.56.1:8080/hessianServer"; 
    factory.setHessian2Reply(false); // avoid hessian reply error 
    try { 
     userCon = (IUserService) factory.create(IUserService.class, url+"/IUserService");      
    } catch (MalformedURLException e) { 
     e.printStackTrace(); 
    } 
    return "Logged in!"; 
} 

public void logout() { 
    userCon.logout(); 
} 

回答

1

我在android 4.1上遇到了同样的问题,但在android 4.0.3上没问题。我添加了一个语句“conn.setRequestProperty(”Connection“,”Close“);”在类HessianProxyFactory的openConnection方法中。

protected URLConnection openConnection(URL url) 
      throws IOException { 
     URLConnection conn = url.openConnection(); 

     conn.setDoOutput(true); 

     if (_readTimeout > 0) { 
      try { 
       conn.setReadTimeout((int) _readTimeout); 
      } catch (Throwable e) { // intentionally empty 
      } 
     } 

     conn.setRequestProperty("Content-Type", "x-application/hessian"); 

     conn.setRequestProperty("Connection", "Close"); 

     if (_basicAuth != null) 
      conn.setRequestProperty("Authorization", _basicAuth); 
     else if (_user != null && _password != null) { 
      _basicAuth = "Basic " + base64(_user + ":" + _password); 
      conn.setRequestProperty("Authorization", _basicAuth); 
     } 

     return conn; 
    } 

并且问题消失。