Общее·количество·просмотров·страницы

Java Dev Notes - разработка на Java (а также на JavaScript/Python/Flex и др), факты, события из АйТи

четверг, 6 августа 2009 г.

WebSphere: JSPG0091E Syntax error, parameterized types are only available if source level is 5.0

После деплоя приложения на WebSphere, при заходе на несколько JSP-страничек в задеплоенном приложении стало выбрасываться исключение:

JSPG0091E Syntax error, parameterized types are only available if source level is 5.0

Код в JSP использует возможности Java 1.5, в частности, дженерики и ассерты. Именно это и не нравится вебсфере, судя по тому, что она пишет в exception messages. В чем же дело, ведь в коде приложения также используются фичи из Java 1.5?

Дело в том, что для JSP Engine, который и производит компиляцию JSP-страниц в сервлеты, ВебСфера использует отдельные настройки. В частности, через эти настройки можно задать версию Java, для которой написан исходный код. По умолчанию, эта версия установлена 1.3!!!
Соответственно, если задать ее 1.5, то исключения исчезнут.

Есть два пути, как задать версию: через веб-интерфейс (как это сделать, описано здесь) и через файл ibm-web-ext.xmi, который надо добавить в каталог WEB-INF приложения. Я опишу подробно второй способ.

В файле ibm-web-ext.xmi задаются настройки JSP Engine для WebSphere. Через этот файл можно задать множество параметров, которые описаны вот здесь. Нас интересует параметр, который называется jdkSourceLevel - он задает минимальную версию Java, на которой написан код. Для Java 1.5 следует задать значения параметра 15, для Java 1.4 - значение этого параметра должно быть 14.

Файл ibm-web-ext.xmi:



<?xml version="1.0" encoding="UTF-8"?>
<!--
This is configuration file for JSP Engine on WebSphere.
-->

<com.ibm.ejs.models.base.extensions.webappext:WebAppExtension xmi:version="2.0"
xmlns:xmi="http://www.omg.org/XMI"
xmlns:com.ibm.ejs.models.base.extensions.webappext="webappext.xmi"
xmi:id="WebAppExtension_1185836603523">
<webApp href="WEB-INF/web.xml#WebApp_1185836603521"/>
<!--
The following attribute determines the source level of code inside JSP.
In WAS source level 1.3 is used by default.
Since we use Java 1.5 we should point out explicitly to use 1.5
-->
<jspAttributes xmi:id="JSPAttribute_1" name="jdkSourceLevel" value="15"/>
</com.ibm.ejs.models.base.extensions.webappext:WebAppExtension>


Также об этой ошибке написано в блоге DocTeger'а.
Есть также раздел Configuring JSP Parameters в руководстве по ВебСфере.

Постоянные читатели