Polishing
This commit is contained in:
parent
9e03e0e73d
commit
5d454d5ea7
|
|
@ -53,13 +53,14 @@ import org.springframework.util.StringUtils;
|
|||
import org.springframework.web.socket.WebSocketExtension;
|
||||
import org.springframework.web.socket.server.HandshakeFailureException;
|
||||
|
||||
import static org.glassfish.tyrus.spi.WebSocketEngine.UpgradeStatus.SUCCESS;
|
||||
import static org.glassfish.tyrus.spi.WebSocketEngine.UpgradeStatus.*;
|
||||
|
||||
/**
|
||||
* A base class for {@code RequestUpgradeStrategy} implementations on top of
|
||||
* JSR-356 based servers which include Tyrus as their WebSocket engine.
|
||||
*
|
||||
* <p>Works with Tyrus 1.3.5 (WebLogic 12.1.3) and Tyrus 1.7+ (GlassFish 4.1.x).
|
||||
* <p>Works with Tyrus 1.3.5 (WebLogic 12.1.3), Tyrus 1.7 (GlassFish 4.1.0),
|
||||
* Tyrus 1.11 (WebLogic 12.2.1), and Tyrus 1.12 (GlassFish 4.1.1).
|
||||
*
|
||||
* @author Rossen Stoyanchev
|
||||
* @author Brian Clozel
|
||||
|
|
@ -113,7 +114,7 @@ public abstract class AbstractTyrusRequestUpgradeStrategy extends AbstractStanda
|
|||
success = SUCCESS.equals(upgradeInfo.getStatus());
|
||||
if (success) {
|
||||
if (logger.isTraceEnabled()) {
|
||||
logger.trace("Successful upgrade: " + upgradeResponse.getHeaders());
|
||||
logger.trace("Successful request upgrade: " + upgradeResponse.getHeaders());
|
||||
}
|
||||
handleSuccess(servletRequest, servletResponse, upgradeInfo, upgradeResponse);
|
||||
}
|
||||
|
|
@ -231,6 +232,7 @@ public abstract class AbstractTyrusRequestUpgradeStrategy extends AbstractStanda
|
|||
Object clusterContext = accessor.getPropertyValue("clusterContext");
|
||||
try {
|
||||
if (constructorWithBooleanArgument) {
|
||||
// Tyrus 1.11+
|
||||
return constructor.newInstance(registration.getEndpoint(), registration, provider, container,
|
||||
"/", registration.getConfigurator(), sessionListener, clusterContext, null, Boolean.TRUE);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -30,9 +30,7 @@ import javax.servlet.http.HttpServletRequest;
|
|||
import javax.servlet.http.HttpServletResponse;
|
||||
import javax.websocket.CloseReason;
|
||||
|
||||
import org.glassfish.tyrus.core.TyrusEndpointWrapper;
|
||||
import org.glassfish.tyrus.core.TyrusUpgradeResponse;
|
||||
import org.glassfish.tyrus.core.TyrusWebSocketEngine;
|
||||
import org.glassfish.tyrus.core.Utils;
|
||||
import org.glassfish.tyrus.spi.Connection;
|
||||
import org.glassfish.tyrus.spi.WebSocketEngine.UpgradeInfo;
|
||||
|
|
@ -40,45 +38,34 @@ import org.glassfish.tyrus.spi.Writer;
|
|||
|
||||
import org.springframework.beans.BeanWrapper;
|
||||
import org.springframework.beans.BeanWrapperImpl;
|
||||
import org.springframework.util.ClassUtils;
|
||||
import org.springframework.util.ReflectionUtils;
|
||||
import org.springframework.web.socket.server.HandshakeFailureException;
|
||||
|
||||
/**
|
||||
* A WebSocket {@code RequestUpgradeStrategy} for Oracle's WebLogic.
|
||||
* Supports 12.1.3 and 12.2.1.0.
|
||||
* Supports 12.1.3 as well as 12.2.1, as of Spring Framework 4.2.3.
|
||||
*
|
||||
* @author Rossen Stoyanchev
|
||||
* @since 4.1
|
||||
*/
|
||||
public class WebLogicRequestUpgradeStrategy extends AbstractTyrusRequestUpgradeStrategy {
|
||||
|
||||
private static ClassLoader classLoader = WebLogicRequestUpgradeStrategy.class.getClassLoader();
|
||||
|
||||
private static final boolean WLS_12_1_3 = isWebLogic1213();
|
||||
|
||||
private static final TyrusEndpointHelper endpointHelper = WLS_12_1_3 ?
|
||||
new Tyrus135EndpointHelper() : new Tyrus17EndpointHelper();
|
||||
private static final TyrusEndpointHelper endpointHelper =
|
||||
(WLS_12_1_3 ? new Tyrus135EndpointHelper() : new Tyrus17EndpointHelper());
|
||||
|
||||
private static final TyrusMuxableWebSocketHelper webSocketHelper = new TyrusMuxableWebSocketHelper();
|
||||
|
||||
private static final WebLogicServletWriterHelper servletWriterHelper = new WebLogicServletWriterHelper();
|
||||
|
||||
private static final Connection.CloseListener noOpCloseListener = new Connection.CloseListener() {
|
||||
|
||||
@Override
|
||||
public void close(CloseReason reason) {
|
||||
}
|
||||
};
|
||||
|
||||
private static boolean isWebLogic1213() {
|
||||
try {
|
||||
type("weblogic.websocket.tyrus.TyrusMuxableWebSocket").getDeclaredConstructor(
|
||||
type("weblogic.servlet.internal.MuxableSocketHTTP"));
|
||||
return true;
|
||||
}
|
||||
catch (NoSuchMethodException e) {
|
||||
return false;
|
||||
}
|
||||
catch (ClassNotFoundException ex) {
|
||||
throw new IllegalStateException("No compatible WebSocket version found", ex);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
|
|
@ -114,15 +101,23 @@ public class WebLogicRequestUpgradeStrategy extends AbstractTyrusRequestUpgradeS
|
|||
webSocketHelper.registerForReadEvent(webSocket);
|
||||
}
|
||||
|
||||
private static Object getNativeRequest(ServletRequest request) {
|
||||
while (request instanceof ServletRequestWrapper) {
|
||||
request = ((ServletRequestWrapper) request).getRequest();
|
||||
|
||||
private static boolean isWebLogic1213() {
|
||||
try {
|
||||
type("weblogic.websocket.tyrus.TyrusMuxableWebSocket").getDeclaredConstructor(
|
||||
type("weblogic.servlet.internal.MuxableSocketHTTP"));
|
||||
return true;
|
||||
}
|
||||
catch (NoSuchMethodException ex) {
|
||||
return false;
|
||||
}
|
||||
catch (ClassNotFoundException ex) {
|
||||
throw new IllegalStateException("No compatible WebSocket version found", ex);
|
||||
}
|
||||
return request;
|
||||
}
|
||||
|
||||
private static Class<?> type(String className) throws ClassNotFoundException {
|
||||
return classLoader.loadClass(className);
|
||||
return WebLogicRequestUpgradeStrategy.class.getClassLoader().loadClass(className);
|
||||
}
|
||||
|
||||
private static Method method(String className, String method, Class<?>... paramTypes)
|
||||
|
|
@ -131,13 +126,12 @@ public class WebLogicRequestUpgradeStrategy extends AbstractTyrusRequestUpgradeS
|
|||
return type(className).getDeclaredMethod(method, paramTypes);
|
||||
}
|
||||
|
||||
|
||||
private static final Connection.CloseListener noOpCloseListener = new Connection.CloseListener() {
|
||||
|
||||
@Override
|
||||
public void close(CloseReason reason) {
|
||||
private static Object getNativeRequest(ServletRequest request) {
|
||||
while (request instanceof ServletRequestWrapper) {
|
||||
request = ((ServletRequestWrapper) request).getRequest();
|
||||
}
|
||||
};
|
||||
return request;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
|
|
@ -158,6 +152,7 @@ public class WebLogicRequestUpgradeStrategy extends AbstractTyrusRequestUpgradeS
|
|||
static {
|
||||
try {
|
||||
type = type("weblogic.websocket.tyrus.TyrusMuxableWebSocket");
|
||||
|
||||
if (WLS_12_1_3) {
|
||||
constructor = type.getDeclaredConstructor(type("weblogic.servlet.internal.MuxableSocketHTTP"));
|
||||
subjectHelper = null;
|
||||
|
|
@ -171,7 +166,6 @@ public class WebLogicRequestUpgradeStrategy extends AbstractTyrusRequestUpgradeS
|
|||
}
|
||||
|
||||
upgradeMethod = type.getMethod("upgrade", type("weblogic.socket.MuxableSocket"), ServletContext.class);
|
||||
|
||||
readEventMethod = type.getMethod("registerForReadEvent");
|
||||
}
|
||||
catch (Exception ex) {
|
||||
|
|
@ -181,10 +175,8 @@ public class WebLogicRequestUpgradeStrategy extends AbstractTyrusRequestUpgradeS
|
|||
|
||||
private Object newInstance(HttpServletRequest request, Object httpSocket) {
|
||||
try {
|
||||
Object[] args = (WLS_12_1_3 ?
|
||||
new Object[] {httpSocket} :
|
||||
Object[] args = (WLS_12_1_3 ? new Object[] {httpSocket} :
|
||||
new Object[] {httpSocket, null, subjectHelper.getSubject(request)});
|
||||
|
||||
return constructor.newInstance(args);
|
||||
}
|
||||
catch (Exception ex) {
|
||||
|
|
@ -211,6 +203,7 @@ public class WebLogicRequestUpgradeStrategy extends AbstractTyrusRequestUpgradeS
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
private static class SubjectHelper {
|
||||
|
||||
private final Method securityContextMethod;
|
||||
|
|
@ -221,7 +214,6 @@ public class WebLogicRequestUpgradeStrategy extends AbstractTyrusRequestUpgradeS
|
|||
|
||||
private final Method anonymousSubjectMethod;
|
||||
|
||||
|
||||
public SubjectHelper() {
|
||||
try {
|
||||
String className = "weblogic.servlet.internal.WebAppServletContext";
|
||||
|
|
@ -258,6 +250,7 @@ public class WebLogicRequestUpgradeStrategy extends AbstractTyrusRequestUpgradeS
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Helps to create and invoke {@code weblogic.websocket.tyrus.TyrusServletWriter}.
|
||||
*/
|
||||
|
|
|
|||
Loading…
Reference in New Issue