You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by js...@apache.org on 2007/04/12 00:05:39 UTC

svn commit: r527701 - in /activemq/trunk: ./ activemq-fileserver/ activemq-fileserver/src/ activemq-fileserver/src/main/ activemq-fileserver/src/main/java/ activemq-fileserver/src/main/java/org/ activemq-fileserver/src/main/java/org/apache/ activemq-fi...

Author: jstrachan
Date: Wed Apr 11 15:05:37 2007
New Revision: 527701

URL: http://svn.apache.org/viewvc?view=rev&rev=527701
Log:
Applied patch from Aleksi Kallio for AMQ-1075 to add a file server for out of band BlobMessage support

Added:
    activemq/trunk/activemq-fileserver/
    activemq/trunk/activemq-fileserver/pom.xml   (with props)
    activemq/trunk/activemq-fileserver/src/
    activemq/trunk/activemq-fileserver/src/main/
    activemq/trunk/activemq-fileserver/src/main/java/
    activemq/trunk/activemq-fileserver/src/main/java/org/
    activemq/trunk/activemq-fileserver/src/main/java/org/apache/
    activemq/trunk/activemq-fileserver/src/main/java/org/apache/activemq/
    activemq/trunk/activemq-fileserver/src/main/java/org/apache/activemq/util/
    activemq/trunk/activemq-fileserver/src/main/java/org/apache/activemq/util/FilenameGuardFilter.java   (with props)
    activemq/trunk/activemq-fileserver/src/main/java/org/apache/activemq/util/RestFilter.java   (with props)
    activemq/trunk/activemq-fileserver/src/main/webapp/
    activemq/trunk/activemq-fileserver/src/main/webapp/WEB-INF/
    activemq/trunk/activemq-fileserver/src/main/webapp/WEB-INF/web.xml   (with props)
    activemq/trunk/activemq-fileserver/src/main/webapp/index.html   (with props)
    activemq/trunk/activemq-fileserver/src/test/
    activemq/trunk/activemq-fileserver/src/test/java/
    activemq/trunk/activemq-fileserver/src/test/java/org/
    activemq/trunk/activemq-fileserver/src/test/java/org/apache/
    activemq/trunk/activemq-fileserver/src/test/java/org/apache/activemq/
    activemq/trunk/activemq-fileserver/src/test/java/org/apache/activemq/util/
    activemq/trunk/activemq-fileserver/src/test/java/org/apache/activemq/util/RestFilterTest.java   (with props)
Modified:
    activemq/trunk/pom.xml

Added: activemq/trunk/activemq-fileserver/pom.xml
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-fileserver/pom.xml?view=auto&rev=527701
==============================================================================
--- activemq/trunk/activemq-fileserver/pom.xml (added)
+++ activemq/trunk/activemq-fileserver/pom.xml Wed Apr 11 15:05:37 2007
@@ -0,0 +1,122 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+  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.
+-->
+
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0">
+
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>org.apache.activemq</groupId>
+    <artifactId>activemq-parent</artifactId>
+    <version>4.2-SNAPSHOT</version>
+  </parent>
+
+  <artifactId>activemq-fileserver</artifactId>
+  <packaging>war</packaging>
+  <name>ActiveMQ :: File Server</name>
+  <description>Web File Server for out of band large message exchange</description>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.mortbay.jetty</groupId>
+        <artifactId>maven-jetty-plugin</artifactId>
+        <version>${jetty-version}</version>
+        <configuration>
+          <connectors>
+            <connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">
+              <port>${jetty.port}</port>
+              <maxIdleTime>60000</maxIdleTime>
+            </connector>
+          </connectors>
+          <scanIntervalSeconds>10</scanIntervalSeconds>
+        </configuration>
+      </plugin>
+
+    <plugin>
+        <artifactId>maven-surefire-plugin</artifactId>
+        <configuration>
+          <excludes>
+            <exclude>**/RestFilterTest.*</exclude>
+          </excludes>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
+
+  <dependencies>
+
+    <!-- j2ee jars -->
+    <dependency>
+      <groupId>org.apache.geronimo.specs</groupId>
+      <artifactId>geronimo-jms_1.1_spec</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.geronimo.specs</groupId>
+      <artifactId>geronimo-jta_1.0.1B_spec</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.geronimo.specs</groupId>
+      <artifactId>geronimo-j2ee-management_1.0_spec</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.geronimo.specs</groupId>
+      <artifactId>geronimo-j2ee-jacc_1.0_spec</artifactId>
+    </dependency>
+
+    <!-- TODO this should not be needed, but transitive dependencies are not working -->
+    <dependency>
+      <groupId>${pom.groupId}</groupId>
+      <artifactId>activemq-core</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>${pom.groupId}</groupId>
+      <artifactId>activeio-core</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.activemq</groupId>
+      <artifactId>activemq-jaas</artifactId>
+      <optional>true</optional>
+    </dependency>
+
+    <!-- web container -->
+    <dependency>
+      <groupId>org.mortbay.jetty</groupId>
+      <artifactId>jetty</artifactId>
+    </dependency>
+
+    <!-- For Spring servlet -->
+    <dependency>
+      <groupId>org.springframework</groupId>
+      <artifactId>spring</artifactId>
+    </dependency>
+
+    <!-- used for testing -->
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <scope>test</scope>
+    </dependency>
+  </dependencies>
+
+  <properties>
+    <jetty.port>8080</jetty.port>
+  </properties>
+</project>

Propchange: activemq/trunk/activemq-fileserver/pom.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: activemq/trunk/activemq-fileserver/pom.xml
------------------------------------------------------------------------------
    svn:executable = *

Added: activemq/trunk/activemq-fileserver/src/main/java/org/apache/activemq/util/FilenameGuardFilter.java
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-fileserver/src/main/java/org/apache/activemq/util/FilenameGuardFilter.java?view=auto&rev=527701
==============================================================================
--- activemq/trunk/activemq-fileserver/src/main/java/org/apache/activemq/util/FilenameGuardFilter.java (added)
+++ activemq/trunk/activemq-fileserver/src/main/java/org/apache/activemq/util/FilenameGuardFilter.java Wed Apr 11 15:05:37 2007
@@ -0,0 +1,75 @@
+package org.apache.activemq.util;
+
+import java.io.IOException;
+
+import javax.servlet.Filter;
+import javax.servlet.FilterChain;
+import javax.servlet.FilterConfig;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletRequestWrapper;
+
+import org.mortbay.log.Log;
+
+public class FilenameGuardFilter implements Filter {
+
+	public void destroy() {
+		// nothing to destroy		
+	}
+
+	public void init(FilterConfig config) throws ServletException {
+		// nothing to init		
+	}
+
+	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
+		if (request instanceof HttpServletRequest) {
+			HttpServletRequest httpRequest = (HttpServletRequest)request;
+			GuardedHttpServletRequest guardedRequest = new GuardedHttpServletRequest(httpRequest);
+			chain.doFilter(guardedRequest, response);
+		} else {
+			chain.doFilter(request, response);
+		}		
+	}
+	
+	private static class GuardedHttpServletRequest extends HttpServletRequestWrapper {
+		
+		public GuardedHttpServletRequest(HttpServletRequest httpRequest) {
+			super(httpRequest);
+		}
+
+		private String guard(String filename) {
+			String guarded = filename.replace(":", "_");
+			if (Log.isDebugEnabled()) 
+			{
+				Log.debug("guarded " + filename + " to "+ guarded);
+			}
+			return guarded;
+		}
+		
+		@Override
+		public String getParameter(String name) {
+			if (name.equals("Destination")) {
+				return guard(super.getParameter(name));
+			} else {
+				return super.getParameter(name);
+			}
+		}
+		
+		@Override
+		public String getPathInfo() {
+			return guard(super.getPathInfo());
+		}
+		
+		@Override
+		public String getPathTranslated() {
+			return guard(super.getPathTranslated());
+		}
+		
+		@Override
+		public String getRequestURI() {
+			return guard(super.getRequestURI());
+		}
+	}
+}

Propchange: activemq/trunk/activemq-fileserver/src/main/java/org/apache/activemq/util/FilenameGuardFilter.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: activemq/trunk/activemq-fileserver/src/main/java/org/apache/activemq/util/RestFilter.java
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-fileserver/src/main/java/org/apache/activemq/util/RestFilter.java?view=auto&rev=527701
==============================================================================
--- activemq/trunk/activemq-fileserver/src/main/java/org/apache/activemq/util/RestFilter.java (added)
+++ activemq/trunk/activemq-fileserver/src/main/java/org/apache/activemq/util/RestFilter.java Wed Apr 11 15:05:37 2007
@@ -0,0 +1,241 @@
+//========================================================================
+//Copyright 2007 CSC - Scientific Computing Ltd.
+//------------------------------------------------------------------------
+//Licensed 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.activemq.util;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.net.URL;
+
+import javax.servlet.Filter;
+import javax.servlet.FilterChain;
+import javax.servlet.FilterConfig;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.UnavailableException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.mortbay.log.Log;
+import org.mortbay.util.IO;
+import org.mortbay.util.URIUtil;
+
+import sun.net.www.protocol.http.HttpURLConnection;
+
+/**
+* <p>Adds support for HTTP PUT, MOVE and 
+* DELETE methods. If init parameters read-permission-role and write-permission-role
+* are defined then all requests are authorized using the defined roles. Also GET methods are
+* authorized. </p>
+*   
+* @author Aleksi Kallio
+*
+*/
+public class RestFilter implements Filter {
+
+	private static final String HTTP_HEADER_DESTINATION = "Destination";
+	private static final String HTTP_METHOD_MOVE = "MOVE";
+	private static final String HTTP_METHOD_PUT = "PUT";
+	private static final String HTTP_METHOD_GET = "GET";
+	private static final String HTTP_METHOD_DELETE = "DELETE";
+	
+	private String readPermissionRole = null;
+	private String writePermissionRole = null;
+	private FilterConfig filterConfig;
+
+	public void init(FilterConfig filterConfig) throws UnavailableException 
+	{
+		this.filterConfig = filterConfig;
+		readPermissionRole = filterConfig.getInitParameter("read-permission-role");
+		writePermissionRole = filterConfig.getInitParameter("write-permission-role");		
+	}
+	
+	private File locateFile(HttpServletRequest request) 
+	{		
+		return new File(filterConfig.getServletContext().getRealPath(URIUtil.addPaths(request.getServletPath(),request.getPathInfo())));		
+	}
+
+	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException
+	{
+		if (!(request instanceof HttpServletRequest && response instanceof HttpServletResponse)) 
+		{
+			if (Log.isDebugEnabled()) 
+			{
+				Log.debug("request not HTTP, can not understand: " + request.toString());
+			}
+			chain.doFilter(request, response);
+			return;
+		}
+		
+		HttpServletRequest httpRequest = (HttpServletRequest)request;
+		HttpServletResponse httpResponse = (HttpServletResponse)response;
+		
+		if (httpRequest.getMethod().equals(HTTP_METHOD_MOVE)) 
+		{
+			doMove(httpRequest, httpResponse);
+		}
+		else if (httpRequest.getMethod().equals(HTTP_METHOD_PUT))
+		{
+			doPut(httpRequest, httpResponse);			
+		}
+		else if (httpRequest.getMethod().equals(HTTP_METHOD_GET))
+		{
+			if (checkGet(httpRequest, httpResponse)) { 
+				chain.doFilter(httpRequest, httpResponse); // actual processing done elsewhere
+			}
+		}
+		else if (httpRequest.getMethod().equals(HTTP_METHOD_DELETE))
+		{
+			doDelete(httpRequest, httpResponse);
+		}
+		else
+		{
+			chain.doFilter(httpRequest, httpResponse);
+		}
+	}
+	
+	protected void doMove(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
+	{
+		if (Log.isDebugEnabled()) 
+		{
+			Log.debug("RESTful file access: MOVE request for " + request.getRequestURI());
+		}
+
+		if (writePermissionRole != null && !request.isUserInRole(writePermissionRole)) 
+		{			
+	    	response.sendError(HttpURLConnection.HTTP_FORBIDDEN);
+	    	return;
+		}
+
+		File file = locateFile(request);		
+		String destination = request.getHeader(HTTP_HEADER_DESTINATION);
+		
+    	if (destination == null) 
+    	{
+    		response.sendError(HttpURLConnection.HTTP_BAD_REQUEST, "Destination header not found"); 
+    		return;
+    	}
+    	
+    	try 
+    	{
+    		URL destinationUrl = new URL(destination);
+    		IO.copyFile(file, new File(destinationUrl.getFile()));
+    		IO.delete(file);
+    	} 
+    	catch (IOException e) 
+    	{
+			response.sendError(HttpURLConnection.HTTP_INTERNAL_ERROR); // file could not be moved   
+			return;
+    	}
+    	
+    	response.setStatus(HttpURLConnection.HTTP_NO_CONTENT); // we return no content
+	}
+
+	protected boolean checkGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
+		if (Log.isDebugEnabled()) 
+		{
+			Log.debug("RESTful file access: GET request for " + request.getRequestURI());
+		}
+
+		if (readPermissionRole != null && !request.isUserInRole(readPermissionRole)) 
+		{			
+			response.sendError(HttpURLConnection.HTTP_FORBIDDEN);
+			return false;
+		} else {
+			return true;
+		}
+	}
+	
+	
+	protected void doPut(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
+	{
+		if (Log.isDebugEnabled()) 
+		{
+			Log.debug("RESTful file access: PUT request for " + request.getRequestURI());
+		}
+		
+		if (writePermissionRole != null && !request.isUserInRole(writePermissionRole)) 
+		{			
+			response.sendError(HttpURLConnection.HTTP_FORBIDDEN);
+			return;
+		}
+		
+		File file = locateFile(request);
+		
+		if (file.exists()) 
+		{
+			boolean success = file.delete(); // replace file if it exists
+			if (!success) 
+			{
+				response.sendError(HttpURLConnection.HTTP_INTERNAL_ERROR); // file existed and could not be deleted
+				return;
+			}
+		}
+		
+		FileOutputStream out = new FileOutputStream(file);
+		try 
+		{
+			IO.copy(request.getInputStream(), out);
+		} 
+		catch (IOException e) 
+		{
+			Log.warn(Log.EXCEPTION, e); // is this obsolete?
+			out.close();
+			throw(e);
+		}
+		
+		response.setStatus(HttpURLConnection.HTTP_NO_CONTENT); // we return no content
+	}
+	
+	protected void doDelete(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
+	{
+		if (Log.isDebugEnabled()) 
+		{
+			Log.debug("RESTful file access: DELETE request for " + request.getRequestURI());
+		}
+		
+		if (writePermissionRole != null && !request.isUserInRole(writePermissionRole)) 
+		{			
+			response.sendError(HttpURLConnection.HTTP_FORBIDDEN);
+			return;
+		}
+		
+		File file = locateFile(request);
+		
+		if (!file.exists()) 
+		{
+			response.sendError(HttpURLConnection.HTTP_NOT_FOUND); // file not found
+			return;
+		} 
+		
+		boolean success = IO.delete(file); // actual delete operation
+		
+		if (success) 
+		{
+			response.setStatus(HttpURLConnection.HTTP_NO_CONTENT); // we return no content
+		} 
+		else 
+		{
+			response.sendError(HttpURLConnection.HTTP_INTERNAL_ERROR); // could not be deleted due to internal error
+		}
+	}
+	
+	public void destroy() 
+	{
+		// nothing to destroy
+	}
+}
+

Propchange: activemq/trunk/activemq-fileserver/src/main/java/org/apache/activemq/util/RestFilter.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: activemq/trunk/activemq-fileserver/src/main/webapp/WEB-INF/web.xml
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-fileserver/src/main/webapp/WEB-INF/web.xml?view=auto&rev=527701
==============================================================================
--- activemq/trunk/activemq-fileserver/src/main/webapp/WEB-INF/web.xml (added)
+++ activemq/trunk/activemq-fileserver/src/main/webapp/WEB-INF/web.xml Wed Apr 11 15:05:37 2007
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<!DOCTYPE web-app 
+    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" 
+    "http://java.sun.com/dtd/web-app_2_3.dtd">
+    
+<web-app>
+
+  <display-name>RESTful file access application</display-name>
+
+  <servlet>
+    <servlet-name>DefaultServlet</servlet-name>
+    <servlet-class>org.mortbay.jetty.servlet.DefaultServlet</servlet-class>
+  </servlet>
+
+  <servlet-mapping>
+   <servlet-name>DefaultServlet</servlet-name>
+   <url-pattern>/*</url-pattern>
+  </servlet-mapping>
+  
+  <filter>
+   <filter-name>RestFilter</filter-name>
+   <filter-class>org.apache.activemq.util.RestFilter</filter-class>
+  </filter>
+
+  <filter>
+   <filter-name>FilenameGuardFilter</filter-name>
+   <filter-class>org.apache.activemq.util.FilenameGuardFilter</filter-class>
+  </filter>
+
+  <filter-mapping>
+   <filter-name>FilenameGuardFilter</filter-name>
+   <url-pattern>/*</url-pattern>
+  </filter-mapping>  
+
+  <filter-mapping>
+   <filter-name>RestFilter</filter-name>
+   <url-pattern>/*</url-pattern>
+  </filter-mapping>  
+   
+</web-app>

Propchange: activemq/trunk/activemq-fileserver/src/main/webapp/WEB-INF/web.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Added: activemq/trunk/activemq-fileserver/src/main/webapp/index.html
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-fileserver/src/main/webapp/index.html?view=auto&rev=527701
==============================================================================
--- activemq/trunk/activemq-fileserver/src/main/webapp/index.html (added)
+++ activemq/trunk/activemq-fileserver/src/main/webapp/index.html Wed Apr 11 15:05:37 2007
@@ -0,0 +1,14 @@
+<html>
+<head>
+<title>ActiveMQ Console</title>
+</head>
+<body>
+
+<h1>RESTful file access</h1>
+
+<p>
+	This webapp provides RESTful file access.
+</p>
+
+</body>
+</html>

Propchange: activemq/trunk/activemq-fileserver/src/main/webapp/index.html
------------------------------------------------------------------------------
    svn:eol-style = native

Added: activemq/trunk/activemq-fileserver/src/test/java/org/apache/activemq/util/RestFilterTest.java
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-fileserver/src/test/java/org/apache/activemq/util/RestFilterTest.java?view=auto&rev=527701
==============================================================================
--- activemq/trunk/activemq-fileserver/src/test/java/org/apache/activemq/util/RestFilterTest.java (added)
+++ activemq/trunk/activemq-fileserver/src/test/java/org/apache/activemq/util/RestFilterTest.java Wed Apr 11 15:05:37 2007
@@ -0,0 +1,56 @@
+package org.apache.activemq.util;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.HttpURLConnection;
+import java.net.URL;
+
+import junit.framework.TestCase;
+
+import org.mortbay.util.IO;
+
+public class RestFilterTest extends TestCase {
+	
+	public RestFilterTest(String s) {
+		super(s);
+	}
+	
+	public void test() throws Exception {
+		byte[] fileContents = new byte[] {'a', 'b', 'c'};	
+		URL url = new URL("http://localhost:8080/fileserver/repository/file.txt");
+
+		// 1. upload
+        HttpURLConnection connection = (HttpURLConnection)url.openConnection();
+        connection.setRequestMethod("PUT");
+        connection.setDoOutput(true);
+        connection.setChunkedStreamingMode(fileContents.length);
+        OutputStream os = connection.getOutputStream();
+        IO.copy(new ByteArrayInputStream(fileContents), os);
+        os.close();        
+        assertTrue(isSuccessfulCode(connection.getResponseCode()));
+        connection.disconnect();
+        
+        // 2. download
+        connection = (HttpURLConnection)url.openConnection();
+        InputStream is = connection.getInputStream();
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        IO.copy(is, baos);
+        is.close();        
+        assertTrue(isSuccessfulCode(connection.getResponseCode()));
+        connection.disconnect();
+        assertEquals(fileContents.length, baos.size());
+        
+        // 3. remove
+        connection = (HttpURLConnection)url.openConnection();
+        connection.setRequestMethod("DELETE");
+        is = connection.getInputStream();
+        is.close();
+        assertTrue(isSuccessfulCode(connection.getResponseCode()));
+	}
+	
+    private boolean isSuccessfulCode(int responseCode) {
+		return responseCode >= 200 && responseCode < 300; // 2xx => successful
+	}
+}

Propchange: activemq/trunk/activemq-fileserver/src/test/java/org/apache/activemq/util/RestFilterTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: activemq/trunk/pom.xml
URL: http://svn.apache.org/viewvc/activemq/trunk/pom.xml?view=diff&rev=527701&r1=527700&r2=527701
==============================================================================
--- activemq/trunk/pom.xml (original)
+++ activemq/trunk/pom.xml Wed Apr 11 15:05:37 2007
@@ -176,6 +176,7 @@
     <module>activemq-book</module>
     <module>activemq-core</module>
     <module>activemq-console</module>
+    <module>activemq-fileserver</module>
     <module>activemq-jaas</module>
     <module>activemq-jpa-store</module>
     <module>activemq-openwire-generator</module>
@@ -248,6 +249,11 @@
       <dependency>
         <groupId>org.apache.activemq</groupId>
         <artifactId>activemq-console</artifactId>
+        <version>${activemq-version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.apache.activemq</groupId>
+        <artifactId>activemq-fileserver</artifactId>
         <version>${activemq-version}</version>
       </dependency>
       <dependency>