MessageTag.getBundle() uses findAncestorWithClass() to get hold of a BundleTag. But as a MessageTag does not have a parent-tag, null is returned. getBundle() proceeds and fetches the bundle out of the pageContext, if possible. Normally, this is no problem, but consider this situation: file1.jsp: <i18n:bundle baseName="bundle.one" scope="session"/> file2.jsp, participating in that session: <i18n:bundle baseName="bundle.two"/> <i18n:message key="key.from.bundle.two"/> The MessageTag here cannot find bundle.two, because a) getBundle() returns bundle.one from the pageContext b) bundle.two was not placed there by BundleTag because bundle.one was already there (see BundleTag.doEndTag()) so we get a NullPointerException.
Fixed bug where bundle woult not get saved if any bundle existed in any scope. Should be available in next nightly build.