inadvertently, location="${WEBINF.dir}/lib/struts-config_1_2.dtd" became an empty file of 0 bytes length. validating <dtd publicId="-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" produced lots of kind of misleading errors. Please warn and abort if the dtd location a) is missing altogether b) unreadable c) 0 == String.trim().length()