Web サービスで htmlunit を使用しようとしています。動的な Web プロジェクトを作成し、関数 website() を実装しました。次に、Web サービス ウィザードを使用して、Web サーバーとクライアントを生成しました。使用しようとすると、この例外がスローされます。
Exception: java.lang.NoClassDefFoundError: com/gargoylesoftware/htmlunit/FailingHttpStatusCodeException; nested exception is: java.lang.NoClassDefFoundError: com/gargoylesoftware/htmlunit/FailingHttpStatusCodeException Message: java.lang.NoClassDefFoundError: com/gargoylesoftware/htmlunit/FailingHttpStatusCodeException; nested exception is: java.lang.NoClassDefFoundError: com/gargoylesoftware/htmlunit/FailingHttpStatusCodeException
htmunit jar をビルドパスに追加しました。クラスを見つけることができない理由はありません。サーバークラスは次のとおりです。
package test.eko;
import java.io.IOException;
import com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
public class TestEko {
public String homePage(String place, String checkinDate, String checkoutDate){
final WebClient webClient = new WebClient();
webClient.getOptions().setThrowExceptionOnScriptError(false);
webClient.getOptions().setPrintContentOnFailingStatusCode(false);
String URL = "http://hotels.travelcomparing.com/SearchResults.aspx?languageCode=EN¤cyCode=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 = null;
try {
page = webClient.getPage(URL);
} catch (FailingHttpStatusCodeException | IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
webClient.waitForBackgroundJavaScript(10000);
String htmlContent = page.asXml();
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;
}
}
このコードは、パラメーターとして 3 つの文字列を取り、それらのパラメーターを使用して Web サイトにアクセスし、ページを文字列に保存して、いくつかの情報を解析する必要があります。次に、それらの情報を単一の文字列に連結して返す必要があります。コードは通常のプロジェクト (動的 Web プロジェクトではない) で正常に動作しました。私はWebサービスに非常に慣れていないので、何が間違っていたのかわかりません。誰かが私を正しい方向に向けることができますか?