Friday, August 15, 2008

Java "dll hell"

Буквально на днях стикнувся з таким явищем як "dll hell" тільки в яві. Зараз практично жоден проект має xml файли і, як результат, потребує парсера. Є в мене в Resin кілька проектів, і що саме дивне, одна і та сама копія Resin з проектами на одних серверах працює нормально, а на інших ні - весь час свариться на JAXP парсер.
Виявилося, що розгадка в тому як шукається і інітиться парсер. Спершу шукається системна властивість javax.xml.parser.SAXParserFactory - якщо її не вказано, то шукається в classpath файл \META-INF\services\javax.xml.parsers.SAXParserFactory - ось тут і була проблема. В Resin два jar файли має такий файл і в них описані різні парсери - org.apache.crimson.jaxp.SAXParserFactoryImpl і com.caucho.xml.parsers.XmlSAXParserFactory.
От і виходило, що на одних системах getResourceAsStream повертав одне значення, а на інших - інше.
Мораль цієї історії така - все повинно бути описано в проекті строго настрого.

No comments:

Post a Comment