Использование Scriptransformer для отправки HTTP-запроса в Solr - PullRequest
0 голосов
/ 21 июля 2011

Я использую solr для индексации RSS-каналов и использую DataImportHandler для анализа URL-адресов и их индексации. Теперь я реализовал веб-сервис, который берет URL-адрес, создает эскиз и сохраняет его в локальном каталоге.

Итак, вот что я хочу сделать: после анализа URL-адреса я хочу отправить Http-запрос в веб-службу с URL-адресом. ScriptTransformer показался мне подходящим, и вот как выглядит мой файл data-config.xml.

    <dataConfig>
    <script> <![CDATA[ function sendURLRequest(row){ 
var url = new java.net.URL("http://***********/GenerateThumbnail?url=http://money.cnn.com/2011/07/20/news/economy/debt_ceiling_deal/index.htm?cnn=yes"); 
url.openConnection().connect(); 
return row; } ]]> 
</script>

  <dataSource type="JdbcDataSource" name="dbSource" driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost/solr_sources" user="root" password="******"/>



  <document>

    <entity name="rssFeedItems" rootEntity="false"  dataSource="dbSource"  query="select url from rss_feeds">

      <entity name="rssFeeds" dataSource="urlSource" url="${rssFeedItems.url}" transformer="script:sendURLRequest" processor="XPathEntityProcessor" forEach="/rss/channel/item">
        <field column="title"        xpath="/rss/channel/item/title"/>
        <field column="link"         xpath="/rss/channel/item/link" />
        <field column="description"  xpath="/rss/channel/item/description" />
        <field column="date_published" xpath="/rss/channel/item/pubDate"/>
      </entity>
    </entity>
.................
................

Как вы можете видеть из файла конфигурации данных, в настоящее время я тестирую, чтобы проверить, будет ли это работать путем жесткого кодирования фиктивного URL.

url.openConnection () подключение (). Должен сделать запрос HTTP. Но изображение не генерируется.

Я не вижу ошибок компиляции. Я попробовал пример сценария распечатки сообщения

var v = new java.lang.Runnable() {
                    run: function() { print('********************PRINTING************************'); }
               }
       v.run();

И это сработало.

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

Есть предложения?

1 Ответ

0 голосов
/ 22 июля 2011

Я думаю, вам нужно сделать больше, чем просто подключиться () к URL, чтобы выполнить HTTP GET.Может быть, попробуйте:

var url = new java.net.URL("http://***********/GenerateThumbnail?url=http://money.cnn.com/2011/07/20/news/economy/debt_ceiling_deal/index.htm?cnn=yes"); 
var connection = url.openConnection();
connection.connect();
connection.getContent();
return row;

Я просто провел небольшой эксперимент, потому что мне было любопытно, и я обнаружил, что url.openConnection (). Connect () даже фактически не открывал соединение с моим тестовым сервером.Только когда я вызвал getContent (), клиент подключился и отправил HTTP-запрос.Возможно, для протокола HTTP библиотека URL-адресов java не видит необходимости открывать соединение с отслеживанием состояния и, следовательно, не подключается до тех пор, пока не будут запрошены данные (в отличие от того, использовался ли URL для доступа к чему-либо, подобному FTP-адресу).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...