1

Web サービス関数内で htmlunit を使用しようとしています。私はWebサービスを初めて使用し、単純なWebサービスを実装するためにこのチュートリアルを使用しました: http://www.eclipse.org/webtools/community/education/web/t320/Implementing_a_Simple_Web_Service.pdf

次に、3 つの文字列をパラメーターとして取得し、htmlunit を使用して Web サイトにアクセスし、サイトのフォームに 3 つの文字列を入力して検索ボタンをクリックし、結果ページを解析して、次を含む文字列を返す Web サービスを実装しようとしました。結果ページからの情報。私は素朴なアプローチを取り、チュートリアルで使用したのと同じ手順を使用してその Web サービスを実装しようとしました。手順は次のとおりです。

  1. 動的 Web プロジェクトを作成する
  2. htmlunit jar をビルド パスに追加します。
  3. 機能するjunitテストを関数として実装し、プロジェクトに追加します
  4. Eclipse の Web サービス ウィザードを使用して Web サーバーとクライアントを作成します。

その後、ウィザードは 3 つのテキストボックスを備えたシンプルなインターフェイスを生成し、junit テスト プロジェクトで機能する値を入力しました。しかし、次のような例外がありました。

Exception: java.lang.reflect.InvocationTargetException Message: java.lang.reflect.InvocationTargetException

私はWebサービスに本当に慣れていないので、チュートリアルの単純なWebサービスの手順がこれでうまくいくと思ったときに恐ろしい間違いを犯しましたか、それとも修正できるエラーですか? 一般に、実際にこの方法で htmlunit を使用できますか、それとも完全に不可能ですか?

Web サーバーのコードは次のとおりです。

package webService.test.TravelComparing;

import java.io.BufferedWriter;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;

import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlPage;

public class TravelComparingTest {

public String homePage(String place, String checkinDate, String checkoutDate) throws Exception {
    final WebClient webClient = new WebClient();

String URL = "http://hotels.travelcomparing.com/SearchResults.aspx?languageCode=EN&currencyCode=EUR&destination=place:" + place + "&radius=0km&checkin=" + checkinDate +"&checkout=" + checkoutDate + "&Rooms=1&adults_1=1&pageSize=15&pageIndex=0&sort=MinRate-asc&showSoldOut=false&view=hc_sr_summary&scroll=0&mapstate=contracted";

HtmlPage page = webClient.getPage(URL);
webClient.waitForBackgroundJavaScript(10000);
String htmlContent = page.asXml();
Writer out = new BufferedWriter(new OutputStreamWriter(
        new FileOutputStream("travelcomparing.html"), "UTF-8"));
    try {
        out.write(htmlContent);
    } finally {
        out.close();
    }

    String hotelName = "";
    String priceFrom = "";

    String result = "";

    for (int i = 0; i < 5; i++){

        int index1 = htmlContent.indexOf ( "<div fn=");
        int index2 = htmlContent.indexOf("<div fn=", index1 + 8);
        String row = (String) htmlContent.subSequence(index1 , index2);
        htmlContent = htmlContent.substring(index2);
        //System.out.println(row);

        int index3 = row.indexOf("class=\"hc_i_hotel\" p=\"2\">");
        int index4 = row.indexOf("</a>", index3);
        hotelName = (String) row.subSequence(index3 + 61, index4 -34);
        System.out.println(hotelName);
        result = result + hotelName + " ";

        int index5 = row.indexOf("<dd class=\"hc_i_price\">");
        int index6 = row.indexOf("</dd>", index5);
        String priceRow = (String) row.subSequence(index5, index6 + 5);

        int index7 = priceRow.indexOf("<span class=\"hc_pr_syb\">");
        int index8 = priceRow.indexOf("<span class=\"hc_pr_cur\">");
        priceFrom = (String) priceRow.subSequence(index7 + 148, index8 - 38);
        System.out.println(priceFrom);
        result = result + priceFrom + "    ";
    }
    return result;
}

}

編集:

Tomcat コンソールの全内容は以下のとおりです。私が言及した例外は、クライアントの結果ビューに表示され、他のどこにも見つかりませんでした。

May 20, 2013 7:17:15 AM org.apache.catalina.core.AprLifecycleListener init
INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: C:\Program Files\Java\jre7\bin;C:\WINDOWS\Sun\Java\bin;C:\WINDOWS\system32;C:\WINDOWS;C:/Program Files/Java/jre7/bin/client;C:/Program Files/Java/jre7/bin;C:/Program Files/Java/jre7/lib/i386;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\Program Files\Microsoft SQL Server\100\Tools\Binn\;C:\Program Files\Microsoft SQL Server\100\DTS\Binn\;C:\Program Files\QuickTime\QTSystem\;C:\Program Files\Microsoft\Web Platform Installer\;C:\Program Files\Microsoft ASP.NET\ASP.NET Web Pages\v1.0\;C:\Program Files\Windows Kits\8.0\Windows Performance Toolkit\;C:\Program Files\Microsoft SQL Server\110\Tools\Binn\;C:\eclipse;;.
May 20, 2013 7:17:15 AM org.apache.tomcat.util.digester.SetPropertiesRule begin
WARNING: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.jee.server:TravelComparingTest' did not find a matching property.
May 20, 2013 7:17:15 AM org.apache.tomcat.util.digester.SetPropertiesRule begin
WARNING: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.jee.server:TravelComparingTestClient' did not find a matching property.
May 20, 2013 7:17:15 AM org.apache.tomcat.util.digester.SetPropertiesRule begin
WARNING: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.jee.server:TravelComparing2' did not find a matching property.
May 20, 2013 7:17:15 AM org.apache.tomcat.util.digester.SetPropertiesRule begin
WARNING: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.jee.server:TravelComparing2Client' did not find a matching property.
May 20, 2013 7:17:15 AM org.apache.tomcat.util.digester.SetPropertiesRule begin
WARNING: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.jee.server:traveltest' did not find a matching property.
May 20, 2013 7:17:15 AM org.apache.tomcat.util.digester.SetPropertiesRule begin
WARNING: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.jee.server:traveltestClient' did not find a matching property.
May 20, 2013 7:17:15 AM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["http-bio-8080"]
May 20, 2013 7:17:15 AM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["ajp-bio-8009"]
May 20, 2013 7:17:15 AM org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 410 ms
May 20, 2013 7:17:15 AM org.apache.catalina.core.StandardService startInternal
INFO: Starting service Catalina
May 20, 2013 7:17:15 AM org.apache.catalina.core.StandardEngine startInternal
INFO: Starting Servlet Engine: Apache Tomcat/7.0.40
May 20, 2013 7:17:16 AM org.apache.axis.utils.JavaUtils isAttachmentSupported
WARNING: Unable to find required classes (javax.activation.DataHandler and javax.mail.internet.MimeMultipart). Attachment support is disabled.
May 20, 2013 7:17:17 AM org.apache.axis.utils.JavaUtils isAttachmentSupported
WARNING: Unable to find required classes (javax.activation.DataHandler and javax.mail.internet.MimeMultipart). Attachment support is disabled.
May 20, 2013 7:17:17 AM org.apache.axis.utils.JavaUtils isAttachmentSupported
WARNING: Unable to find required classes (javax.activation.DataHandler and javax.mail.internet.MimeMultipart). Attachment support is disabled.
May 20, 2013 7:17:17 AM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["http-bio-8080"]
May 20, 2013 7:17:17 AM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["ajp-bio-8009"]
May 20, 2013 7:17:17 AM org.apache.catalina.startup.Catalina start
INFO: Server startup in 2044 ms
May 20, 2013 7:17:19 AM org.apache.axis.utils.JavaUtils isAttachmentSupported
WARNING: Unable to find required classes (javax.activation.DataHandler and javax.mail.internet.MimeMultipart). Attachment support is disabled.
4

1 に答える 1

0

最後に、コードを記述しているファイルを削除し、必要なすべてのフィールドを try catch ブロックで囲むことで、この問題を解決しました。この例外がスローされる理由は、関数でスローされた io 例外のようですが、リフレクトを使用すると、io 例外ではなく質問に例外が表示されます。

于 2013-05-21T01:10:00.647 に答える