Fix issue with obtaining WebSocketContainer
This commit is contained in:
parent
3f9da6f480
commit
3c6c56fe0d
|
@ -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;
|
||||||
*/
|
*/
|
||||||
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
|
||||||
}
|
}
|
||||||
|
|
||||||
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
|
||||||
"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 {
|
||||||
|
|
Loading…
Reference in New Issue