2011-02-25 31 views
1
import java.io.BufferedWriter; 
import java.io.FileWriter; 

import javax.xml.parsers.DocumentBuilder; 

import org.apache.http.HttpHost; 
import org.apache.http.HttpResponse; 

import org.apache.http.client.methods.HttpPost; 
import org.apache.http.client.params.ClientPNames; 
import org.apache.http.client.params.CookiePolicy; 

import org.apache.http.conn.params.ConnRoutePNames; 
import org.apache.http.entity.StringEntity; 
import org.apache.http.impl.client.DefaultHttpClient; 
import org.apache.http.params.BasicHttpParams; 
import org.apache.http.params.HttpConnectionParams; 
import org.apache.http.params.HttpParams; 
import org.apache.http.util.EntityUtils; 


public class OCRRestClient { 
public static String url = "http://www.wisetrend.com/WiseTREND_Online_OCR_API_v2.0.htm"; 
private static int proxyPort=8000; 
private static String proxyHost="ProxyHost"; 

static SAXParser sp; 
public static void main(String[] args) { 
    OCRRestClient client = new OCRRestClient(); 
/* client.getConvertedText(); 
} 

public void getConvertedText(){*/ 
    HttpParams myParams = new BasicHttpParams(); 
    HttpConnectionParams.setConnectionTimeout(myParams, 10000); 
    HttpConnectionParams.setSoTimeout(myParams, 10000); 
    DefaultHttpClient httpClient = new DefaultHttpClient(myParams); 

    HttpHost proxy = new HttpHost(proxyHost, proxyPort); 
    httpClient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY,proxy); 

    try { 
     String ret = null; 
     httpClient.getParams().setParameter(ClientPNames.COOKIE_POLICY,CookiePolicy.RFC_2109); 
     String key = "****"; // my key 
     String imageURL = "http://www.androidpeople.com/wp-content/themes/bp-columns/images/android_logo.png"; 
     HttpResponse response = null; 

     HttpPost httppost = new HttpPost("http://svc.webservius.com/v1/wisetrend/wiseocr/submit?wsvKey="+key); 
     httppost.setHeader("Content-Type","text/xml"); 

     httppost.setEntity(new StringEntity("<Job>" + 
               "<InputURL>"+imageURL+"</InputURL>"+ 
              "</Job>")); 
     response = httpClient.execute(httppost); 
     System.out.println(response.toString()); 

     while(true){ 
      sp = new SAXParser(); 
     if (response != null) { 
      ret = EntityUtils.toString(response.getEntity()); 
      System.out.println("Response: "+ret); 
      int success = writeFile(ret, "c://out.xml"); 
      if(success == 1) 
      { 
       //parsing the document using SAX Parser. 
       sp.parseDocument("c://out.xml"); 
       System.out.println("Final status : "+sp.status); 
       if(sp.status.equalsIgnoreCase("Finished")){ 
        System.out.println("Finished status : "+sp.status); 
       } 
      } 


     } 

     } 
    }catch(Exception e){ 
     e.printStackTrace(); 
    } 
} 

public static int writeFile(String content, String filename) 
{ 
    try{ 
     // Create file 
     FileWriter fstream = new FileWriter(filename); 
     BufferedWriter out = new BufferedWriter(fstream); 
     out.write(content); 
     //Close the output stream 
     out.close(); 
     return 1; 
    }catch (Exception e){//Catch exception if any 
     System.err.println("Error: " + e.getMessage()); 
     return 0; 
    } 
} 

} 

我在嘗試訪問時收到以下錯誤。如何使用Java RESTful客戶端來使用Wisetrend OCR Web服務?

[email protected] 
Response: <JobStatus xmlns:i="http://www.w3.org/2001/XMLSchema-instance"><JobURL>http://api.ocr-it.com/ocr/v2/getStatus/f78377d5bdcd44d18cafe65c253f87e6</JobURL><Status>Submitted</Status></JobStatus> 
Strt : Status: 
End : Status: Submitted 
java.lang.IllegalStateException: Content has been consumed 
    at org.apache.http.entity.BasicHttpEntity.getContent(BasicHttpEntity.java:84) 
    at org.apache.http.conn.BasicManagedEntity.getContent(BasicManagedEntity.java:87) 
    at org.apache.http.util.EntityUtils.toString(EntityUtils.java:138) 
    at org.apache.http.util.EntityUtils.toString(EntityUtils.java:183) 
    at OCRRestClient.main(OCRRestClient.java:62) 
Final status : Submitted 

請幫我排序。我在哪裏失蹤?在哪裏改變我的代碼?

我在明智的趨勢文檔頁面提供的c#代碼的幫助下提出了這段代碼。

http://www.wisetrend.com/WiseTREND_Online_OCR_API_v2.0.htm

+0

看起來,你也有一個無限循環,因爲有一段時間(真)沒有退出條件。 – Krishna 2011-02-25 08:04:33

回答

1

有問題的行是的System.out.println(response.toString()); 。這基本上讀取響應一次。由於它直接脫離線路,因此無法重新讀取。刪除SOP,它應該工作。

+0

感謝您的答覆克里希納。我得到了它的工作。 – 2011-02-25 13:50:57

0

我忘了發送GET請求JobUrl

現在工作正常。

下面的代碼將做必要的。

HttpGet httpget = new HttpGet(sp.jobUrl); 
System.out.println("Sending GET Request"); 
while(true) 
{ 
HttpResponse response1 = httpClient.execute(httpget); 
if(response1 != null) 
{ 
ret = EntityUtils.toString(response1.getEntity()); 
            System.out.println("RES 1 : "+ret); 
} 
}