Die Umstellungsarbeiten von Websphere Application Server (WAS) Version 6 auf Version 7 gingen eigentlich ziemlich gut voran. Sogar das Clustering der Webanwendungen lief wie geschmiert. Trotzdem habe ich mich – wie bei allem IBM-Produkten – gefragt, wann und in welcher Gestalt der “Showstopper” kommt.
Gestern war es dann soweit. Der JSP-Parser (der endlich Java 5 & 6 spricht) versagt bei einer doppelten Definition eines Tag-Verzeichnisses:
SRVE0293E: [Servlet-Fehler]-[/WEB-INF/jsp/index.jsp]: com.ibm.ws.jsp.JspCoreException: /WEB-INF/jsp/index.jsp(66,63) /WEB-INF/jsp/other.jsp(5,53) JSPG0240E: Es wurde versucht, das Präfix "ringwelt" in "urn:jsptagdir:/WEB-INF/tags" zu ändern, obwohl es im aktuellen Geltungsbereich bereits mit "/WEB-INF/tags" definiert ist.
Nach einigem Suchen ließ sich das Problem wiefolgt isolieren: Die JSP index.jsp inkludiert die JSP other.jsp statisch. Beide Dateien enthalten eine identische Tagdir-Definition und nutzen den gleichen Taglib-Prefix. Sobald der Include in der index.jsp innerhalb eines JSP-Tags erfolgt, schmeißt der WAS7 die o.g. Exception.
index.jsp
<%@ page contentType="text/html;charset=UTF-8"%>
<%@ taglib prefix="ringwelt" tagdir="/WEB-INF/tags"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!-- This will work -->
<%@ include file="other.jsp" %>
<!--
This will fail due to the second declaration of
the tagdir prefix above
-->
<c:if test="${1 == 1}">
<%@ include file="other.jsp" %>
</c:if>
other.jsp
<%@ page contentType="text/html;charset=UTF-8"%>
<taglib prefix="ringwelt" tagdir="/WEB-INF/tags"%>
<ringwelt:hello />
Wie kann man so etwas nicht getestet haben? Ist mir unbegreiflich? Wir haben den Bug zur IBM gegeben. Vielleicht zeigt sich “Big Blue” ja erkenntlich und lädt mich zu irgendeiner Webspherekonferenz ein. Gerne in Übersee ;-)