Я использовал тег <f:websocket/>
в своем проекте с mojarra 2.3.3, и на стадии проекта «Разработка» все работало нормально.Но когда проект был развернут в нашей системе обеспечения качества с этапом проекта «Staging», клиент выдал ошибку JS «mojarra» notfined ».Это связано с тем, что файл jsf.js загружается как пустой файл.При отладке я обнаружил, что в com.sun.faces.application.resource.ResourceHelper#getInputStreamFromClientInfo
содержимое файла js копируется в GZIPOutputStream, который никогда не завершается, и, таким образом, ничего не записывается в обернутый ByteArrayOutputStream (ll. 234-237), что приводит к пустому ответу на мойклиент.На этапе Development
файл доставляется без сжатия.
Это ошибка или я что-то упустил?Есть ли конфигурация для этого?Есть ли обходной путь?
Я попытался установить com.sun.faces.compressJavaScript
в false
безуспешно.Когда я вызываю GZIPOutputStream#finish()
в потоке перед его записью в ByteArrayInputStream в отладчике, содержимое входного потока корректно и отправляется клиенту.Я также проверил mojarra 2.3.8, но код, похоже, не изменился.
Я ожидаю, что клиент получит правильный код js.Это не обязательно должно быть сжато.
Добавление: Проект выполняется на Tomcat 8.5.14 с JDK1.8.0_161, и я использую Primefaces (6.2).Я создал рабочий пример miminal здесь , который не использует Primefaces.На самом деле он ничего не вставляет в канал веб-сокета, но здесь важна ошибка JS при загрузке index.xhtml.Он также протестирован с Java 1.8_202, Tomcat 8.5.37, Mojarra 2.3.8.Он работает (загружая jsf.js) с Mojarra 2.2.14.