sobota, marca 06, 2010

PROPFIND, czyli jak przechytrzyć HttpURLConnection

Próbuję dodać do OOo2GD możliwość pobierania dokumentów z serwerów WebDAV [dzięki temu możliwe by było używanie OOo2GD do pracy z dokumentami, które nie ulegałyby konwersji, pracuję nad tym bo to co robi OpenOffice.org z WebDAVem to ludzkie pojęcie przechodzi, nie dość, że angażuje do tego system operacyjny i działa przeraźliwie wolno, to jeszcze tworzy później pliki tymczasowe na serwerze WebDAV] i właśnie próbuję zaimplementować pobieranie listy dokumentów, do czego potrzebuję metody PROPFIND z WebDAV.

Standardowo chciałem użyć HttpURLConnection, ale złośliwie Sun zabronił korzystania z metod innych niż wielka 7, czyli "GET", "POST", "HEAD", "OPTIONS", "PUT", "DELETE" i "TRACE".

Wrrr... Logika jakaś za tym stoi, w końcu to HttpURLConnection, ale jednak miło by było gdyby pozwalała ta klasa na proste jej wykorzystanie do niecnych celów.

Na razie w celach testowych postanowiłem to obejść w bardzo nieelegancki sposób ;-)
Zamiast:

conn.setRequestMethod("PROPFIND");

Które powoduje wylecenie wyjątku "java.net.ProtocolException: Invalid HTTP method: PROPFIND" używam takiej brzydkiej plomby:


try {
Field field = conn.getClass().getDeclaredField("method");
field.setAccessible(true);
field.set(conn, "PROPFIND");
} catch (Exception e) {

}


Jak na razie działa, dostaję od serwera XMLa, już zaczynam go nawet "obrabiać" choć chyba wcześniej pójdę spać ;-)

Sposób ma wadę bo jest przywiązany do konkretnej maszyny wirtualnej, ale działa, a to mi jest potrzebne do testów :-)


Podobne postybeta
Toperz ;-) czyli OCR + Android odsłona 2 albo któraś tam
Wredne Google Docs
Linux to jednak fajny jest ;-)
Programowanie trudne ;-)
Robimy z telefonu/tabletu z Androidem serwer WebDAV ;-)