You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by ng...@apache.org on 2011/01/08 12:10:37 UTC

svn commit: r1056691 - in /mina/vysper/trunk/server/extensions/websockets: ./ src/examples/java/org/apache/vysper/xmpp/extension/websockets/ src/main/java/org/apache/vysper/xmpp/extension/websockets/

Author: ngn
Date: Sat Jan  8 11:10:36 2011
New Revision: 1056691

URL: http://svn.apache.org/viewvc?rev=1056691&view=rev
Log:
Cleaning up and adding Javadocs to websockets implementation

Added:
    mina/vysper/trunk/server/extensions/websockets/src/examples/java/org/apache/vysper/xmpp/extension/websockets/ServerMain.java
      - copied unchanged from r1055583, mina/vysper/trunk/server/extensions/websockets/src/main/java/org/apache/vysper/xmpp/extension/websockets/ServerMain.java
Removed:
    mina/vysper/trunk/server/extensions/websockets/src/main/java/org/apache/vysper/xmpp/extension/websockets/ServerMain.java
Modified:
    mina/vysper/trunk/server/extensions/websockets/pom.xml
    mina/vysper/trunk/server/extensions/websockets/src/examples/java/org/apache/vysper/xmpp/extension/websockets/DemoServer.java
    mina/vysper/trunk/server/extensions/websockets/src/main/java/org/apache/vysper/xmpp/extension/websockets/WebSocketBackedSessionContext.java
    mina/vysper/trunk/server/extensions/websockets/src/main/java/org/apache/vysper/xmpp/extension/websockets/WebSocketEndpoint.java
    mina/vysper/trunk/server/extensions/websockets/src/main/java/org/apache/vysper/xmpp/extension/websockets/XmppWebSocketServlet.java

Modified: mina/vysper/trunk/server/extensions/websockets/pom.xml
URL: http://svn.apache.org/viewvc/mina/vysper/trunk/server/extensions/websockets/pom.xml?rev=1056691&r1=1056690&r2=1056691&view=diff
==============================================================================
--- mina/vysper/trunk/server/extensions/websockets/pom.xml (original)
+++ mina/vysper/trunk/server/extensions/websockets/pom.xml Sat Jan  8 11:10:36 2011
@@ -64,13 +64,35 @@
 			<artifactId>junit</artifactId>
 			<scope>test</scope>
 		</dependency>
-		
+
 		<dependency>
 			<groupId>org.mockito</groupId>
 			<artifactId>mockito-all</artifactId>
 			<scope>test</scope>
 		</dependency>
-
 	</dependencies>
 
+	<build>
+		<plugins>
+			<plugin>
+				<groupId>org.codehaus.mojo</groupId>
+				<artifactId>build-helper-maven-plugin</artifactId>
+				<version>1.1</version>
+				<executions>
+					<execution>
+						<id>add-source</id>
+						<phase>generate-sources</phase>
+						<goals>
+							<goal>add-source</goal>
+						</goals>
+						<configuration>
+							<sources>
+								<source>src/examples/java</source>
+							</sources>
+						</configuration>
+					</execution>
+				</executions>
+			</plugin>
+		</plugins>
+	</build>
 </project>

Modified: mina/vysper/trunk/server/extensions/websockets/src/examples/java/org/apache/vysper/xmpp/extension/websockets/DemoServer.java
URL: http://svn.apache.org/viewvc/mina/vysper/trunk/server/extensions/websockets/src/examples/java/org/apache/vysper/xmpp/extension/websockets/DemoServer.java?rev=1056691&r1=1056690&r2=1056691&view=diff
==============================================================================
--- mina/vysper/trunk/server/extensions/websockets/src/examples/java/org/apache/vysper/xmpp/extension/websockets/DemoServer.java (original)
+++ mina/vysper/trunk/server/extensions/websockets/src/examples/java/org/apache/vysper/xmpp/extension/websockets/DemoServer.java Sat Jan  8 11:10:36 2011
@@ -35,10 +35,9 @@ import org.apache.vysper.xmpp.modules.ex
 import org.apache.vysper.xmpp.modules.extension.xep0119_xmppping.XmppPingModule;
 import org.apache.vysper.xmpp.modules.extension.xep0202_entity_time.EntityTimeModule;
 import org.apache.vysper.xmpp.server.XMPPServer;
-import org.eclipse.jetty.server.Connector;
 import org.eclipse.jetty.server.Server;
+import org.eclipse.jetty.server.handler.HandlerCollection;
 import org.eclipse.jetty.server.handler.ResourceHandler;
-import org.eclipse.jetty.server.nio.SelectChannelConnector;
 
 /**
  * starts the server as a standalone application
@@ -70,23 +69,28 @@ public class DemoServer {
             accountManagement.addUser("user3@vysper.org", "password1");
         }
 
-        Server jetty = new Server();
-        Connector connector = new SelectChannelConnector();
-        connector.setPort(8080);
-        jetty.addConnector(connector);
         
         XMPPServer server = new XMPPServer("vysper.org");
-      // example of how you can combine Vysper with other resources 
-        ResourceHandler resourceHandler = new ResourceHandler();
-        resourceHandler.setResourceBase("src/examples/client");
-        jetty.setHandler(resourceHandler);
 
         server.addEndpoint(new TCPEndpoint());
 
-        WebsocketsEndpoint wsEndpoint = new WebsocketsEndpoint();
+        WebSocketEndpoint wsEndpoint = new WebSocketEndpoint() {
+
+            // example of how you can combine Vysper with other resources 
+            @Override
+            protected Server createJettyServer() {
+                Server jetty = super.createJettyServer();
+                ResourceHandler resourceHandler = new ResourceHandler();
+                resourceHandler.setResourceBase("src/examples/client");
+                jetty.setHandler(resourceHandler);
+                HandlerCollection handlers = new HandlerCollection();
+                handlers.addHandler(resourceHandler);
+                jetty.setHandler(handlers);
+                
+                return jetty;
+            }
+        };
         
-        // provide our custom server to have the ResourceHandler added
-        wsEndpoint.setServer(jetty);
         // wsEndpoint.setSSLEnabled(true);
         // wsEndpoint.setSSLCertificateKeystore("src/test/resources/keystore.jks", "password");
         wsEndpoint.setContextPath("/ws");

Modified: mina/vysper/trunk/server/extensions/websockets/src/main/java/org/apache/vysper/xmpp/extension/websockets/WebSocketBackedSessionContext.java
URL: http://svn.apache.org/viewvc/mina/vysper/trunk/server/extensions/websockets/src/main/java/org/apache/vysper/xmpp/extension/websockets/WebSocketBackedSessionContext.java?rev=1056691&r1=1056690&r2=1056691&view=diff
==============================================================================
--- mina/vysper/trunk/server/extensions/websockets/src/main/java/org/apache/vysper/xmpp/extension/websockets/WebSocketBackedSessionContext.java (original)
+++ mina/vysper/trunk/server/extensions/websockets/src/main/java/org/apache/vysper/xmpp/extension/websockets/WebSocketBackedSessionContext.java Sat Jan  8 11:10:36 2011
@@ -36,6 +36,7 @@ import org.apache.vysper.xmpp.protocol.S
 import org.apache.vysper.xmpp.protocol.StreamErrorCondition;
 import org.apache.vysper.xmpp.server.AbstractSessionContext;
 import org.apache.vysper.xmpp.server.ServerRuntimeContext;
+import org.apache.vysper.xmpp.server.SessionContext;
 import org.apache.vysper.xmpp.server.SessionState;
 import org.apache.vysper.xmpp.server.response.ServerErrorResponses;
 import org.apache.vysper.xmpp.stanza.Stanza;
@@ -46,6 +47,7 @@ import org.slf4j.LoggerFactory;
 import org.xml.sax.SAXException;
 
 /**
+ * Specialized {@link SessionContext} for Websocket endpoints. 
  *
  * @author The Apache MINA Project (dev@mina.apache.org)
  */
@@ -78,18 +80,30 @@ public class WebSocketBackedSessionConte
         xmlReader.setContentHandler(contentHandler);
     }
 
+    /**
+     * {@inheritDoc}
+     */
     public StanzaWriter getResponseWriter() {
         return this;
     }
 
+    /**
+     * {@inheritDoc}
+     */
     public void switchToTLS(boolean delayed, boolean clientTls) {
         // n/a
     }
 
+    /**
+     * {@inheritDoc}
+     */
     public void setIsReopeningXMLStream() {
         // n/a
     }
 
+    /**
+     * {@inheritDoc}
+     */
     public void onConnect(Outbound outbound) {
         LOG.info("WebSocket client connected");
         this.outbound = outbound;
@@ -98,6 +112,9 @@ public class WebSocketBackedSessionConte
         sessionStateHolder.setState(SessionState.ENCRYPTED);
     }
 
+    /**
+     * {@inheritDoc}
+     */
     public void onMessage(byte frame, String data) {
         LOG.info("< " + data);
         try {
@@ -113,17 +130,25 @@ public class WebSocketBackedSessionConte
         }
     }
 
-
+    /**
+     * {@inheritDoc}
+     */
     public void onDisconnect() {
         LOG.info("WebSocket client disconnected");
         endSession(SessionTerminationCause.CONNECTION_ABORT);
     }
 
+    /**
+     * {@inheritDoc}
+     */
     public void stanza(XMLElement element) {
         // on parsed stanzas
         serverRuntimeContext.getStanzaProcessor().processStanza(serverRuntimeContext, this, (Stanza) element, sessionStateHolder);
     }
 
+    /**
+     * {@inheritDoc}
+     */
     public void write(Stanza stanza) {
         // handle stream open
         Renderer renderer = new Renderer(stanza);
@@ -146,14 +171,23 @@ public class WebSocketBackedSessionConte
         }
     }
 
+    /**
+     * {@inheritDoc}
+     */
     public void close() {
         // TODO how to handle?
     }
 
+    /**
+     * {@inheritDoc}
+     */
     public void onMessage(byte frame, byte[] data, int offset, int length) {
         // binary data, should not happen, ignore
     }
 
+    /**
+     * {@inheritDoc}
+     */
     public void onFragment(boolean more, byte opcode, byte[] data, int offset, int length) {
         // binary data, should not happen, ignore
     }

Modified: mina/vysper/trunk/server/extensions/websockets/src/main/java/org/apache/vysper/xmpp/extension/websockets/WebSocketEndpoint.java
URL: http://svn.apache.org/viewvc/mina/vysper/trunk/server/extensions/websockets/src/main/java/org/apache/vysper/xmpp/extension/websockets/WebSocketEndpoint.java?rev=1056691&r1=1056690&r2=1056691&view=diff
==============================================================================
--- mina/vysper/trunk/server/extensions/websockets/src/main/java/org/apache/vysper/xmpp/extension/websockets/WebSocketEndpoint.java (original)
+++ mina/vysper/trunk/server/extensions/websockets/src/main/java/org/apache/vysper/xmpp/extension/websockets/WebSocketEndpoint.java Sat Jan  8 11:10:36 2011
@@ -36,7 +36,6 @@ import org.slf4j.LoggerFactory;
 
 /**
  * Allows HTTP clients to communicate via the WebSocket protocol with Vysper.
- * <p>
  * See http://tools.ietf.org/html/draft-moffitt-xmpp-over-websocket-00
  *
  * @author The Apache MINA Project (dev@mina.apache.org)
@@ -59,13 +58,17 @@ public class WebSocketEndpoint implement
 
     protected String contextPath = "/";
 
+    /**
+     * {@inheritDoc}
+     */
     public void setServerRuntimeContext(ServerRuntimeContext serverRuntimeContext) {
         this.serverRuntimeContext = serverRuntimeContext;
     }
 
     /**
-     * Setter for the listen port
-     * @param port
+     * Set the port on which the endpoint will listen for incoming traffic. 
+     * Defaults to 8080.
+     * @param port The TCP/IP listener port
      */
     public void setPort(int port) {
         this.port = port;
@@ -76,8 +79,8 @@ public class WebSocketEndpoint implement
      * <p>
      * Required if SSL is enabled. Also, setting the keystore password is 
      * required.
-     * @see #setSSLCertificateKeystorePassword 
-     * @param keystorePath the path to the Java keystore
+     * @param keystorePath The path to the Java keystore
+     * @param password The password for the Java keystore
      */
     public void setSSLCertificateKeystore(String keystorePath, String password) {
         sslKeystorePath = keystorePath;
@@ -106,14 +109,6 @@ public class WebSocketEndpoint implement
     }
     
     /**
-     * Provide a custom Jetty Server
-     * @param server
-     */
-    public void setServer(Server server) {
-        this.server = server;
-    }
-
-    /**
      * create a basic Jetty server including a connector on the configured port
      * override in subclass to create a different kind of setup or to reuse an existing instance
      * @return
@@ -154,24 +149,21 @@ public class WebSocketEndpoint implement
     }
     
     /**
-     * @throws IOException 
-     * @throws RuntimeException a wrapper of the possible
-     * {@link java.lang.Exception} that Jetty can throw at start-up
+     * {@inheritDoc}
+     * 
+     * @throws RuntimeException a wrapper of the possible {@link java.lang.Exception} that Jetty can throw at start-up
      */
     public void start() throws IOException {
-        HandlerCollection handlers = new HandlerCollection();
-        if(server != null) {
-            Handler handler = server.getHandler();
-            if(handler != null) {
-                handlers.addHandler(handler);
-            }
+        server = createJettyServer();
+        Handler wsHandler = createHandler();
+        
+        Handler existingHandler = server.getHandler();
+        if(existingHandler != null && existingHandler instanceof HandlerCollection) {
+            ((HandlerCollection)existingHandler).addHandler(wsHandler);
         } else {
-            server = createJettyServer();
+            server.setHandler(wsHandler);
         }
-        Handler handler = createHandler();
-        handlers.addHandler(handler);
 
-        server.setHandler(handlers);
         try {
             server.start();
         } catch (Exception e) {
@@ -179,6 +171,9 @@ public class WebSocketEndpoint implement
         }
     }
 
+    /**
+     * {@inheritDoc}
+     */
     public void stop() {
         try {
             server.stop();

Modified: mina/vysper/trunk/server/extensions/websockets/src/main/java/org/apache/vysper/xmpp/extension/websockets/XmppWebSocketServlet.java
URL: http://svn.apache.org/viewvc/mina/vysper/trunk/server/extensions/websockets/src/main/java/org/apache/vysper/xmpp/extension/websockets/XmppWebSocketServlet.java?rev=1056691&r1=1056690&r2=1056691&view=diff
==============================================================================
--- mina/vysper/trunk/server/extensions/websockets/src/main/java/org/apache/vysper/xmpp/extension/websockets/XmppWebSocketServlet.java (original)
+++ mina/vysper/trunk/server/extensions/websockets/src/main/java/org/apache/vysper/xmpp/extension/websockets/XmppWebSocketServlet.java Sat Jan  8 11:10:36 2011
@@ -19,10 +19,11 @@
  */
 package org.apache.vysper.xmpp.extension.websockets;
 
+import javax.servlet.ServletContext;
+import javax.servlet.ServletContextListener;
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServletRequest;
 
-import org.apache.vysper.xmpp.protocol.SessionStateHolder;
 import org.apache.vysper.xmpp.server.ServerRuntimeContext;
 import org.eclipse.jetty.websocket.WebSocket;
 import org.eclipse.jetty.websocket.WebSocketServlet;
@@ -30,11 +31,20 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 /**
+ * Servlet for initiating websocket connections. Only support in Jetty.
+ * <p>
+ * When creating this servlet from web.xml, the Vysper server needs to be started beforehand 
+ * (e.g. from a {@link ServletContextListener} and the {@link ServerRuntimeContext} needs to be 
+ * added as an attribute in the {@link ServletContext} with the key "org.apache.vysper.xmpp.server.ServerRuntimeContext".
+ * </p>
  *
  * @author The Apache MINA Project (dev@mina.apache.org)
  */
 public class XmppWebSocketServlet extends WebSocketServlet {
     
+    /**
+     * The attribute key for the {@link ServerRuntimeContext} in {@link ServletContext} 
+     */
     public static final String SERVER_RUNTIME_CONTEXT_ATTRIBUTE = "org.apache.vysper.xmpp.server.ServerRuntimeContext";
 
     private final static Logger LOG = LoggerFactory.getLogger(XmppWebSocketServlet.class);
@@ -52,6 +62,9 @@ public class XmppWebSocketServlet extend
         this.serverRuntimeContext = serverRuntimeContext;
     }
     
+    /**
+     * {@inheritDoc}
+     */
     @Override
     public void init() throws ServletException {
         super.init();
@@ -64,6 +77,11 @@ public class XmppWebSocketServlet extend
         }        
     }
 
+    /**
+     * {@inheritDoc}
+     * 
+     * Will return null if the client does not provide the correct websocket sub protocol. "xmpp" is required.
+     */
     protected WebSocket doWebSocketConnect(HttpServletRequest request, String protocol) {
         if(SUB_PROTOCOL.equals(protocol)) {
             WebSocketBackedSessionContext sessionContext = new WebSocketBackedSessionContext(serverRuntimeContext);