提交 d20dabf1 编写于 作者: R Rossen Stoyanchev

Fix issue with obtaining WebSocketContainer

上级 d5a5a489
...@@ -35,7 +35,6 @@ import org.springframework.beans.factory.config.BeanPostProcessor; ...@@ -35,7 +35,6 @@ import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware; import org.springframework.context.ApplicationContextAware;
import org.springframework.util.Assert; import org.springframework.util.Assert;
import org.springframework.util.ClassUtils;
import org.springframework.util.ReflectionUtils; import org.springframework.util.ReflectionUtils;
/** /**
...@@ -58,9 +57,6 @@ import org.springframework.util.ReflectionUtils; ...@@ -58,9 +57,6 @@ import org.springframework.util.ReflectionUtils;
*/ */
public class ServerEndpointExporter implements InitializingBean, BeanPostProcessor, ApplicationContextAware { public class ServerEndpointExporter implements InitializingBean, BeanPostProcessor, ApplicationContextAware {
private static final boolean isServletApiPresent =
ClassUtils.isPresent("javax.servlet.ServletContext", ServerEndpointExporter.class.getClassLoader());
private static Log logger = LogFactory.getLog(ServerEndpointExporter.class); private static Log logger = LogFactory.getLog(ServerEndpointExporter.class);
...@@ -103,12 +99,19 @@ public class ServerEndpointExporter implements InitializingBean, BeanPostProcess ...@@ -103,12 +99,19 @@ public class ServerEndpointExporter implements InitializingBean, BeanPostProcess
} }
protected ServerContainer getServerContainer() { protected ServerContainer getServerContainer() {
if (isServletApiPresent) {
Class<?> servletContextClass;
try {
servletContextClass = Class.forName("javax.servlet.ServletContext");
}
catch (Throwable e) {
return null;
}
try { try {
Method getter = ReflectionUtils.findMethod(this.applicationContext.getClass(), "getServletContext"); Method getter = ReflectionUtils.findMethod(this.applicationContext.getClass(), "getServletContext");
Object servletContext = getter.invoke(this.applicationContext); Object servletContext = getter.invoke(this.applicationContext);
Method attrMethod = ReflectionUtils.findMethod(servletContextClass, "getAttribute", String.class);
Method attrMethod = ReflectionUtils.findMethod(servletContext.getClass(), "getAttribute", String.class);
return (ServerContainer) attrMethod.invoke(servletContext, "javax.websocket.server.ServerContainer"); return (ServerContainer) attrMethod.invoke(servletContext, "javax.websocket.server.ServerContainer");
} }
catch (Exception ex) { catch (Exception ex) {
...@@ -116,8 +119,6 @@ public class ServerEndpointExporter implements InitializingBean, BeanPostProcess ...@@ -116,8 +119,6 @@ public class ServerEndpointExporter implements InitializingBean, BeanPostProcess
"Failed to get javax.websocket.server.ServerContainer via ServletContext attribute", ex); "Failed to get javax.websocket.server.ServerContainer via ServletContext attribute", ex);
} }
} }
return null;
}
@Override @Override
public void afterPropertiesSet() throws Exception { public void afterPropertiesSet() throws Exception {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册