metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2012-10-10 10:39 am
Entry tags:

О проверке входных параметров, принятой в Java

Есть такой оккультный стек-трейс: https://gist.github.com/def1fa8666a8ac83130a.
Причина в том, что в деконструктор массивов кложури вида (let [sql & params] some-array] передан пустой массив и строка sql в таком случае становится null и оный null передается в jdbc драйвер.
Строка на которой валится NPE, выглядит следующим образом:
protected boolean checkForEscapes(String sql) {
sql = sql.toLowerCase();

А вопрос, вообще говоря, в следующем: почему никто не проверяет параметр на валидность хотя бы в одной точке входа в одной из трех либ (clojure.java.jdbc, apache dbcp или jaybird)?

Выглядит так, как будто нормальную проверку параметров на валидность на границах API в жабе делать не принято.

PS: [livejournal.com profile] artureg упорно убеждает меня, что "пусть валится", потому что проверка должна быть "в другом слое". Судя по всему, все разработчики думают, что обработка ошибок должна быть в другом слое :)

[identity profile] artureg.livejournal.com 2012-10-10 07:50 am (UTC)(link)
ксти, а зачем переводить запрос? в нижний регистр?

[identity profile] metaclass.livejournal.com 2012-10-10 07:53 am (UTC)(link)
Проверка на определенные подстроки: https://gist.github.com/3863870

[identity profile] artureg.livejournal.com 2012-10-10 07:55 am (UTC)(link)
тут точно не нужна проверка, так как:
1. если бы sql был нул оно бы упало выше
2. если оно нул надо кидать нпе :)

[identity profile] metaclass.livejournal.com 2012-10-10 08:02 am (UTC)(link)
Этот метод извне либы не вызывается, да. Но они ж и на паблик методах ничего не проверяют :)