使用jsoup时java.lang.reflect.InvocationTargetException

时间:2014-10-23 07:42:20

标签: java eclipse jsoup

我正在尝试解析web服务中的html文档。根据谷歌,jsoup似乎是更快更容易的HTML解析器,所以我包含在我的项目中,但我得到异常“异常:java.lang.reflect.InvocationTargetException消息:java.lang.reflect.InvocationTargetException”< / strong>我已经尝试了一切,但没有给出结果。请帮忙

我在项目的libray类路径中添加了jsoup.jar。 我在Windows XP上使用Eclipse Luna Java 1.7 apache tomcat 7.0

这是我的代码:

  try {
     url = new URL("http://consulta.muniguate.com/emetra/despliega.php?tplaca="+tplaca+"&nplaca="+nplaca);
     conn = (HttpURLConnection) url.openConnection();
     conn.setRequestMethod("GET");
     rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
     while ((line = rd.readLine()) != null) {
        result += line;
     }
     Document doc = Jsoup.connect(result).get();
     String title= doc.title();
     System.out.println(title);

     rd.close();
  } catch (IOException e) {
     e.printStackTrace();
  } catch (Exception e) {
      e.printStackTrace();
   } 

}

这是完整的代码:

package clases;

import java.io.BufferedReader;
import javax.jws.WebService;
import javax.jws.WebMethod;
import javax.jws.WebParam;

import java.io.IOException;
import java.io.InputStreamReader;
import java.lang.reflect.InvocationTargetException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URI;
import java.net.URL;

import org.jsoup.Connection.Method;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;


@WebService(serviceName = "Transito")
public class Transito {

@WebMethod(operationName = "consultar_saldo") 
public String consultar_saldo(String tplaca, int nplaca) throws InvocationTargetException {
  String result = "";
  try {
      Document doc= Jsoup.connect("http://www.muniguate.com/utilities/remisiones.htm?tplaca="+tplaca+"&nplaca="+nplaca).userAgent("Mozilla").get();
     String result = doc.title();
     System.out.println(result);
  } catch (Exception e){
     e.getCause();
  }
  return result;

   }
}    

2 个答案:

答案 0 :(得分:0)

Jsoup.connect()接受网址字符串,而非响应内容

答案 1 :(得分:0)

  

“我已经尝试了一切,但没有结果。”

在这种情况下,你注定要失败,因为我们没有什么可以尝试的。

但我们假设你没有尝试过一切。让我们假设documentation of Jsoup.connect()实际上是在告诉true,并且此方法仅用于创建应该解析的资源的连接,而不是解析它。其get()方法作业从创建的Connection连接到资源,解析它并将其作为Document返回。
所以这种方法代替HTML文本的资源,需要像URL这样的连接所需的信息。

因此,不是手动创建HttpURLConnection并读取其HTML代码,而是将表示URL的字符串传递给Jsoup.connect(),然后使用get()连接并解析此资源。

所以而不是

URL url = new URL("http://consulta.muniguate.com/emetra/despliega.php?tplaca="+tplaca+"&nplaca="+nplaca);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
BufferedReader rd = new BufferedReader(new InputStreamReader(
        conn.getInputStream()));
String line = null;
String result = "";
while ((line = rd.readLine()) != null) {
    result += line;
}

只需使用

Document doc = Jsoup.connect("http://consulta.muniguate.com/emetra/despliega.php?tplaca="+tplaca+"&nplaca="+nplaca).get();

现在你应该可以使用

String title = doc.title();
System.out.println(title);