瀏覽代碼

Use servlet context classloader when finding servlet class for websockets (#20024)

Change-Id: Ia885ecebe854c0aeda47be2bbc9a9d8a47a03d5c
tags/7.7.1
Artur Signell 7 年之前
父節點
當前提交
408253bc3f
共有 1 個文件被更改,包括 7 次插入3 次删除
  1. 7
    3
      server/src/main/java/com/vaadin/server/communication/JSR356WebsocketInitializer.java

+ 7
- 3
server/src/main/java/com/vaadin/server/communication/JSR356WebsocketInitializer.java 查看文件

@@ -113,7 +113,7 @@ public class JSR356WebsocketInitializer implements ServletContextListener {
for (String servletName : regs.keySet()) {
ServletRegistration servletRegistration = regs.get(servletName);

if (isVaadinServlet(servletRegistration)) {
if (isVaadinServlet(servletRegistration, servletContext)) {
try {
initAtmosphereForVaadinServlet(servletRegistration,
servletContext);
@@ -193,7 +193,8 @@ public class JSR356WebsocketInitializer implements ServletContextListener {
* @return false if the servlet is definitely not a Vaadin servlet, true
* otherwise
*/
protected boolean isVaadinServlet(ServletRegistration servletRegistration) {
protected boolean isVaadinServlet(ServletRegistration servletRegistration,
ServletContext servletContext) {
try {
String servletClassName = servletRegistration.getClassName();
if (servletClassName.equals("com.ibm.ws.wsoc.WsocServlet")) {
@@ -201,7 +202,10 @@ public class JSR356WebsocketInitializer implements ServletContextListener {
// dynamically added
return false;
}
Class<?> servletClass = Class.forName(servletClassName);
// Must use servletContext class loader to load servlet class to
// work correctly in an OSGi environment (#20024)
Class<?> servletClass = servletContext.getClassLoader()
.loadClass(servletClassName);
return VaadinServlet.class.isAssignableFrom(servletClass);
} catch (Exception e) {
// This will fail in OSGi environments, assume everything is a

Loading…
取消
儲存