Мы переносим приложение JEE-enterprise из WebSphere в Liberty 19.0.0.6. Для обмена статическими ресурсами (изображение PNG здесь) мы используем jar-библиотеку веб-фрагментов с изображениями, расположенными в пакете META-INF / resources. Наш пользовательский интерфейс использует Spring-MVC с сопоставленным DispatcherServlet, и он должен обрабатывать загрузку образа. Это хорошо работает с использованием исходного кода DefaultServletHttpRequestHandler. (Вы можете найти исходный код здесь ).
Но в этом классе Spring MVC обнаруживает веб-сервер, чтобы переслать запрос на загрузку изображения. Это вызывает исключительную ситуацию конфликтного сопоставления на сервере WebSphere Liberty, но сервер доставляет образ. В любом случае вы получаете огромные стековые трассы повсюду (консоль, логи,…).
Мы обсуждали эту проблему со службой поддержки IBM. Решение хорошо работает на предыдущем традиционном сервере WebSphere, но больше не на Liberty. Сейчас IBM считает, что Spring-MVC использует внутренние серверные классы в неподдерживаемом сценарии.
[ОШИБКА] SRVE0777E: Es wurde eine Ausnahme von der Anwendungsklasse 'com.ibm.ws.webcontainer.extension.DefaultExtensionProcessor.service: 1.605' ausgelöst.
javax.servlet.ServletException: java.lang.Exception: сопоставление коллизий для com.ibm.ws.webcontainer.osgi.servlet.EntryServletWrapper@356db043: целевой объект com.ibm.ws.webcontainer.osgi.servlet.EntryServlet117 изображения узла
на com.ibm.ws.webcontainer.extension.DefaultExtensionProcessor.service (DefaultExtensionProcessor.java:1605)
в [внутренние классы]
в org.springframework.web.servlet.resource.DefaultServletHttpRequestHandler.handleRequest (DefaultServletHttpRequestHandler.java:122)
в org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter.handle (HttpRequestHandlerAdapter.java:51)
в org.springframework.web.servlet.DispatcherServlet.doDispatch (DispatcherServlet.java:963)
в org.springframework.web.servlet.DispatcherServlet.doService (DispatcherServlet.java:897)
в org.springframework.web.servlet.FrameworkServlet.processRequest (FrameworkServlet.java:970)
в org.springframework.web.servlet.FrameworkServlet.doGet (FrameworkServlet.java:861)
на javax.servlet.http.HttpServlet.service (HttpServlet.java:687)
в [внутренние классы]
в org.springframework.web.servlet.FrameworkServlet.service (FrameworkServlet.java:846)
на javax.servlet.http.HttpServlet.service (HttpServlet.java:790)
в [внутренние классы]
Эта проблема уже известна для сервера WebSphere Liberty, есть ли другие программные проекты, затронутые этой проблемой? На наш взгляд, сейчас это означает, что Spring-MVC не полностью поддерживается на сервере Liberty. Поэтому нам либо нужен другой сервер, либо мы должны перейти от Spring-MVC. Какова ваша точка зрения здесь? Используете ли вы внутренний код от IBM, который просто больше не работает? И если это так, то это можно исправить в Spring-MVC для сервера Liberty.