quinta-feira, 15 de dezembro de 2016

Java: Validar URL (Gambiarra? Ou não?)

Um dos desafios no Java que encontrei foi a de validar URL. Ok, antes que fale "use a biblioteca do Apache", no meu caso, era um que não era viável, precisava ser Java puro, sem bibliotecas externas. Entretanto, validar a URL, como disse, não é fácil. Um bom validador de URL tem um RegExp enorme se for seguir as normas, e os RegExp mais simples, acabam rejeitando muitas URL válidas (a maioria se esquece que nem todos os sites são .com, .net ou .org, mas que também existe o .co, entre outras).



Entretanto, achei um jeito no Java que valida todas as possíveis e rejeita pelo menos os erros mais comuns: ok, é uma gambiarra, mas funciona:

01. String urlEntry="http://foo.com/blah_blah";
02. boolean ok = true;
03. try {
04.    URL url = new URL(urlEntry);
05.    url.toURI();
06. } catch (MalformedURLException | URISyntaxException ex) {
07.    ok=false;
08. }

 Basicamente o que fiz foi a partir de uma string, crio uma URL. Ao criar a URL, se a string estiver mal formado, ele vai gerar uma MalformedURLException. Entretanto, ele aceita algumas URL inválidas, mas, se você tentar converter para URI, acaba dando o URISyntaxException.

O Curioso é que pela norma RFC 2396, que normaliza o que é URI, toda URL é uma URI (mas nem todo URI é uma URL), então porque será que o Java aceita uma URL, sendo que se ele não é uma URI válida, o mesmo não deveria ser para URL?

Nenhum comentário:

Postar um comentário