Rework JSR356 impl to bootstrap with ServerApplicationConfig. This way it is web container independant. Glassfish still doesn't work because of more bugs in it.
Project: http://git-wip-us.apache.org/repos/asf/wicket/repo Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/b50dcfed Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/b50dcfed Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/b50dcfed Branch: refs/heads/master Commit: b50dcfed1781ccf46648b0268550f7f9bb972744 Parents: efce377 Author: Martin Tzvetanov Grigorov <[email protected]> Authored: Thu Jan 30 09:23:04 2014 +0100 Committer: Martin Tzvetanov Grigorov <[email protected]> Committed: Thu Jan 30 09:23:04 2014 +0100 ---------------------------------------------------------------------- .../ws/javax/JavaxUpgradeHttpRequest.java | 30 +-- .../protocol/ws/javax/JavaxWebSocketFilter.java | 193 +------------------ .../ws/javax/JavaxWebSocketProcessor.java | 4 - .../protocol/ws/javax/WicketEndpoint.java | 50 ++++- .../ws/javax/WicketServerApplicationConfig.java | 48 +++++ .../ws/javax/WicketServerEndpointConfig.java | 189 ++++++++++++++++++ .../src/test/webapp/WEB-INF/web.xml | 5 +- 7 files changed, 305 insertions(+), 214 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/wicket/blob/b50dcfed/wicket-native-websocket/wicket-native-websocket-javax/src/main/java/org/apache/wicket/protocol/ws/javax/JavaxUpgradeHttpRequest.java ---------------------------------------------------------------------- diff --git a/wicket-native-websocket/wicket-native-websocket-javax/src/main/java/org/apache/wicket/protocol/ws/javax/JavaxUpgradeHttpRequest.java b/wicket-native-websocket/wicket-native-websocket-javax/src/main/java/org/apache/wicket/protocol/ws/javax/JavaxUpgradeHttpRequest.java index a4bd1a4..e318c93 100644 --- a/wicket-native-websocket/wicket-native-websocket-javax/src/main/java/org/apache/wicket/protocol/ws/javax/JavaxUpgradeHttpRequest.java +++ b/wicket-native-websocket/wicket-native-websocket-javax/src/main/java/org/apache/wicket/protocol/ws/javax/JavaxUpgradeHttpRequest.java @@ -59,25 +59,29 @@ public class JavaxUpgradeHttpRequest implements HttpServletRequest private final String requestUri; private final Map<String, String[]> parametersMap; private final Map<String, List<String>> headers; - private final String contextPath = ""; // artificial public JavaxUpgradeHttpRequest(final Session session) { Map<String, Object> userProperties = session.getUserProperties(); + this.httpSession = (HttpSession) userProperties.get("session"); this.headers = (Map<String, List<String>>) userProperties.get("headers"); - this.queryString = (String) userProperties.get("queryString"); - this.userPrincipal = (Principal) userProperties.get("userPrincipal"); - this.requestUri = userProperties.get("requestURI").toString(); + this.queryString = session.getQueryString(); + this.userPrincipal = session.getUserPrincipal(); + Object requestURI = session.getRequestURI(); + this.requestUri = requestURI != null ? requestURI.toString() : ""; this.parametersMap = new HashMap<>(); - Map<String, List<String>> parameters = (Map<String, List<String>>) userProperties.get("parameterMap"); - for (Map.Entry<String, List<String>> entry : parameters.entrySet()) + Map<String, List<String>> parameters = session.getRequestParameterMap(); + if (parameters != null) { - String name = entry.getKey(); - List<String> value = entry.getValue(); - parametersMap.put(name, value.toArray(new String[value.size()])); + for (Map.Entry<String, List<String>> entry : parameters.entrySet()) + { + String name = entry.getKey(); + List<String> value = entry.getValue(); + parametersMap.put(name, value.toArray(new String[value.size()])); + } } } @@ -107,7 +111,7 @@ public class JavaxUpgradeHttpRequest implements HttpServletRequest if (headers != null) { List<String> headerValues = headers.get(name); - if (headerValues.isEmpty() == false) + if (headerValues != null && !headerValues.isEmpty()) { value = headerValues.get(0); } @@ -122,7 +126,7 @@ public class JavaxUpgradeHttpRequest implements HttpServletRequest if (headers != null) { List<String> headerValues = headers.get(name); - if (headerValues.isEmpty() == false) + if (headerValues != null && !headerValues.isEmpty()) { final Iterator<String> iterator = headerValues.iterator(); values = new Enumeration<String>() @@ -151,7 +155,7 @@ public class JavaxUpgradeHttpRequest implements HttpServletRequest if (headers != null) { Set<String> headerNames = headers.keySet(); - if (headerNames.isEmpty() == false) + if (!headerNames.isEmpty()) { final Iterator<String> iterator = headerNames.iterator(); names = new Enumeration<String>() @@ -201,7 +205,7 @@ public class JavaxUpgradeHttpRequest implements HttpServletRequest @Override public String getContextPath() { - return contextPath; + return ""; } @Override http://git-wip-us.apache.org/repos/asf/wicket/blob/b50dcfed/wicket-native-websocket/wicket-native-websocket-javax/src/main/java/org/apache/wicket/protocol/ws/javax/JavaxWebSocketFilter.java ---------------------------------------------------------------------- diff --git a/wicket-native-websocket/wicket-native-websocket-javax/src/main/java/org/apache/wicket/protocol/ws/javax/JavaxWebSocketFilter.java b/wicket-native-websocket/wicket-native-websocket-javax/src/main/java/org/apache/wicket/protocol/ws/javax/JavaxWebSocketFilter.java index c198a2a..28dfa02 100644 --- a/wicket-native-websocket/wicket-native-websocket-javax/src/main/java/org/apache/wicket/protocol/ws/javax/JavaxWebSocketFilter.java +++ b/wicket-native-websocket/wicket-native-websocket-javax/src/main/java/org/apache/wicket/protocol/ws/javax/JavaxWebSocketFilter.java @@ -16,23 +16,11 @@ */ package org.apache.wicket.protocol.ws.javax; -import java.net.URI; -import java.security.Principal; import java.util.Enumeration; -import java.util.List; -import java.util.Map; import javax.servlet.FilterConfig; import javax.servlet.ServletContext; import javax.servlet.ServletException; -import javax.websocket.Decoder; -import javax.websocket.DeploymentException; -import javax.websocket.Encoder; -import javax.websocket.Extension; -import javax.websocket.HandshakeResponse; -import javax.websocket.server.HandshakeRequest; -import javax.websocket.server.ServerContainer; -import javax.websocket.server.ServerEndpointConfig; import org.apache.wicket.protocol.http.WicketFilter; import org.apache.wicket.protocol.ws.AbstractUpgradeFilter; @@ -43,35 +31,10 @@ import org.apache.wicket.util.string.Strings; */ public class JavaxWebSocketFilter extends AbstractUpgradeFilter { - /** - * A fake mount path used for WebSocket endpoint. - * WicketFilter should not process this path. - * @see WicketFilter#ignorePaths - */ - private static final String WICKET_WEB_SOCKET_PATH = "/wicket/websocket"; - - /** - * A key used to store the application object in WebSocket's Endpoint user properties - */ - static final String APPLICATION_KEY = "wicket.application"; - @Override public void init(final boolean isServlet, final FilterConfig filterConfig) throws ServletException { super.init(isServlet, new JavaxWebSocketFilterConfig(filterConfig)); - - try - { - ServerEndpointConfig config = new WicketServerEndpointConfig(ServerEndpointConfig.Builder.create(WicketEndpoint.class, WICKET_WEB_SOCKET_PATH).build()); - config.getUserProperties().put(APPLICATION_KEY, getApplication()); - - ServletContext servletContext = filterConfig.getServletContext(); - ServerContainer sc = (ServerContainer) servletContext.getAttribute(ServerContainer.class.getName()); - sc.addEndpoint(config); - } - catch (DeploymentException e) { - throw new IllegalStateException(e); - } } /** @@ -108,11 +71,11 @@ public class JavaxWebSocketFilter extends AbstractUpgradeFilter { if (Strings.isEmpty(result)) { - result = WICKET_WEB_SOCKET_PATH; + result = WicketServerEndpointConfig.WICKET_WEB_SOCKET_PATH; } else { - result = result + ',' + WICKET_WEB_SOCKET_PATH; + result = result + ',' + WicketServerEndpointConfig.WICKET_WEB_SOCKET_PATH; } } @@ -125,156 +88,4 @@ public class JavaxWebSocketFilter extends AbstractUpgradeFilter return delegate.getInitParameterNames(); } } - - /** - * A ServerEndpointConfig that uses custom Configurator to collect - * all available information from the passed HandshakeRequest - */ - private static class WicketServerEndpointConfig implements ServerEndpointConfig - { - private final ServerEndpointConfig delegate; - private Configurator configurator; - - private WicketServerEndpointConfig(ServerEndpointConfig delegate) - { - this.delegate = delegate; - } - - @Override - public Class<?> getEndpointClass() - { - return delegate.getEndpointClass(); - } - - @Override - public String getPath() - { - return delegate.getPath(); - } - - @Override - public List<String> getSubprotocols() - { - return delegate.getSubprotocols(); - } - - @Override - public List<Extension> getExtensions() - { - return delegate.getExtensions(); - } - - @Override - public Configurator getConfigurator() - { - if (configurator == null) - { - configurator = new JavaxWebSocketConfigurator(delegate.getConfigurator()); - } - return configurator; - } - - @Override - public List<Class<? extends Encoder>> getEncoders() - { - return delegate.getEncoders(); - } - - @Override - public List<Class<? extends Decoder>> getDecoders() - { - return delegate.getDecoders(); - } - - @Override - public Map<String, Object> getUserProperties() - { - return delegate.getUserProperties(); - } - } - - /** - * A custom Configurator that collects all available information from the HandshakeRequest - */ - private static class JavaxWebSocketConfigurator extends ServerEndpointConfig.Configurator - { - private final ServerEndpointConfig.Configurator delegate; - - public JavaxWebSocketConfigurator(ServerEndpointConfig.Configurator delegate) - { - this.delegate = delegate; - } - - @Override - public void modifyHandshake(ServerEndpointConfig sec, HandshakeRequest request, HandshakeResponse response) - { - delegate.modifyHandshake(sec, request, response); - - // do not store null keys/values because Tomcat 8 uses ConcurrentMap for UserProperties - - Map<String, Object> userProperties = sec.getUserProperties(); - Object httpSession = request.getHttpSession(); - if (httpSession != null) - { - userProperties.put("session", httpSession); - } - - Map<String, List<String>> headers = request.getHeaders(); - if (headers != null) - { - userProperties.put("headers", headers); - } - - - Map<String, List<String>> parameterMap = request.getParameterMap(); - if (parameterMap != null) - { - userProperties.put("parameterMap", parameterMap); - } - - - String queryString = request.getQueryString(); - if (queryString != null) - { - userProperties.put("queryString", queryString); - } - - - URI requestURI = request.getRequestURI(); - if (requestURI != null) - { - userProperties.put("requestURI", requestURI); - } - - Principal userPrincipal = request.getUserPrincipal(); - if (userPrincipal != null) - { - userProperties.put("userPrincipal", userPrincipal); - } - } - - @Override - public String getNegotiatedSubprotocol(List<String> supported, List<String> requested) - { - return delegate.getNegotiatedSubprotocol(supported, requested); - } - - @Override - public List<Extension> getNegotiatedExtensions(List<Extension> installed, List<Extension> requested) - { - return delegate.getNegotiatedExtensions(installed, requested); - } - - @Override - public boolean checkOrigin(String originHeaderValue) - { - return delegate.checkOrigin(originHeaderValue); - } - - @Override - public <T> T getEndpointInstance(Class<T> endpointClass) throws InstantiationException - { - return super.getEndpointInstance(endpointClass); - } - } } http://git-wip-us.apache.org/repos/asf/wicket/blob/b50dcfed/wicket-native-websocket/wicket-native-websocket-javax/src/main/java/org/apache/wicket/protocol/ws/javax/JavaxWebSocketProcessor.java ---------------------------------------------------------------------- diff --git a/wicket-native-websocket/wicket-native-websocket-javax/src/main/java/org/apache/wicket/protocol/ws/javax/JavaxWebSocketProcessor.java b/wicket-native-websocket/wicket-native-websocket-javax/src/main/java/org/apache/wicket/protocol/ws/javax/JavaxWebSocketProcessor.java index 06a6bc3..3462e34 100644 --- a/wicket-native-websocket/wicket-native-websocket-javax/src/main/java/org/apache/wicket/protocol/ws/javax/JavaxWebSocketProcessor.java +++ b/wicket-native-websocket/wicket-native-websocket-javax/src/main/java/org/apache/wicket/protocol/ws/javax/JavaxWebSocketProcessor.java @@ -23,8 +23,6 @@ import javax.websocket.Session; import org.apache.wicket.protocol.http.WebApplication; import org.apache.wicket.protocol.ws.api.AbstractWebSocketProcessor; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** * An {@link org.apache.wicket.protocol.ws.api.IWebSocketProcessor processor} that integrates with @@ -34,8 +32,6 @@ import org.slf4j.LoggerFactory; */ public class JavaxWebSocketProcessor extends AbstractWebSocketProcessor { - private static final Logger LOG = LoggerFactory.getLogger(JavaxWebSocketProcessor.class); - /** * Constructor. * http://git-wip-us.apache.org/repos/asf/wicket/blob/b50dcfed/wicket-native-websocket/wicket-native-websocket-javax/src/main/java/org/apache/wicket/protocol/ws/javax/WicketEndpoint.java ---------------------------------------------------------------------- diff --git a/wicket-native-websocket/wicket-native-websocket-javax/src/main/java/org/apache/wicket/protocol/ws/javax/WicketEndpoint.java b/wicket-native-websocket/wicket-native-websocket-javax/src/main/java/org/apache/wicket/protocol/ws/javax/WicketEndpoint.java index 11b843c..6a9a74a 100644 --- a/wicket-native-websocket/wicket-native-websocket-javax/src/main/java/org/apache/wicket/protocol/ws/javax/WicketEndpoint.java +++ b/wicket-native-websocket/wicket-native-websocket-javax/src/main/java/org/apache/wicket/protocol/ws/javax/WicketEndpoint.java @@ -16,6 +16,9 @@ */ package org.apache.wicket.protocol.ws.javax; +import java.util.List; +import java.util.Map; + import javax.websocket.CloseReason; import javax.websocket.Endpoint; import javax.websocket.EndpointConfig; @@ -23,6 +26,8 @@ import javax.websocket.Session; import org.apache.wicket.ThreadContext; import org.apache.wicket.protocol.http.WebApplication; +import org.apache.wicket.util.lang.Checks; +import org.apache.wicket.util.string.Strings; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -33,12 +38,19 @@ public class WicketEndpoint extends Endpoint { private static final Logger LOG = LoggerFactory.getLogger(WicketEndpoint.class); + /** + * The name of the request parameter that holds the application name + */ + private static final String WICKET_APP_PARAM_NAME = "wicket-app-name"; + private JavaxWebSocketProcessor javaxWebSocketProcessor; @Override public void onOpen(Session session, EndpointConfig endpointConfig) { - WebApplication app = (WebApplication) session.getUserProperties().get(JavaxWebSocketFilter.APPLICATION_KEY); + String appName = getApplicationName(session); + + WebApplication app = (WebApplication) WebApplication.get(appName); try { @@ -49,7 +61,6 @@ public class WicketEndpoint extends Endpoint { ThreadContext.detach(); } - } @Override @@ -63,8 +74,41 @@ public class WicketEndpoint extends Endpoint @Override public void onError(Session session, Throwable t) { + LOG.error("An error occurred in web socket connection with id : " + session.getId(), t); super.onError(session, t); + } - LOG.error("An error occurred in web socket connection with id : " + session.getId(), t); + private String getApplicationName(Session session) + { + String appName = null; + + @SuppressWarnings("unchecked") + Map<String, List<String>> parameters = session.getRequestParameterMap(); + if (parameters != null) + { + appName = parameters.get(WICKET_APP_PARAM_NAME).get(0); + } + else + { + // Glassfish 4 has null parameters map and non-null query string ... + String queryString = session.getQueryString(); + if (!Strings.isEmpty(queryString)) + { + String[] params = Strings.split(queryString, '&'); + for (String paramPair : params) + { + String[] nameValues = Strings.split(paramPair, '='); + if (WICKET_APP_PARAM_NAME.equals(nameValues[0])) + { + appName = nameValues[1]; + } + } + } + } + + Checks.notNull(appName, "The application name cannot be read from the upgrade request's parameters"); + + return appName; } + } http://git-wip-us.apache.org/repos/asf/wicket/blob/b50dcfed/wicket-native-websocket/wicket-native-websocket-javax/src/main/java/org/apache/wicket/protocol/ws/javax/WicketServerApplicationConfig.java ---------------------------------------------------------------------- diff --git a/wicket-native-websocket/wicket-native-websocket-javax/src/main/java/org/apache/wicket/protocol/ws/javax/WicketServerApplicationConfig.java b/wicket-native-websocket/wicket-native-websocket-javax/src/main/java/org/apache/wicket/protocol/ws/javax/WicketServerApplicationConfig.java new file mode 100644 index 0000000..f30e37b --- /dev/null +++ b/wicket-native-websocket/wicket-native-websocket-javax/src/main/java/org/apache/wicket/protocol/ws/javax/WicketServerApplicationConfig.java @@ -0,0 +1,48 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.wicket.protocol.ws.javax; + +import java.util.Collections; +import java.util.HashSet; +import java.util.Set; + +import javax.websocket.Endpoint; +import javax.websocket.server.ServerApplicationConfig; +import javax.websocket.server.ServerEndpointConfig; + +/** + * Configures WicketServerEndpointConfig that will setup {@link org.apache.wicket.protocol.ws.javax.WicketEndpoint} + * and a custom {@link javax.websocket.server.ServerEndpointConfig.Configurator} to collect the + * useful information from the upgrade http request + */ +@SuppressWarnings("unused") // loaded with class-scan +public class WicketServerApplicationConfig implements ServerApplicationConfig +{ + @Override + public Set<ServerEndpointConfig> getEndpointConfigs(Set<Class<? extends Endpoint>> classes) + { + Set<ServerEndpointConfig> configs = new HashSet<>(); + configs.add(new WicketServerEndpointConfig()); + return configs; + } + + @Override + public Set<Class<?>> getAnnotatedEndpointClasses(Set<Class<?>> classes) + { + return Collections.emptySet(); + } +} http://git-wip-us.apache.org/repos/asf/wicket/blob/b50dcfed/wicket-native-websocket/wicket-native-websocket-javax/src/main/java/org/apache/wicket/protocol/ws/javax/WicketServerEndpointConfig.java ---------------------------------------------------------------------- diff --git a/wicket-native-websocket/wicket-native-websocket-javax/src/main/java/org/apache/wicket/protocol/ws/javax/WicketServerEndpointConfig.java b/wicket-native-websocket/wicket-native-websocket-javax/src/main/java/org/apache/wicket/protocol/ws/javax/WicketServerEndpointConfig.java new file mode 100644 index 0000000..e3a039b --- /dev/null +++ b/wicket-native-websocket/wicket-native-websocket-javax/src/main/java/org/apache/wicket/protocol/ws/javax/WicketServerEndpointConfig.java @@ -0,0 +1,189 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.wicket.protocol.ws.javax; + +import java.net.URI; +import java.security.Principal; +import java.util.List; +import java.util.Map; + +import javax.websocket.Decoder; +import javax.websocket.Encoder; +import javax.websocket.Extension; +import javax.websocket.HandshakeResponse; +import javax.websocket.server.HandshakeRequest; +import javax.websocket.server.ServerEndpointConfig; + +/** + * A ServerEndpointConfig that uses custom Configurator to collect + * all available information from the passed HandshakeRequest + */ +class WicketServerEndpointConfig implements ServerEndpointConfig +{ + /** + * A fake mount path used for WebSocket endpoint. + * WicketFilter should not process this path. + * @see org.apache.wicket.protocol.http.WicketFilter#ignorePaths + */ + static final String WICKET_WEB_SOCKET_PATH = "/wicket/websocket"; + + private final ServerEndpointConfig delegate; + + private Configurator configurator; + + WicketServerEndpointConfig() + { + this.delegate = ServerEndpointConfig.Builder.create(WicketEndpoint.class, WICKET_WEB_SOCKET_PATH).build(); + } + + @Override + public Class<?> getEndpointClass() + { + return delegate.getEndpointClass(); + } + + @Override + public String getPath() + { + return delegate.getPath(); + } + + @Override + public List<String> getSubprotocols() + { + return delegate.getSubprotocols(); + } + + @Override + public List<Extension> getExtensions() + { + return delegate.getExtensions(); + } + + @Override + public Configurator getConfigurator() + { + if (configurator == null) + { + configurator = new JavaxWebSocketConfigurator(delegate.getConfigurator()); + } + return configurator; + } + + @Override + public List<Class<? extends Encoder>> getEncoders() + { + return delegate.getEncoders(); + } + + @Override + public List<Class<? extends Decoder>> getDecoders() + { + return delegate.getDecoders(); + } + + @Override + public Map<String, Object> getUserProperties() + { + return delegate.getUserProperties(); + } + + /** + * A custom Configurator that collects all available information from the HandshakeRequest + */ + private static class JavaxWebSocketConfigurator extends ServerEndpointConfig.Configurator + { + private final ServerEndpointConfig.Configurator delegate; + + public JavaxWebSocketConfigurator(ServerEndpointConfig.Configurator delegate) + { + this.delegate = delegate; + } + + @Override + public void modifyHandshake(ServerEndpointConfig sec, HandshakeRequest request, HandshakeResponse response) + { + delegate.modifyHandshake(sec, request, response); + + // do not store null keys/values because Tomcat 8 uses ConcurrentMap for UserProperties + + Map<String, Object> userProperties = sec.getUserProperties(); + Object httpSession = request.getHttpSession(); + if (httpSession != null) + { + userProperties.put("session", httpSession); + } + + Map<String, List<String>> headers = request.getHeaders(); + if (headers != null) + { + userProperties.put("headers", headers); + } + + + Map<String, List<String>> parameterMap = request.getParameterMap(); + if (parameterMap != null) + { + userProperties.put("parameterMap", parameterMap); + } + + + String queryString = request.getQueryString(); + if (queryString != null) + { + userProperties.put("queryString", queryString); + } + + + URI requestURI = request.getRequestURI(); + if (requestURI != null) + { + userProperties.put("requestURI", requestURI); + } + + Principal userPrincipal = request.getUserPrincipal(); + if (userPrincipal != null) + { + userProperties.put("userPrincipal", userPrincipal); + } + } + + @Override + public String getNegotiatedSubprotocol(List<String> supported, List<String> requested) + { + return delegate.getNegotiatedSubprotocol(supported, requested); + } + + @Override + public List<Extension> getNegotiatedExtensions(List<Extension> installed, List<Extension> requested) + { + return delegate.getNegotiatedExtensions(installed, requested); + } + + @Override + public boolean checkOrigin(String originHeaderValue) + { + return delegate.checkOrigin(originHeaderValue); + } + + @Override + public <T> T getEndpointInstance(Class<T> endpointClass) throws InstantiationException + { + return delegate.getEndpointInstance(endpointClass); + } + } +} http://git-wip-us.apache.org/repos/asf/wicket/blob/b50dcfed/wicket-native-websocket/wicket-native-websocket-javax/src/test/webapp/WEB-INF/web.xml ---------------------------------------------------------------------- diff --git a/wicket-native-websocket/wicket-native-websocket-javax/src/test/webapp/WEB-INF/web.xml b/wicket-native-websocket/wicket-native-websocket-javax/src/test/webapp/WEB-INF/web.xml index 3631a2e..187950d 100644 --- a/wicket-native-websocket/wicket-native-websocket-javax/src/test/webapp/WEB-INF/web.xml +++ b/wicket-native-websocket/wicket-native-websocket-javax/src/test/webapp/WEB-INF/web.xml @@ -15,10 +15,9 @@ See the License for the specific language governing permissions and limitations under the License. --> -<web-app xmlns="http://java.sun.com/xml/ns/javaee" +<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://java.sun.com/xml/ns/javaee - http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" + xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1"> <display-name>JSR356 WebSockets</display-name>
