You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2012/12/05 23:52:22 UTC
svn commit: r1417683 - in /tomcat/trunk/java/org/apache/tomcat/websocket:
ClientContainerImpl.java PojoServerEndpointConfiguration.java
ServerContainerImpl.java WsEndpointPojo.java WsFrame.java WsServlet.java
WsSession.java
Author: markt
Date: Wed Dec 5 22:52:21 2012
New Revision: 1417683
URL: http://svn.apache.org/viewvc?rev=1417683&view=rev
Log:
Update implementation for API changes
Added:
tomcat/trunk/java/org/apache/tomcat/websocket/PojoServerEndpointConfiguration.java (with props)
Modified:
tomcat/trunk/java/org/apache/tomcat/websocket/ClientContainerImpl.java
tomcat/trunk/java/org/apache/tomcat/websocket/ServerContainerImpl.java
tomcat/trunk/java/org/apache/tomcat/websocket/WsEndpointPojo.java
tomcat/trunk/java/org/apache/tomcat/websocket/WsFrame.java
tomcat/trunk/java/org/apache/tomcat/websocket/WsServlet.java
tomcat/trunk/java/org/apache/tomcat/websocket/WsSession.java
Modified: tomcat/trunk/java/org/apache/tomcat/websocket/ClientContainerImpl.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/ClientContainerImpl.java?rev=1417683&r1=1417682&r2=1417683&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/websocket/ClientContainerImpl.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/websocket/ClientContainerImpl.java Wed Dec 5 22:52:21 2012
@@ -20,20 +20,30 @@ import java.net.URI;
import java.util.Set;
import javax.websocket.ClientContainer;
+import javax.websocket.ClientEndpointConfiguration;
import javax.websocket.DeploymentException;
+import javax.websocket.Endpoint;
import javax.websocket.Session;
public class ClientContainerImpl implements ClientContainer {
@Override
- public void connectToServer(Object endpoint, URI path)
+ public Session connectToServer(Object endpoint, URI path)
throws DeploymentException {
// TODO Auto-generated method stub
+ return null;
+ }
+ @Override
+ public Session connectToServer(Endpoint endpoint,
+ ClientEndpointConfiguration clientEndpointConfiguration, URI path)
+ throws DeploymentException {
+ // TODO Auto-generated method stub
+ return null;
}
@Override
- public Set<Session> getActiveSessions() {
+ public Set<Session> getOpenSessions() {
// TODO Auto-generated method stub
return null;
}
Added: tomcat/trunk/java/org/apache/tomcat/websocket/PojoServerEndpointConfiguration.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/PojoServerEndpointConfiguration.java?rev=1417683&view=auto
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/websocket/PojoServerEndpointConfiguration.java (added)
+++ tomcat/trunk/java/org/apache/tomcat/websocket/PojoServerEndpointConfiguration.java Wed Dec 5 22:52:21 2012
@@ -0,0 +1,78 @@
+/*
+ * 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.tomcat.websocket;
+
+import javax.websocket.DefaultServerConfiguration;
+import javax.websocket.Endpoint;
+import javax.websocket.EndpointFactory;
+
+public class PojoServerEndpointConfiguration extends
+ DefaultServerConfiguration<Endpoint> {
+
+ @Override
+ public boolean checkOrigin(String originHeaderValue) {
+ // Allow all
+ return true;
+ }
+
+ private final EndpointFactory<Endpoint> endpointFactory;
+ private final String servletPath;
+
+ PojoServerEndpointConfiguration(Class<?> pojo,
+ PojoMethodMapping methodMapping, String servletPath, String pathInfo) {
+ this.endpointFactory =
+ new PojoEndpointFactory(pojo, methodMapping, pathInfo);
+ this.servletPath = servletPath;
+ }
+
+
+ @Override
+ public EndpointFactory<Endpoint> getEndpointFactory() {
+ return endpointFactory;
+ }
+
+ @Override
+ public String getPath() {
+ return servletPath;
+ }
+
+ private static class PojoEndpointFactory
+ implements EndpointFactory<Endpoint> {
+
+ private final Class<?> pojo;
+ private final PojoMethodMapping methodMapping;
+ private final String pathInfo;
+
+ public PojoEndpointFactory(Class<?> pojo,
+ PojoMethodMapping methodMapping, String pathInfo) {
+ this.pojo = pojo;
+ this.methodMapping = methodMapping;
+ this.pathInfo = pathInfo;
+ }
+
+ @Override
+ public Endpoint createEndpoint() {
+ Endpoint ep;
+ try {
+ ep = new WsEndpointPojo(pojo, methodMapping, pathInfo);
+ } catch (InstantiationException | IllegalAccessException e) {
+ throw new IllegalArgumentException(e);
+ }
+ return ep;
+ }
+ }
+}
Propchange: tomcat/trunk/java/org/apache/tomcat/websocket/PojoServerEndpointConfiguration.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: tomcat/trunk/java/org/apache/tomcat/websocket/ServerContainerImpl.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/ServerContainerImpl.java?rev=1417683&r1=1417682&r2=1417683&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/websocket/ServerContainerImpl.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/websocket/ServerContainerImpl.java Wed Dec 5 22:52:21 2012
@@ -23,7 +23,6 @@ import java.util.concurrent.ConcurrentHa
import javax.servlet.ServletContext;
import javax.servlet.ServletRegistration;
import javax.websocket.DeploymentException;
-import javax.websocket.Endpoint;
import javax.websocket.ServerContainer;
import javax.websocket.ServerEndpointConfiguration;
@@ -73,7 +72,7 @@ public class ServerContainerImpl extends
private volatile ServletContext servletContext = null;
- private Map<String, Class<? extends Endpoint>> endpointMap =
+ private Map<String, ServerEndpointConfiguration<?>> configMap =
new ConcurrentHashMap<>();
private Map<String, Class<?>> pojoMap = new ConcurrentHashMap<>();
@@ -93,7 +92,7 @@ public class ServerContainerImpl extends
@Override
- public void publishServer(Class<? extends Endpoint> clazz)
+ public void publishServer(Class<? extends ServerEndpointConfiguration<?>> clazz)
throws DeploymentException {
if (servletContext == null) {
@@ -101,17 +100,15 @@ public class ServerContainerImpl extends
sm.getString("serverContainer.servletContextMissing"));
}
- Endpoint ep = null;
+ ServerEndpointConfiguration<?> sec = null;
try {
- ep = clazz.newInstance();
+ sec = clazz.newInstance();
} catch (InstantiationException | IllegalAccessException e) {
throw new DeploymentException(
sm.getString("sci.newInstance.fail", clazz.getName()), e);
}
- ServerEndpointConfiguration config =
- (ServerEndpointConfiguration) ep.getEndpointConfiguration();
- String path = config.getPath();
+ String path = sec.getPath();
String mappingPath = Util.getServletMappingPath(path);
if (log.isDebugEnabled()) {
@@ -119,8 +116,7 @@ public class ServerContainerImpl extends
clazz.getName(), path, servletContext.getContextPath()));
}
- endpointMap.put(
- mappingPath.substring(0, mappingPath.length() - 2), clazz);
+ configMap.put(mappingPath.substring(0, mappingPath.length() - 2), sec);
addWsServletMapping(mappingPath);
}
@@ -175,22 +171,22 @@ public class ServerContainerImpl extends
}
- public Endpoint getEndpoint(String servletPath, String pathInfo)
- throws InstantiationException, IllegalAccessException {
- Class<? extends Endpoint> clazzEndpoint = endpointMap.get(servletPath);
- if (clazzEndpoint != null) {
- Endpoint ep = clazzEndpoint.newInstance();
- return ep;
+ public ServerEndpointConfiguration<?> getServerEndpointConfiguration(
+ String servletPath, String pathInfo) {
+
+ ServerEndpointConfiguration<?> sec = configMap.get(servletPath);
+ if (sec != null) {
+ return sec;
}
- // TODO Need to cache the pojoMethodMapping too
- Class<?> clazzPojo = pojoMap.get(servletPath);
- if (clazzPojo != null) {
- PojoMethodMapping mapping = pojoMethodMap.get(clazzPojo);
+ Class<?> pojo = pojoMap.get(servletPath);
+ if (pojo != null) {
+ PojoMethodMapping mapping = pojoMethodMap.get(pojo);
if (mapping != null) {
- Endpoint ep = new WsEndpointPojo(clazzPojo,
- mapping, servletPath, pathInfo);
- return ep;
+ PojoServerEndpointConfiguration pojoSec =
+ new PojoServerEndpointConfiguration(pojo, mapping,
+ servletPath, pathInfo);
+ return pojoSec;
}
}
Modified: tomcat/trunk/java/org/apache/tomcat/websocket/WsEndpointPojo.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/WsEndpointPojo.java?rev=1417683&r1=1417682&r2=1417683&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/websocket/WsEndpointPojo.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/websocket/WsEndpointPojo.java Wed Dec 5 22:52:21 2012
@@ -19,9 +19,7 @@ package org.apache.tomcat.websocket;
import java.lang.reflect.InvocationTargetException;
import javax.websocket.CloseReason;
-import javax.websocket.DefaultServerConfiguration;
import javax.websocket.Endpoint;
-import javax.websocket.EndpointConfiguration;
import javax.websocket.Session;
/**
@@ -32,33 +30,20 @@ import javax.websocket.Session;
public class WsEndpointPojo extends Endpoint {
private final Object pojo;
- private final EndpointConfiguration config;
private final String pathInfo;
private final PojoMethodMapping methodMapping;
private Session session = null;
public WsEndpointPojo(Class<?> clazzPojo, PojoMethodMapping methodMapping,
- String ServletPath, String pathInfo)
+ String pathInfo)
throws InstantiationException, IllegalAccessException {
+ // TODO Use factory from annotation if present
this.pojo = clazzPojo.newInstance();
- this.config = new DefaultServerConfiguration(ServletPath) {
-
- @Override
- public boolean checkOrigin(String originHeaderValue) {
- return true;
- }
- };
-
this.methodMapping = methodMapping;
this.pathInfo = pathInfo;
}
@Override
- public EndpointConfiguration getEndpointConfiguration() {
- return config;
- }
-
- @Override
public void onOpen(Session session) {
this.session = session;
Modified: tomcat/trunk/java/org/apache/tomcat/websocket/WsFrame.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/WsFrame.java?rev=1417683&r1=1417682&r2=1417683&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/websocket/WsFrame.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/websocket/WsFrame.java Wed Dec 5 22:52:21 2012
@@ -105,7 +105,7 @@ public class WsFrame {
b = inputBuffer[1];
// Client data must be masked
if ((b & 0x80) == 0) {
- throw new IOException(sm.getString("wsFrame.notMasked.notMasked"));
+ throw new IOException(sm.getString("wsFrame.notMasked"));
}
payloadLength = b & 0x7F;
Modified: tomcat/trunk/java/org/apache/tomcat/websocket/WsServlet.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/WsServlet.java?rev=1417683&r1=1417682&r2=1417683&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/websocket/WsServlet.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/websocket/WsServlet.java Wed Dec 5 22:52:21 2012
@@ -90,20 +90,12 @@ public class WsServlet extends HttpServl
// Need an Endpoint instance to progress this further
ServerContainerImpl cp = ServerContainerImpl.getServerContainer();
- Endpoint ep = null;
- try {
- ep = cp.getEndpoint(req.getServletPath(), req.getPathInfo());
- } catch (InstantiationException | IllegalAccessException e) {
- // This will trigger an error response
- throw new ServletException(e);
- }
-
- ServerEndpointConfiguration epConfig =
- (ServerEndpointConfiguration) ep.getEndpointConfiguration();
+ ServerEndpointConfiguration<?> sec = cp.getServerEndpointConfiguration(
+ req.getServletPath(), req.getPathInfo());
// Origin check
String origin = req.getHeader("Origin");
- if (!epConfig.checkOrigin(origin)) {
+ if (!sec.checkOrigin(origin)) {
resp.sendError(HttpServletResponse.SC_FORBIDDEN);
return;
}
@@ -112,14 +104,14 @@ public class WsServlet extends HttpServl
List<String> subProtocols =
getTokensFromHeader(req, "Sec-WebSocket-Protocol");
if (!subProtocols.isEmpty()) {
- subProtocol = epConfig.getNegotiatedSubprotocol(subProtocols);
+ subProtocol = sec.getNegotiatedSubprotocol(subProtocols);
}
// Extensions
List<String> requestedExtensions =
getTokensFromHeader(req, "Sec-WebSocket-Extensions");
if (!extensions.isEmpty()) {
- extensions = epConfig.getNegotiatedExtensions(requestedExtensions);
+ extensions = sec.getNegotiatedExtensions(requestedExtensions);
}
// If we got this far, all is good. Accept the connection.
@@ -141,6 +133,7 @@ public class WsServlet extends HttpServl
resp.setHeader("Sec-WebSocket-Extensions", sb.toString());
}
+ Endpoint ep = (Endpoint) sec.getEndpointFactory().createEndpoint();
ProtocolHandler wsHandler = new WsProtocolHandler(ep);
req.upgrade(wsHandler);
Modified: tomcat/trunk/java/org/apache/tomcat/websocket/WsSession.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/WsSession.java?rev=1417683&r1=1417682&r2=1417683&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/websocket/WsSession.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/websocket/WsSession.java Wed Dec 5 22:52:21 2012
@@ -26,7 +26,6 @@ import java.util.Set;
import javax.websocket.ClientContainer;
import javax.websocket.CloseReason;
import javax.websocket.CloseReason.CloseCodes;
-import javax.websocket.Encoder;
import javax.websocket.MessageHandler;
import javax.websocket.RemoteEndpoint;
import javax.websocket.Session;
@@ -42,12 +41,6 @@ public class WsSession implements Sessio
}
@Override
- public void setEncoders(List<Encoder> encoders) {
- // TODO Auto-generated method stub
-
- }
-
- @Override
public void addMessageHandler(MessageHandler listener) {
messageHandlers.add(listener);
}
@@ -93,7 +86,7 @@ public class WsSession implements Sessio
}
@Override
- public boolean isActive() {
+ public boolean isOpen() {
// TODO Auto-generated method stub
return false;
}
@@ -163,4 +156,9 @@ public class WsSession implements Sessio
return null;
}
+ @Override
+ public Map<String, Object> getUserProperties() {
+ // TODO Auto-generated method stub
+ return null;
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org
Re: svn commit: r1417683 - in /tomcat/trunk/java/org/apache/tomcat/websocket: ClientContainerImpl.java PojoServerEndpointConfiguration.java ServerContainerImpl.java WsEndpointPojo.java WsFrame.java WsServlet.java WsSession.java
Posted by Mark Thomas <ma...@apache.org>.
Konstantin Kolinko <kn...@gmail.com> wrote:
>2012/12/6 <ma...@apache.org>:
>> Author: markt
>> Date: Wed Dec 5 22:52:21 2012
>> New Revision: 1417683
>>
>> URL: http://svn.apache.org/viewvc?rev=1417683&view=rev
>> Log:
>> Update implementation for API changes
>>
>> Added:
>>
>tomcat/trunk/java/org/apache/tomcat/websocket/PojoServerEndpointConfiguration.java
> (with props)
>> Modified:
>>
>tomcat/trunk/java/org/apache/tomcat/websocket/ClientContainerImpl.java
>>
>tomcat/trunk/java/org/apache/tomcat/websocket/ServerContainerImpl.java
>> tomcat/trunk/java/org/apache/tomcat/websocket/WsEndpointPojo.java
>> tomcat/trunk/java/org/apache/tomcat/websocket/WsFrame.java
>> tomcat/trunk/java/org/apache/tomcat/websocket/WsServlet.java
>> tomcat/trunk/java/org/apache/tomcat/websocket/WsSession.java
>>
>
>
>> Added:
>tomcat/trunk/java/org/apache/tomcat/websocket/PojoServerEndpointConfiguration.java
>> URL:
>http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/PojoServerEndpointConfiguration.java?rev=1417683&view=auto
>>
>==============================================================================
>> ---
>tomcat/trunk/java/org/apache/tomcat/websocket/PojoServerEndpointConfiguration.java
>(added)
>> +++
>tomcat/trunk/java/org/apache/tomcat/websocket/PojoServerEndpointConfiguration.java
>Wed Dec 5 22:52:21 2012
>> +package org.apache.tomcat.websocket;
>> +
>> +import javax.websocket.DefaultServerConfiguration;
>> +import javax.websocket.Endpoint;
>> +import javax.websocket.EndpointFactory;
>> +
>> +public class PojoServerEndpointConfiguration extends
>> + DefaultServerConfiguration<Endpoint> {
>> +
>> + @Override
>> + public boolean checkOrigin(String originHeaderValue) {
>> + // Allow all
>> + return true;
>> + }
>> +
>> + private final EndpointFactory<Endpoint> endpointFactory;
>> + private final String servletPath;
>> +
>> + PojoServerEndpointConfiguration(Class<?> pojo,
>> + PojoMethodMapping methodMapping, String servletPath,
>String pathInfo) {
>> + this.endpointFactory =
>> + new PojoEndpointFactory(pojo, methodMapping,
>pathInfo);
>> + this.servletPath = servletPath;
>> + }
>> +
>
>(...)
>
>Was it intended to make the constructor package-visible? If it is then
>the class itself could be made package-visible, for consistency. My
>guess that was a typo. The PojoMethodMapping class is already public
>and this one does not add much.
>
>Best regards,
>Konstantin Kolinko
>
>---------------------------------------------------------------------
>To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
>For additional commands, e-mail: dev-help@tomcat.apache.org
Yes, it was an oversight. I intend to review all the visibilities once the implementation is complete.
Mark
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org
Re: svn commit: r1417683 - in /tomcat/trunk/java/org/apache/tomcat/websocket:
ClientContainerImpl.java PojoServerEndpointConfiguration.java
ServerContainerImpl.java WsEndpointPojo.java WsFrame.java WsServlet.java WsSession.java
Posted by Konstantin Kolinko <kn...@gmail.com>.
2012/12/6 <ma...@apache.org>:
> Author: markt
> Date: Wed Dec 5 22:52:21 2012
> New Revision: 1417683
>
> URL: http://svn.apache.org/viewvc?rev=1417683&view=rev
> Log:
> Update implementation for API changes
>
> Added:
> tomcat/trunk/java/org/apache/tomcat/websocket/PojoServerEndpointConfiguration.java (with props)
> Modified:
> tomcat/trunk/java/org/apache/tomcat/websocket/ClientContainerImpl.java
> tomcat/trunk/java/org/apache/tomcat/websocket/ServerContainerImpl.java
> tomcat/trunk/java/org/apache/tomcat/websocket/WsEndpointPojo.java
> tomcat/trunk/java/org/apache/tomcat/websocket/WsFrame.java
> tomcat/trunk/java/org/apache/tomcat/websocket/WsServlet.java
> tomcat/trunk/java/org/apache/tomcat/websocket/WsSession.java
>
> Added: tomcat/trunk/java/org/apache/tomcat/websocket/PojoServerEndpointConfiguration.java
> URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/PojoServerEndpointConfiguration.java?rev=1417683&view=auto
> ==============================================================================
> --- tomcat/trunk/java/org/apache/tomcat/websocket/PojoServerEndpointConfiguration.java (added)
> +++ tomcat/trunk/java/org/apache/tomcat/websocket/PojoServerEndpointConfiguration.java Wed Dec 5 22:52:21 2012
> +package org.apache.tomcat.websocket;
> +
> +import javax.websocket.DefaultServerConfiguration;
> +import javax.websocket.Endpoint;
> +import javax.websocket.EndpointFactory;
> +
> +public class PojoServerEndpointConfiguration extends
> + DefaultServerConfiguration<Endpoint> {
> +
> + @Override
> + public boolean checkOrigin(String originHeaderValue) {
> + // Allow all
> + return true;
> + }
> +
> + private final EndpointFactory<Endpoint> endpointFactory;
> + private final String servletPath;
> +
> + PojoServerEndpointConfiguration(Class<?> pojo,
> + PojoMethodMapping methodMapping, String servletPath, String pathInfo) {
> + this.endpointFactory =
> + new PojoEndpointFactory(pojo, methodMapping, pathInfo);
> + this.servletPath = servletPath;
> + }
> +
(...)
Was it intended to make the constructor package-visible? If it is then
the class itself could be made package-visible, for consistency. My
guess that was a typo. The PojoMethodMapping class is already public
and this one does not add much.
Best regards,
Konstantin Kolinko
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org