LINUX.ORG.RU

Целесообразность делать метод PRIVATE - ненужное ограничение?


0

1

В HtmlUnit в классе WebClient метод loadWebResponseFromWebConnection сделан private. Метод вызывает сам себя рекурсивно в случае редиректа. Есть ТЗ - сохранить всю последовательность редиректов, т.е. URL1 (HTTP code1 - redirect) -> URL2 (HTTP code2 - redirect) -> URL3 (HTTP code3 - 200 OK). Не нашёл как это можно другим способом без модификации библиотечного файла кроме как override loadWebResponseFromWebConnection что невозможно т.к. он private. Если бы он был protected можно было бы сделать так:

class MyWebClient extends WebClient {
  private List<URL> urls;

  public MyWebClient(List<URL> urls) {
    super();
    this.urls = urls;
  }

  protected WebResponse loadWebResponseFromWebConnection(final WebRequest webRequest, final int allowedRedirects) throws IOException {
    this.urls.add(webRequest.getUrl());
    super.this.loadWebRewsponseFromWebConnection(webRequest, allowedRedirects);
  }
}

Теперь же придётся отключить автоматический редирект и продублировать код по обработке редиректов из loadWebResponseFromWebConnection. Вывод: метод не надо было делать private.


Гм, похоже модеры еще не протрезвели. Удалять каммент по делу из-за одного слова?

anonymous
()
Ответ на: комментарий от anonymous

Удалять каммент по делу из-за одного слова?

отвратительно, согласен

ненужное ограничение?

неудобный костыль

jtootf ★★★★★
()

Целесообразность делать метод PRIVATE - ненужное ограничение

Не удивительно, что ты и за работу regexp'ми с html.

anonymous
()
Ответ на: комментарий от tyler19

Вы можете порекомендовать какую то альтернативу HtmlUnit?

Не парься, 3-4 года назад HtmlUnit вообще был забагованным калом. Править сырцы библиотек под свои нужды — это нормально.

anonymous
()

продублировать код по обработке редиректов из loadWebResponseFromWebConnection.

Наверное, его можно дернуть через рефлекшен, если нет желания дублировать код или модифицировать либу.

Есть ТЗ - сохранить всю последовательность редиректов, т.е. URL1 (HTTP code1 - redirect) -> URL2 (HTTP code2 - redirect) -> URL3 (HTTP code3 - 200 OK).

А через банальный HttpURLConnection никак? Там какая-то страница со сложной логикой, что понадобился именно HtmlUnit?

zhuravlik ★★★★
()

хм, а где проверка allowedRedirects?

frozenix ★★★
()
Ответ на: комментарий от zhuravlik

Там какая-то страница со сложной логикой, что понадобился именно HtmlUnit?

Скорее всего тест должен проверять последовательность редиректов, отсюда и требование.

anonymous
()
Ответ на: комментарий от anonymous

Скорее всего тест должен проверять последовательность редиректов, отсюда и требование.

Так через банальный httpurlconnection тоже можно проверить последовательность редиректов. Я так даже делал для какой-то страницы. HtmlUnit для такой задачи - это из пушки по воробьям, если там не меганавороченная страница, для которой сложно сформировать запрос руками.

zhuravlik ★★★★
()
Ответ на: комментарий от tyler19

Я похоже нашёл способ получше: extend HttpWebConnection и override public WebResponse getResponse(...), подсунуть этот класс в WebClient.setWebConnection(ExtendedHttpWebConnection).

tyler19
() автор топика
Ответ на: комментарий от tyler19

Там требуется это сделать для ONCLICK events, так что нужен браузер обрабатывающий JavaScript.

Тогда понятно.

zhuravlik ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.