Ошибка 500: java.lang.StackOverflowError в WAS 7 - PullRequest
0 голосов
/ 25 января 2012

Я пытаюсь запустить самое простое в мире приложение JSF на сервере Websphere. Приложение состоит из двух файлов xhtml и файла web.xml. Приложение компилируется, собирается и устанавливается без проблем. Когда я пытаюсь просмотреть страницы в своем браузере, я получаю:

Ошибка 500: java.lang.StackOverflowError

Больше ничего не отображается ни на странице, ни в журналах. Я часами гуглю, но не могу найти решение.

Вот мой файл web.xml:

<context-param>
    <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
    <param-value>.xhtml</param-value>
</context-param>

<servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.jsf</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.xhtml</url-pattern>
</servlet-mapping>

А вот страница JSF:

<f:view>
<h:form>
    <h:panelGrid columns="1">
        <h:outputLabel value="Carrier" />

        <h:outputLabel value="Item Number: " />

        <h:outputLabel value="Postal Code: " />

        <h:outputLabel value="Quantity: " />

    </h:panelGrid>  

</h:form>
</f:view>

Это такое простое приложение, я не могу себе представить, почему оно не запустится. Любая помощь с благодарностью.

О, позвольте мне добавить, что приложение отлично работает на Glassfish и Webspere CE, а не на Websphere Express v7. Конечно, мне нужно, чтобы он работал на Websphere Express v7.

Ответы [ 2 ]

2 голосов
/ 25 января 2012

Очевидно, что фактический файл представления не имеет расширение .jspx, но расширение .xhtml. Следовательно, FacesServlet будет работать в бесконечном цикле, вызывая себя каждый раз, что в конечном итоге приводит к переполнению стека памяти.

Чтобы это исправить, вам нужно удалить эту запись из web.xml:

<context-param>
    <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
    <param-value>.jspx</param-value>
</context-param>

По умолчанию .xhtml уже.

Я также предлагаю удалить это отображение:

<servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.jsf</url-pattern>
</servlet-mapping>

Придерживайтесь использования расширения .xhtml в URL, например, http://localhost:8080/context/page.xhtml.


Обновление : моя ошибка. WAS 7 не поддерживает JSF 2.0 вообще. Он поддерживает только JSF 1.2. См. Также документацию WAS . Вам нужны файлы JSP вместо файлов Facelets (XHTML). Вы также не можете использовать преимущества JSF 2.0.

Чтобы заставить JSF 2.0 работать в WAS 7, вам нужно связать его самостоятельно в /WEB-INF/lib веб-приложения и настроить политики загрузчика классов WAS. Смотрите также эту ссылку

Несмотря на то, что Websphere 7 формально не поддерживает JSF 2.0, вы можете заставить его работать в ухудшенном режиме. Следуйте приведенным ниже инструкциям, чтобы заставить его работать на вашей версии Websphere 7.

  • Обновить до версии не ниже 7.0.0.13
  • Отправьте файлы JAR Mojarra в каталог WEB-INF / lib
  • Установите для загрузчика классов WAR значение PARENT_LAST
  • Установите для загрузчика классов EAR значение PARENT_LAST и APPLICATION

Обратите внимание, что ухудшенный режим означает, что вы НЕ сможете использовать @Resource или любые аннотации JPA. Если вы считаете, что вам нужна поддержка, обратитесь к представителю IBM.

Обратите внимание, что он будет обрабатывать @PostConstruct и @ PreDestroy.

1 голос
/ 13 апреля 2012

Если по какой-то причине вам нужно использовать JSF 1.2 вместо 2.0 ,

, вы можете попробовать добавить Facelets библиотека проекта.

И добавьте следующее в face-config.xml :

<faces-config>
    .
    .
    <application>
        <view-handler>com.sun.facelets.FaceletViewHandler</view-handler>
    </application>
    .
    .
</faces-config>

Теперь вы можете использовать .xhtml вместо .jsp при JSF 1.2

...