2016-05-31 5 views
0

Zuerst verwende ich aktuelle Version von UrlValidator Bibliothek von Apache Commons. Ich versuche, die FQDN-URL wie tcp://cor.rect.url:61616 zu validieren, aber der Validator macht diese URL leider ungültig. Ich erstelle Validator mit den folgenden Argumenten:Korrekte FQDN Uri ungültig durch Apache Commons UrlValidator

new UrlValidator(UrlValidator.ALLOW_ALL_SCHEMES + UrlValidator.ALLOW_LOCAL_URLS) 

Hat jemand ähnliches Problem vor getroffen? Gibt es eine Problemumgehung?

+0

'UrlValidator', der [' DomainValidator'] aufruft (https://commons.apache.org/proper/commons-validator/apidocs/src-html/org/apache/commons/validator/routines/DomainValidator.html) um zu prüfen, ob die URL eine gültige TLD hat ('isValidInfrastructureTld',' isValidGenericTld' und 'isValidCountryCodeTld'), mit allow local URL überprüft sie' isValidLocalTld', aber 'url' gehört nicht zur TLD, also Ihre URL ist abgelehnt. – nhahtdh

+0

Das war richtig, danke –

Antwort

0

Nach dem Quellcode UrlValidator , ruft DomainValidator, die validates the TLD in the URL.

Voll qualifizierter Klassenname ist org.apache.commons.validator.routines.UrlValidator, nicht mit der veralteten Implementierung org.apache.commons.validator.UrlValidator

DomainValidator Anrufe isValidTld zu überprüfen, die TLD verwechselt werden. Bei aktivierter Option ALLOW_LOCAL_URLS prüft es zunächst den Domänennamen anhand der Liste der lokalen TLDs in isValidLocalTld und überprüft dann die Domäne auf isValidInfrastructureTld, isValidGenericTld und isValidCountryCodeTld. url ist jedoch in keiner der Listen enthalten.

mit lokalem URLs erlaubt, DomainValidator hat eine abschließende Prüfung für domain name without dot für lokale URL (z localhost), aber Ihre URL in diesen Fall nicht entweder fallen.

Daher wird Ihre URL von UrlValidator abgelehnt.

Wie für die Lösung scheint es, dass Sie Ihre eigenen RegexValidator definieren und es in UrlValidator(RegexValidator authorityValidator, long options) Konstruktor übergeben können. Es kann eine gute Idee sein, den Quellcode DomainValidator.isValidAuthority als Referenz zu verwenden, um die Domäne vom Autorisierungsteil zu analysieren und Ihre eigene Logik zur Validierung der Domäne bereitzustellen.