bug 463163: Test case for websocket server enpoint packed in an ordered web fragment.
diff --git a/build-web-container/build.xml b/build-web-container/build.xml
index 59a0611..857cccd 100644
--- a/build-web-container/build.xml
+++ b/build-web-container/build.xml
@@ -36,6 +36,7 @@
 		<pathelement location="../test-bundles/war-with-context-xml-cross-context"/>
 		<pathelement location="../test-bundles/war-with-annotations"/>
 		<pathelement location="../test-bundles/war-with-resource-references"/>
+		<pathelement location="../test-bundles/websocket"/>
 	</path>
 
 	<path id="doc.bundles">
diff --git a/org.eclipse.gemini.web.test/.classpath b/org.eclipse.gemini.web.test/.classpath
index 2bbadaf..ca7184c 100644
--- a/org.eclipse.gemini.web.test/.classpath
+++ b/org.eclipse.gemini.web.test/.classpath
@@ -20,6 +20,7 @@
 	<classpathentry kind="var" path="IVY_CACHE/org.eclipse.virgo.mirrored/org.apache.catalina.tribes/8.0.21/org.apache.catalina.tribes-8.0.21.jar" sourcepath="/IVY_CACHE/org.eclipse.virgo.mirrored/org.apache.catalina.tribes/8.0.21/org.apache.catalina.tribes.source-8.0.21.jar"/>
 	<classpathentry kind="var" path="IVY_CACHE/org.eclipse.virgo.mirrored/org.apache.coyote/8.0.21/org.apache.coyote-8.0.21.jar" sourcepath="/IVY_CACHE/org.eclipse.virgo.mirrored/org.apache.coyote/8.0.21/org.apache.coyote.source-8.0.21.jar"/>
 	<classpathentry kind="var" path="IVY_CACHE/org.eclipse.virgo.mirrored/javax.servlet/3.1.0.20150414/javax.servlet-3.1.0.20150414.jar" sourcepath="/IVY_CACHE/org.eclipse.virgo.mirrored/javax.servlet/3.1.0.20150414/javax.servlet-sources-3.1.0.20150414.jar"/>
+	<classpathentry kind="var" path="IVY_CACHE/org.eclipse.virgo.mirrored/javax.websocket/1.1.0.v201401130840/javax.websocket-1.1.0.v201401130840.jar"/>
 	<classpathentry kind="var" path="IVY_CACHE/org.easymock/com.springsource.org.easymock/2.3.0/com.springsource.org.easymock-2.3.0.jar" sourcepath="/IVY_CACHE/org.easymock/com.springsource.org.easymock/2.3.0/com.springsource.org.easymock-sources-2.3.0.jar"/>
 	<classpathentry combineaccessrules="false" kind="src" path="/org.eclipse.gemini.web.tomcat"/>
 	<classpathentry kind="var" path="IVY_CACHE/org.eclipse.virgo.test/org.eclipse.virgo.test.framework/3.7.0.BUILD-20150104200311/org.eclipse.virgo.test.framework-3.7.0.BUILD-20150104200311.jar" sourcepath="/IVY_CACHE/org.eclipse.virgo.test/org.eclipse.virgo.test.framework/3.7.0.BUILD-20150104200311/org.eclipse.virgo.test.framework-sources-3.7.0.BUILD-20150104200311.jar"/>
diff --git a/org.eclipse.gemini.web.test/src/test/java/org/eclipse/gemini/web/test/tomcat/TomcatServletContainerTests.java b/org.eclipse.gemini.web.test/src/test/java/org/eclipse/gemini/web/test/tomcat/TomcatServletContainerTests.java
index bc61361..fae160f 100644
--- a/org.eclipse.gemini.web.test/src/test/java/org/eclipse/gemini/web/test/tomcat/TomcatServletContainerTests.java
+++ b/org.eclipse.gemini.web.test/src/test/java/org/eclipse/gemini/web/test/tomcat/TomcatServletContainerTests.java
@@ -31,6 +31,7 @@
 import java.net.HttpURLConnection;
 import java.net.MalformedURLException;
 import java.net.Socket;
+import java.net.URI;
 import java.net.URL;
 import java.net.URLConnection;
 import java.nio.charset.StandardCharsets;
@@ -38,8 +39,17 @@
 import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.util.Set;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
 
 import javax.servlet.ServletContext;
+import javax.websocket.ClientEndpointConfig;
+import javax.websocket.ContainerProvider;
+import javax.websocket.Endpoint;
+import javax.websocket.EndpointConfig;
+import javax.websocket.MessageHandler;
+import javax.websocket.Session;
+import javax.websocket.WebSocketContainer;
 
 import org.eclipse.gemini.web.core.spi.ServletContainer;
 import org.eclipse.gemini.web.core.spi.WebApplicationHandle;
@@ -96,6 +106,8 @@
 
     private static final String LOCATION_WAR_WITH_RESOURCE_REFERENCES = "../org.eclipse.gemini.web.test/target/resources/war-with-resource-references.war?Web-ContextPath=/war-with-resource-references";
 
+    private static final String LOCATION_WEBSOCKET = "../org.eclipse.gemini.web.test/target/resources/websocket.war?Web-ContextPath=/websocket";
+
     private BundleContext bundleContext;
 
     private ServletContainer container;
@@ -611,6 +623,57 @@
         }
     }
 
+    /**
+     * Test case for https://bugs.eclipse.org/bugs/show_bug.cgi?id=463163
+     */
+    @Test
+    public void testServerEndpointInOrderedWebFragment() throws Exception {
+        Object[] result = startWebApplicationWith(LOCATION_PREFIX + LOCATION_WEBSOCKET, "/websocket");
+
+        try {
+            validateURL("http://localhost:8080/websocket/index.html");
+
+            try (Session wsSession = connectToServer("ws://localhost:8080/websocket/endpoint");) {
+                final CountDownLatch latch = new CountDownLatch(1);
+                final String expectedMessage = "Return: text";
+                wsSession.addMessageHandler(new MessageHandler.Whole<String>() {
+
+                    @Override
+                    public void onMessage(String message) {
+                        System.out.println("Message received: " + message);
+                        assertEquals(expectedMessage, message);
+                        latch.countDown();
+                    }
+
+                });
+                wsSession.getBasicRemote().sendText("text");
+                boolean latchResult = latch.await(10, TimeUnit.SECONDS);
+                assertTrue(latchResult);
+            }
+        } finally {
+            this.container.stopWebApplication((WebApplicationHandle) result[1]);
+            ((Bundle) result[0]).uninstall();
+        }
+    }
+
+    private Session connectToServer(String uri) throws Exception {
+        WebSocketContainer wsContainer = ContainerProvider.getWebSocketContainer();
+        Session wsSession = wsContainer.connectToServer(new Endpoint() {
+
+            @Override
+            public void onError(Session session, Throwable t) {
+                System.err.println("onError: " + t);
+            }
+
+            @Override
+            public void onOpen(Session session, EndpointConfig config) {
+                session.getUserProperties().put("endpoint", this);
+            }
+
+        }, ClientEndpointConfig.Builder.create().build(), new URI(uri));
+        return wsSession;
+    }
+
     private void createFileWithContent(Path file, String content) throws Exception {
         if (Files.notExists(file.getParent())) {
             Files.createDirectories(file.getParent());
diff --git a/test-bundles/websocket/build.xml b/test-bundles/websocket/build.xml
new file mode 100644
index 0000000..d946c4e
--- /dev/null
+++ b/test-bundles/websocket/build.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project name="websocket">
+
+	<property file="${basedir}/../../build.properties"/>
+	<property file="${basedir}/../../build.versions"/>
+	<property name="war.output.dir" value="${basedir}/../../org.eclipse.gemini.web.test/target/resources"/>
+	<property name="disable.bundlor" value="true"/>
+	<import file="${basedir}/../../virgo-build/war/default.xml"/>
+
+</project>
diff --git a/test-bundles/websocket/ivy.xml b/test-bundles/websocket/ivy.xml
new file mode 100644
index 0000000..4f75c93
--- /dev/null
+++ b/test-bundles/websocket/ivy.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?xml-stylesheet type="text/xsl" href="http://ivyrep.jayasoft.org/ivy-doc.xsl"?>
+<ivy-module
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+        xsi:noNamespaceSchemaLocation="http://incubator.apache.org/ivy/schemas/ivy.xsd"
+        version="1.3">
+
+    <info organisation="${project.organisation}" module="${ant.project.name}"/>
+
+    <configurations>
+        <include file="${virgo.build.dir}/common/default-ivy-configurations.xml"/>
+    </configurations>
+
+    <publications>
+        <artifact name="${ant.project.name}" type="war" ext="war"/>
+        <artifact name="${ant.project.name}-sources" type="src" ext="jar"/>
+    </publications>
+
+</ivy-module>
diff --git a/test-bundles/websocket/src/main/java/.gitignore b/test-bundles/websocket/src/main/java/.gitignore
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test-bundles/websocket/src/main/java/.gitignore
diff --git a/test-bundles/websocket/src/main/webapp/WEB-INF/lib/endpoint.jar b/test-bundles/websocket/src/main/webapp/WEB-INF/lib/endpoint.jar
new file mode 100644
index 0000000..060ace8
--- /dev/null
+++ b/test-bundles/websocket/src/main/webapp/WEB-INF/lib/endpoint.jar
Binary files differ
diff --git a/test-bundles/websocket/src/main/webapp/WEB-INF/web.xml b/test-bundles/websocket/src/main/webapp/WEB-INF/web.xml
new file mode 100644
index 0000000..8807e10
--- /dev/null
+++ b/test-bundles/websocket/src/main/webapp/WEB-INF/web.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
+                      http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
+  version="3.1">
+
+</web-app>
diff --git a/test-bundles/websocket/src/main/webapp/index.html b/test-bundles/websocket/src/main/webapp/index.html
new file mode 100644
index 0000000..b0faa51
--- /dev/null
+++ b/test-bundles/websocket/src/main/webapp/index.html
@@ -0,0 +1 @@
+Hello Page
\ No newline at end of file