Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Sign in / Register
Toggle navigation
S
spring-boot
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
DEMO
spring-boot
Commits
e0a80c28
Commit
e0a80c28
authored
Mar 24, 2017
by
Andy Wilkinson
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Remove Tomcat 7.0 and 8.0-based WebSocket support
Closes gh-8615
parent
14864909
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
7 additions
and
51 deletions
+7
-51
pom.xml
spring-boot-autoconfigure/pom.xml
+5
-5
TomcatWebSocketContainerCustomizer.java
...nfigure/websocket/TomcatWebSocketContainerCustomizer.java
+2
-46
No files found.
spring-boot-autoconfigure/pom.xml
View file @
e0a80c28
...
...
@@ -219,6 +219,11 @@
<artifactId>
tomcat-embed-el
</artifactId>
<optional>
true
</optional>
</dependency>
<dependency>
<groupId>
org.apache.tomcat.embed
</groupId>
<artifactId>
tomcat-embed-websocket
</artifactId>
<optional>
true
</optional>
</dependency>
<dependency>
<groupId>
org.apache.tomcat
</groupId>
<artifactId>
tomcat-jdbc
</artifactId>
...
...
@@ -706,11 +711,6 @@
<artifactId>
mysql-connector-java
</artifactId>
<scope>
test
</scope>
</dependency>
<dependency>
<groupId>
org.apache.tomcat.embed
</groupId>
<artifactId>
tomcat-embed-websocket
</artifactId>
<scope>
test
</scope>
</dependency>
<dependency>
<groupId>
org.hsqldb
</groupId>
<artifactId>
hsqldb
</artifactId>
...
...
spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/websocket/TomcatWebSocketContainerCustomizer.java
View file @
e0a80c28
...
...
@@ -16,17 +16,13 @@
package
org
.
springframework
.
boot
.
autoconfigure
.
websocket
;
import
java.lang.reflect.Constructor
;
import
org.apache.catalina.Context
;
import
org.apache.tomcat.websocket.server.WsContextListener
;
import
org.springframework.beans.BeanUtils
;
import
org.springframework.boot.web.embedded.tomcat.TomcatContextCustomizer
;
import
org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory
;
import
org.springframework.boot.web.server.WebServerFactoryCustomizer
;
import
org.springframework.core.Ordered
;
import
org.springframework.util.ClassUtils
;
import
org.springframework.util.ReflectionUtils
;
/**
* WebSocket customizer for {@link TomcatServletWebServerFactory}.
...
...
@@ -39,58 +35,18 @@ import org.springframework.util.ReflectionUtils;
public
class
TomcatWebSocketContainerCustomizer
implements
WebServerFactoryCustomizer
<
TomcatServletWebServerFactory
>,
Ordered
{
private
static
final
String
TOMCAT_7_LISTENER_TYPE
=
"org.apache.catalina.deploy.ApplicationListener"
;
private
static
final
String
TOMCAT_8_LISTENER_TYPE
=
"org.apache.tomcat.util.descriptor.web.ApplicationListener"
;
private
static
final
String
WS_LISTENER
=
"org.apache.tomcat.websocket.server.WsContextListener"
;
@Override
public
void
customize
(
TomcatServletWebServerFactory
factory
)
{
factory
.
addContextCustomizers
(
new
TomcatContextCustomizer
()
{
@Override
public
void
customize
(
Context
context
)
{
addListener
(
context
,
findListenerTyp
e
());
context
.
addApplicationListener
(
WsContextListener
.
class
.
getNam
e
());
}
});
}
private
Class
<?>
findListenerType
()
{
if
(
ClassUtils
.
isPresent
(
TOMCAT_7_LISTENER_TYPE
,
null
))
{
return
ClassUtils
.
resolveClassName
(
TOMCAT_7_LISTENER_TYPE
,
null
);
}
if
(
ClassUtils
.
isPresent
(
TOMCAT_8_LISTENER_TYPE
,
null
))
{
return
ClassUtils
.
resolveClassName
(
TOMCAT_8_LISTENER_TYPE
,
null
);
}
// With Tomcat 8.0.8 ApplicationListener is not required
return
null
;
}
/**
* Instead of registering directly as a ServletContainerInitializer, we use the
* ApplicationListener provided by Tomcat. Unfortunately the ApplicationListener class
* moved packages in Tomcat 8 and been deleted in 8.0.8 so we have to use reflection.
* @param context the current context
* @param listenerType the type of listener to add
*/
private
void
addListener
(
Context
context
,
Class
<?>
listenerType
)
{
Class
<?
extends
Context
>
contextClass
=
context
.
getClass
();
if
(
listenerType
==
null
)
{
ReflectionUtils
.
invokeMethod
(
ClassUtils
.
getMethod
(
contextClass
,
"addApplicationListener"
,
String
.
class
),
context
,
WS_LISTENER
);
}
else
{
Constructor
<?>
constructor
=
ClassUtils
.
getConstructorIfAvailable
(
listenerType
,
String
.
class
,
boolean
.
class
);
Object
instance
=
BeanUtils
.
instantiateClass
(
constructor
,
WS_LISTENER
,
false
);
ReflectionUtils
.
invokeMethod
(
ClassUtils
.
getMethod
(
contextClass
,
"addApplicationListener"
,
listenerType
),
context
,
instance
);
}
}
@Override
public
int
getOrder
()
{
return
0
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment