Browse Source

Polishing

pull/940/head
Juergen Hoeller 9 years ago
parent
commit
5d454d5ea7
  1. 8
      spring-websocket/src/main/java/org/springframework/web/socket/server/standard/AbstractTyrusRequestUpgradeStrategy.java
  2. 67
      spring-websocket/src/main/java/org/springframework/web/socket/server/standard/WebLogicRequestUpgradeStrategy.java

8
spring-websocket/src/main/java/org/springframework/web/socket/server/standard/AbstractTyrusRequestUpgradeStrategy.java

@ -53,13 +53,14 @@ import org.springframework.util.StringUtils; @@ -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 @@ -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 @@ -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);
}

67
spring-websocket/src/main/java/org/springframework/web/socket/server/standard/WebLogicRequestUpgradeStrategy.java

@ -30,9 +30,7 @@ import javax.servlet.http.HttpServletRequest; @@ -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; @@ -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() {
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
public void close(CloseReason reason) {
}
}
};
@Override
@ -114,15 +101,23 @@ public class WebLogicRequestUpgradeStrategy extends AbstractTyrusRequestUpgradeS @@ -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 @@ -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 @@ -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 @@ -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 @@ -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 @@ -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 @@ -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 @@ -258,6 +250,7 @@ public class WebLogicRequestUpgradeStrategy extends AbstractTyrusRequestUpgradeS
}
}
/**
* Helps to create and invoke {@code weblogic.websocket.tyrus.TyrusServletWriter}.
*/

Loading…
Cancel
Save