You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by og...@apache.org on 2009/01/17 06:58:27 UTC
svn commit: r735233 - in /maven/mercury/trunk: ./ mercury-ant/
mercury-ant/mercury-ant-tasks/ mercury-it/
mercury-transport/mercury-transport-http/
mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/
mercury...
Author: ogusakov
Date: Fri Jan 16 21:58:27 2009
New Revision: 735233
URL: http://svn.apache.org/viewvc?rev=735233&view=rev
Log:
intermediate changes to get rid of jetty server dependency
Added:
maven/mercury/trunk/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/HttpServletResponse.java (with props)
maven/mercury/trunk/mercury-transport/mercury-transport-http/src/test/java/org/apache/maven/mercury/spi/http/server/BatchFilter.java (with props)
maven/mercury/trunk/mercury-transport/mercury-transport-http/src/test/java/org/apache/maven/mercury/spi/http/server/StagingBatchFilter.java (with props)
Removed:
maven/mercury/trunk/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/server/
Modified:
maven/mercury/trunk/mercury-ant/mercury-ant-tasks/pom.xml
maven/mercury/trunk/mercury-ant/pom.xml
maven/mercury/trunk/mercury-it/pom.xml
maven/mercury/trunk/mercury-transport/mercury-transport-http/pom.xml
maven/mercury/trunk/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/HandshakeExchange.java
maven/mercury/trunk/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/deploy/FilePutExchange.java
maven/mercury/trunk/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/retrieve/FileGetExchange.java
maven/mercury/trunk/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/retrieve/RetrievalTarget.java
maven/mercury/trunk/pom.xml
Modified: maven/mercury/trunk/mercury-ant/mercury-ant-tasks/pom.xml
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-ant/mercury-ant-tasks/pom.xml?rev=735233&r1=735232&r2=735233&view=diff
==============================================================================
--- maven/mercury/trunk/mercury-ant/mercury-ant-tasks/pom.xml (original)
+++ maven/mercury/trunk/mercury-ant/mercury-ant-tasks/pom.xml Fri Jan 16 21:58:27 2009
@@ -77,6 +77,11 @@
</dependency>
<!-- Maven dependencies -->
+ <dependency>
+ <groupId>org.mortbay.jetty</groupId>
+ <artifactId>jetty</artifactId>
+ <scope>test</scope>
+ </dependency>
<dependency>
<groupId>org.apache.maven</groupId>
@@ -86,7 +91,7 @@
<dependency>
<groupId>org.apache.maven.mercury</groupId>
<artifactId>mercury-transport-http</artifactId>
- <classifier>tests</classifier>
+ <type>test-jar</type>
<scope>test</scope>
</dependency>
Modified: maven/mercury/trunk/mercury-ant/pom.xml
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-ant/pom.xml?rev=735233&r1=735232&r2=735233&view=diff
==============================================================================
--- maven/mercury/trunk/mercury-ant/pom.xml (original)
+++ maven/mercury/trunk/mercury-ant/pom.xml Fri Jan 16 21:58:27 2009
@@ -112,6 +112,7 @@
<maven.version>3.0-SNAPSHOT</maven.version>
<junit.version>3.8.2</junit.version>
+ <jetty.version>6.1-SNAPSHOT</jetty.version>
<java.version>1.5</java.version>
@@ -200,9 +201,16 @@
</dependency>
<dependency>
+ <groupId>org.mortbay.jetty</groupId>
+ <artifactId>jetty</artifactId>
+ <version>${jetty.version}</version>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
<groupId>org.apache.maven.mercury</groupId>
<artifactId>mercury-transport-http</artifactId>
- <classifier>tests</classifier>
+ <type>test-jar</type>
<version>${mercury.version}</version>
<scope>test</scope>
</dependency>
@@ -230,6 +238,14 @@
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
+
+ <dependency>
+ <groupId>org.mortbay.jetty</groupId>
+ <artifactId>jetty</artifactId>
+ <version>${jetty.version}</version>
+ <scope>test</scope>
+ </dependency>
+
</dependencies>
<build>
Modified: maven/mercury/trunk/mercury-it/pom.xml
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-it/pom.xml?rev=735233&r1=735232&r2=735233&view=diff
==============================================================================
--- maven/mercury/trunk/mercury-it/pom.xml (original)
+++ maven/mercury/trunk/mercury-it/pom.xml Fri Jan 16 21:58:27 2009
@@ -185,6 +185,7 @@
<dependency>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty-client</artifactId>
+ <classifier>assembly</classifier>
</dependency>
<dependency>
Modified: maven/mercury/trunk/mercury-transport/mercury-transport-http/pom.xml
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-transport/mercury-transport-http/pom.xml?rev=735233&r1=735232&r2=735233&view=diff
==============================================================================
--- maven/mercury/trunk/mercury-transport/mercury-transport-http/pom.xml (original)
+++ maven/mercury/trunk/mercury-transport/mercury-transport-http/pom.xml Fri Jan 16 21:58:27 2009
@@ -32,16 +32,44 @@
<description />
<dependencies>
+
<dependency>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty-client</artifactId>
+ <classifier>assembly</classifier>
+ <exclusions>
+ <exclusion>
+ <groupId>org.mortbay.jetty</groupId>
+ <artifactId>jetty</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.mortbay.jetty</groupId>
+ <artifactId>jetty-sslengine</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.mortbay.jetty</groupId>
+ <artifactId>jetty-util</artifactId>
+ </exclusion>
+ </exclusions>
</dependency>
<dependency>
<groupId>org.mortbay.jetty</groupId>
- <artifactId>servlet-api-2.5</artifactId>
+ <artifactId>jetty-util5</artifactId>
+ </dependency>
+
+
+<!--
+ <dependency>
+ <groupId>org.mortbay.jetty</groupId>
+ <artifactId>jetty-client</artifactId>
</dependency>
+ <dependency>
+ <groupId>org.mortbay.jetty</groupId>
+ <artifactId>servlet-api-2.5</artifactId>
+ </dependency>
+-->
<!-- Test Dependencies -->
<dependency>
<groupId>org.mortbay.jetty</groupId>
Modified: maven/mercury/trunk/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/HandshakeExchange.java
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/HandshakeExchange.java?rev=735233&r1=735232&r2=735233&view=diff
==============================================================================
--- maven/mercury/trunk/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/HandshakeExchange.java (original)
+++ maven/mercury/trunk/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/HandshakeExchange.java Fri Jan 16 21:58:27 2009
@@ -21,7 +21,7 @@
import java.util.Map;
-import javax.servlet.http.HttpServletResponse;
+import org.apache.maven.mercury.spi.http.client.HttpServletResponse;
import org.mortbay.io.Buffer;
import org.mortbay.jetty.client.HttpClient;
Added: maven/mercury/trunk/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/HttpServletResponse.java
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/HttpServletResponse.java?rev=735233&view=auto
==============================================================================
--- maven/mercury/trunk/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/HttpServletResponse.java (added)
+++ maven/mercury/trunk/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/HttpServletResponse.java Fri Jan 16 21:58:27 2009
@@ -0,0 +1,344 @@
+/*
+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.maven.mercury.spi.http.client;
+
+/**
+ *
+ *
+ * @author Oleg Gusakov
+ * @version $Id$
+ *
+ */
+public interface HttpServletResponse
+{
+
+ /*
+ * Server status codes; see RFC 2068.
+ */
+
+ /**
+ * Status code (100) indicating the client can continue.
+ */
+
+ public static final int SC_CONTINUE = 100;
+
+
+ /**
+ * Status code (101) indicating the server is switching protocols
+ * according to Upgrade header.
+ */
+
+ public static final int SC_SWITCHING_PROTOCOLS = 101;
+
+ /**
+ * Status code (200) indicating the request succeeded normally.
+ */
+
+ public static final int SC_OK = 200;
+
+ /**
+ * Status code (201) indicating the request succeeded and created
+ * a new resource on the server.
+ */
+
+ public static final int SC_CREATED = 201;
+
+ /**
+ * Status code (202) indicating that a request was accepted for
+ * processing, but was not completed.
+ */
+
+ public static final int SC_ACCEPTED = 202;
+
+ /**
+ * Status code (203) indicating that the meta information presented
+ * by the client did not originate from the server.
+ */
+
+ public static final int SC_NON_AUTHORITATIVE_INFORMATION = 203;
+
+ /**
+ * Status code (204) indicating that the request succeeded but that
+ * there was no new information to return.
+ */
+
+ public static final int SC_NO_CONTENT = 204;
+
+ /**
+ * Status code (205) indicating that the agent <em>SHOULD</em> reset
+ * the document view which caused the request to be sent.
+ */
+
+ public static final int SC_RESET_CONTENT = 205;
+
+ /**
+ * Status code (206) indicating that the server has fulfilled
+ * the partial GET request for the resource.
+ */
+
+ public static final int SC_PARTIAL_CONTENT = 206;
+
+ /**
+ * Status code (300) indicating that the requested resource
+ * corresponds to any one of a set of representations, each with
+ * its own specific location.
+ */
+
+ public static final int SC_MULTIPLE_CHOICES = 300;
+
+ /**
+ * Status code (301) indicating that the resource has permanently
+ * moved to a new location, and that future references should use a
+ * new URI with their requests.
+ */
+
+ public static final int SC_MOVED_PERMANENTLY = 301;
+
+ /**
+ * Status code (302) indicating that the resource has temporarily
+ * moved to another location, but that future references should
+ * still use the original URI to access the resource.
+ *
+ * This definition is being retained for backwards compatibility.
+ * SC_FOUND is now the preferred definition.
+ */
+
+ public static final int SC_MOVED_TEMPORARILY = 302;
+
+ /**
+ * Status code (302) indicating that the resource reside
+ * temporarily under a different URI. Since the redirection might
+ * be altered on occasion, the client should continue to use the
+ * Request-URI for future requests.(HTTP/1.1) To represent the
+ * status code (302), it is recommended to use this variable.
+ */
+
+ public static final int SC_FOUND = 302;
+
+ /**
+ * Status code (303) indicating that the response to the request
+ * can be found under a different URI.
+ */
+
+ public static final int SC_SEE_OTHER = 303;
+
+ /**
+ * Status code (304) indicating that a conditional GET operation
+ * found that the resource was available and not modified.
+ */
+
+ public static final int SC_NOT_MODIFIED = 304;
+
+ /**
+ * Status code (305) indicating that the requested resource
+ * <em>MUST</em> be accessed through the proxy given by the
+ * <code><em>Location</em></code> field.
+ */
+
+ public static final int SC_USE_PROXY = 305;
+
+ /**
+ * Status code (307) indicating that the requested resource
+ * resides temporarily under a different URI. The temporary URI
+ * <em>SHOULD</em> be given by the <code><em>Location</em></code>
+ * field in the response.
+ */
+
+ public static final int SC_TEMPORARY_REDIRECT = 307;
+
+ /**
+ * Status code (400) indicating the request sent by the client was
+ * syntactically incorrect.
+ */
+
+ public static final int SC_BAD_REQUEST = 400;
+
+ /**
+ * Status code (401) indicating that the request requires HTTP
+ * authentication.
+ */
+
+ public static final int SC_UNAUTHORIZED = 401;
+
+ /**
+ * Status code (402) reserved for future use.
+ */
+
+ public static final int SC_PAYMENT_REQUIRED = 402;
+
+ /**
+ * Status code (403) indicating the server understood the request
+ * but refused to fulfill it.
+ */
+
+ public static final int SC_FORBIDDEN = 403;
+
+ /**
+ * Status code (404) indicating that the requested resource is not
+ * available.
+ */
+
+ public static final int SC_NOT_FOUND = 404;
+
+ /**
+ * Status code (405) indicating that the method specified in the
+ * <code><em>Request-Line</em></code> is not allowed for the resource
+ * identified by the <code><em>Request-URI</em></code>.
+ */
+
+ public static final int SC_METHOD_NOT_ALLOWED = 405;
+
+ /**
+ * Status code (406) indicating that the resource identified by the
+ * request is only capable of generating response entities which have
+ * content characteristics not acceptable according to the accept
+ * headers sent in the request.
+ */
+
+ public static final int SC_NOT_ACCEPTABLE = 406;
+
+ /**
+ * Status code (407) indicating that the client <em>MUST</em> first
+ * authenticate itself with the proxy.
+ */
+
+ public static final int SC_PROXY_AUTHENTICATION_REQUIRED = 407;
+
+ /**
+ * Status code (408) indicating that the client did not produce a
+ * request within the time that the server was prepared to wait.
+ */
+
+ public static final int SC_REQUEST_TIMEOUT = 408;
+
+ /**
+ * Status code (409) indicating that the request could not be
+ * completed due to a conflict with the current state of the
+ * resource.
+ */
+
+ public static final int SC_CONFLICT = 409;
+
+ /**
+ * Status code (410) indicating that the resource is no longer
+ * available at the server and no forwarding address is known.
+ * This condition <em>SHOULD</em> be considered permanent.
+ */
+
+ public static final int SC_GONE = 410;
+
+ /**
+ * Status code (411) indicating that the request cannot be handled
+ * without a defined <code><em>Content-Length</em></code>.
+ */
+
+ public static final int SC_LENGTH_REQUIRED = 411;
+
+ /**
+ * Status code (412) indicating that the precondition given in one
+ * or more of the request-header fields evaluated to false when it
+ * was tested on the server.
+ */
+
+ public static final int SC_PRECONDITION_FAILED = 412;
+
+ /**
+ * Status code (413) indicating that the server is refusing to process
+ * the request because the request entity is larger than the server is
+ * willing or able to process.
+ */
+
+ public static final int SC_REQUEST_ENTITY_TOO_LARGE = 413;
+
+ /**
+ * Status code (414) indicating that the server is refusing to service
+ * the request because the <code><em>Request-URI</em></code> is longer
+ * than the server is willing to interpret.
+ */
+
+ public static final int SC_REQUEST_URI_TOO_LONG = 414;
+
+ /**
+ * Status code (415) indicating that the server is refusing to service
+ * the request because the entity of the request is in a format not
+ * supported by the requested resource for the requested method.
+ */
+
+ public static final int SC_UNSUPPORTED_MEDIA_TYPE = 415;
+
+ /**
+ * Status code (416) indicating that the server cannot serve the
+ * requested byte range.
+ */
+
+ public static final int SC_REQUESTED_RANGE_NOT_SATISFIABLE = 416;
+
+ /**
+ * Status code (417) indicating that the server could not meet the
+ * expectation given in the Expect request header.
+ */
+
+ public static final int SC_EXPECTATION_FAILED = 417;
+
+ /**
+ * Status code (500) indicating an error inside the HTTP server
+ * which prevented it from fulfilling the request.
+ */
+
+ public static final int SC_INTERNAL_SERVER_ERROR = 500;
+
+ /**
+ * Status code (501) indicating the HTTP server does not support
+ * the functionality needed to fulfill the request.
+ */
+
+ public static final int SC_NOT_IMPLEMENTED = 501;
+
+ /**
+ * Status code (502) indicating that the HTTP server received an
+ * invalid response from a server it consulted when acting as a
+ * proxy or gateway.
+ */
+
+ public static final int SC_BAD_GATEWAY = 502;
+
+ /**
+ * Status code (503) indicating that the HTTP server is
+ * temporarily overloaded, and unable to handle the request.
+ */
+
+ public static final int SC_SERVICE_UNAVAILABLE = 503;
+
+ /**
+ * Status code (504) indicating that the server did not receive
+ * a timely response from the upstream server while acting as
+ * a gateway or proxy.
+ */
+
+ public static final int SC_GATEWAY_TIMEOUT = 504;
+
+ /**
+ * Status code (505) indicating that the server does not support
+ * or refuses to support the HTTP protocol version that was used
+ * in the request message.
+ */
+
+ public static final int SC_HTTP_VERSION_NOT_SUPPORTED = 505;
+}
Propchange: maven/mercury/trunk/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/HttpServletResponse.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/mercury/trunk/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/HttpServletResponse.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Modified: maven/mercury/trunk/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/deploy/FilePutExchange.java
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/deploy/FilePutExchange.java?rev=735233&r1=735232&r2=735233&view=diff
==============================================================================
--- maven/mercury/trunk/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/deploy/FilePutExchange.java (original)
+++ maven/mercury/trunk/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/deploy/FilePutExchange.java Fri Jan 16 21:58:27 2009
@@ -27,7 +27,7 @@
import java.util.HashSet;
import java.util.Set;
-import javax.servlet.http.HttpServletResponse;
+import org.apache.maven.mercury.spi.http.client.HttpServletResponse;
import org.apache.maven.mercury.crypto.api.StreamObserver;
import org.apache.maven.mercury.logging.IMercuryLogger;
Modified: maven/mercury/trunk/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/retrieve/FileGetExchange.java
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/retrieve/FileGetExchange.java?rev=735233&r1=735232&r2=735233&view=diff
==============================================================================
--- maven/mercury/trunk/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/retrieve/FileGetExchange.java (original)
+++ maven/mercury/trunk/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/retrieve/FileGetExchange.java Fri Jan 16 21:58:27 2009
@@ -28,7 +28,7 @@
import java.util.HashSet;
import java.util.Set;
-import javax.servlet.http.HttpServletResponse;
+import org.apache.maven.mercury.spi.http.client.HttpServletResponse;
import org.apache.maven.mercury.crypto.api.StreamObserver;
import org.apache.maven.mercury.logging.IMercuryLogger;
Modified: maven/mercury/trunk/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/retrieve/RetrievalTarget.java
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/retrieve/RetrievalTarget.java?rev=735233&r1=735232&r2=735233&view=diff
==============================================================================
--- maven/mercury/trunk/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/retrieve/RetrievalTarget.java (original)
+++ maven/mercury/trunk/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/retrieve/RetrievalTarget.java Fri Jan 16 21:58:27 2009
@@ -30,7 +30,7 @@
import java.util.Map;
import java.util.Set;
-import javax.servlet.http.HttpServletResponse;
+import org.apache.maven.mercury.spi.http.client.HttpServletResponse;
import org.apache.maven.mercury.crypto.api.StreamObserver;
import org.apache.maven.mercury.crypto.api.StreamVerifier;
Added: maven/mercury/trunk/mercury-transport/mercury-transport-http/src/test/java/org/apache/maven/mercury/spi/http/server/BatchFilter.java
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-transport/mercury-transport-http/src/test/java/org/apache/maven/mercury/spi/http/server/BatchFilter.java?rev=735233&view=auto
==============================================================================
--- maven/mercury/trunk/mercury-transport/mercury-transport-http/src/test/java/org/apache/maven/mercury/spi/http/server/BatchFilter.java (added)
+++ maven/mercury/trunk/mercury-transport/mercury-transport-http/src/test/java/org/apache/maven/mercury/spi/http/server/BatchFilter.java Fri Jan 16 21:58:27 2009
@@ -0,0 +1,453 @@
+/**
+ * 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.maven.mercury.spi.http.server;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.URI;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+
+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.HttpServletResponse;
+
+import org.mortbay.jetty.HttpMethods;
+import org.mortbay.servlet.PutFilter;
+import org.mortbay.util.IO;
+import org.mortbay.util.URIUtil;
+
+/**
+ * BatchFilter
+ * <p/>
+ * Base class for handling atomic uploads of batches of files.
+ * Subclasses should implement their own means of making the
+ * uploads atomic. The methods putFile, commitFiles, discardFiles
+ * can be overridden/implemented in order to facilitate this.
+ * For example, the DefaultBatchFilter subclass copies all files
+ * to a staging area before moving them to their final locations
+ * upon receipt of a Jetty-Batch-Commit message.
+ * <p/>
+ * TODO consider having a scavenger thread to remove failed or incomplete uploads?
+ *
+ * @see org.sonatype.mercury.server.jetty.DefaultBatchFilter
+ */
+public abstract class BatchFilter extends PutFilter
+{
+ protected ConcurrentMap<String, Batch> _batches = new ConcurrentHashMap<String, Batch>();
+ protected String _batchIdHeader = "Jetty-Batch-Id";
+ protected String _batchSupportedHeader = "Jetty-Batch-Supported";
+ protected String _batchCommitHeader = "Jetty-Batch-Commit";
+ protected String _batchDiscardHeader = "Jetty-Batch-Discard";
+
+ /**
+ * Batch
+ * <p/>
+ * Retains the status of a mercury. If a mercury succeeds it is removed
+ * from the list. If it fails, then it is retained in the list
+ * but marked as failed. If a mercury is not completed, then the
+ * timestamp can be used by a timer thread to clean up.
+ */
+ protected class Batch
+ {
+ protected String _batchId;
+ protected long _timestamp;
+ protected boolean _ok;
+ protected List<String> _files;
+
+
+ public Batch( String batchId, long timestamp )
+ {
+ _batchId = batchId;
+ _timestamp = timestamp;
+ _files = new ArrayList<String>();
+ }
+
+ public String getBatchId()
+ {
+ return _batchId;
+ }
+
+ public void addFile( String file )
+ {
+ _files.add( file );
+ }
+
+ public List getFiles()
+ {
+ return _files;
+ }
+
+ public void failed()
+ {
+ _ok = false;
+ }
+
+ public boolean isOK()
+ {
+ return _ok;
+ }
+
+ public long getTimestamp()
+ {
+ return _timestamp;
+ }
+
+ public String toString()
+ {
+ return "BatchStatus: id=" + _batchId + " ts=" + _timestamp + " count=" + _files.size() + ", " + _ok;
+ }
+ }
+
+ /**
+ * Implement this method to finish the upload of the files by making them
+ * available for download. When this method returns, all files forming part of
+ * the mercury should be available.
+ *
+ * @param request
+ * @param response
+ * @param batchId
+ * @return
+ * @throws Exception
+ */
+ public abstract boolean commitFiles( HttpServletRequest request, HttpServletResponse response, Batch batch )
+ throws Exception;
+
+ /**
+ * Implement this method to abort the upload of a mercury of files. When this method returns,
+ * none of the files forming part of the upload should be available for download.
+ *
+ * @param request
+ * @param response
+ * @param batchId
+ * @return
+ * @throws Exception
+ */
+ public abstract boolean discardFiles( HttpServletRequest request, HttpServletResponse response, Batch batch )
+ throws Exception;
+
+
+ /**
+ * Initialize the filter. Read all configurable parameters.
+ *
+ * @see org.sonatype.servlet.PutFilter#init(javax.servlet.FilterConfig)
+ */
+ public void init( FilterConfig config )
+ throws ServletException
+ {
+ super.init( config );
+
+ //allow name of headers to be exchanged to be configured
+ String s = config.getInitParameter( "batchIdHeader" );
+ if ( s != null )
+ {
+ _batchIdHeader = s;
+ }
+ s = config.getInitParameter( "batchSupportedHeader" );
+ if ( s != null )
+ {
+ _batchSupportedHeader = s;
+ }
+ s = config.getInitParameter( "batchCommitHeader" );
+ if ( s != null )
+ {
+ _batchCommitHeader = s;
+ }
+ s = config.getInitParameter( "batchDiscardHeader" );
+ if ( s != null )
+ {
+ _batchDiscardHeader = s;
+ }
+ }
+
+
+ /**
+ * Run the filter.
+ *
+ * @see org.sonatype.servlet.PutFilter#doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse, javax.servlet.FilterChain)
+ */
+ public void doFilter( ServletRequest req, ServletResponse res, FilterChain chain )
+ throws IOException, ServletException
+ {
+ HttpServletRequest request = (HttpServletRequest) req;
+ HttpServletResponse response = (HttpServletResponse) res;
+
+ //if GET fall through to filter chain
+ if ( request.getMethod().equals( HttpMethods.GET ) )
+ {
+ chain.doFilter( req, res );
+ return;
+ }
+
+
+ String batchId = request.getHeader( _batchIdHeader );
+ String commitId = request.getHeader( _batchCommitHeader );
+ String discardId = request.getHeader( _batchDiscardHeader );
+
+ //System.err.println("method="+request.getMethod()+" batchid="+batchId+" commitId="+commitId+" discardId="+discardId);
+
+ //we can't do atomic batches, handle as a normal PUT
+ if ( batchId == null && commitId == null && discardId == null )
+ {
+ super.doFilter( req, res, chain );
+ return;
+ }
+
+ /* TODO Is it worth handling this situation? This would mean that a directory was sent as the url
+ * along with a batchId. The cost is that the pathContext would be calculated twice in this case.
+
+ if (pathInContext.endsWith("/"))
+ {
+ super.doFilter(req,res,chain);
+ return;
+ }
+ */
+
+ if ( batchId != null )
+ {
+ handlePut( request, response, batchId );
+ return;
+ }
+
+ if ( discardId != null )
+ {
+ handleDiscard( request, response, discardId );
+ return;
+ }
+
+ if ( commitId != null )
+ {
+ handleCommit( request, response, commitId );
+ return;
+ }
+
+ //otherwise - shouldn't get here
+ chain.doFilter( req, res );
+ }
+
+ /**
+ * Handle a PUT request.
+ * <p/>
+ * The batchId is saved to a list of currently active batchIds so that
+ * all files forming part of the mercury can be committed or discarded as a
+ * whole later on.
+ * <p/>
+ * If a file already exists, then status 200 is returned; if the file
+ * did not previously exist, then status 201 is returned, otherwise
+ * a 403 is returned.
+ *
+ * @param request
+ * @param response
+ * @param batchId
+ * @throws ServletException
+ * @throws IOException
+ */
+ public void handlePut( HttpServletRequest request, HttpServletResponse response, String batchId )
+ throws ServletException, IOException
+ {
+ String servletPath = request.getServletPath();
+ String pathInfo = request.getPathInfo();
+ String pathInContext = URIUtil.addPaths( servletPath, pathInfo );
+ String finalResource = URIUtil.addPaths( _baseURI, pathInContext );
+ File finalFile = null;
+ try
+ {
+ finalFile = new File( new URI( finalResource ) );
+ boolean exists = finalFile.exists();
+
+ putFile( request, response, pathInContext, batchId );
+
+ Batch batch = addBatch( batchId, finalResource );
+
+ String contextPath = _context.getContextPath();
+ if ( contextPath.equals( "" ) )
+ {
+ contextPath = "/";
+ }
+ if ( !contextPath.endsWith( "/" ) )
+ {
+ contextPath += "/";
+ }
+ String commitBatchUrl = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + contextPath;
+ response.setHeader( _batchSupportedHeader, commitBatchUrl );
+ response.setStatus( exists ? HttpServletResponse.SC_OK : HttpServletResponse.SC_CREATED );
+ response.flushBuffer();
+ }
+ catch ( Exception ex )
+ {
+ _context.log( ex.toString(), ex );
+ response.sendError( HttpServletResponse.SC_FORBIDDEN );
+ }
+ }
+
+ /**
+ * Client side wants us to discard all files in mercury.
+ *
+ * @param request
+ * @param response
+ * @param batchId
+ * @throws ServletException
+ * @throws IOException
+ */
+ public void handleDiscard( HttpServletRequest request, HttpServletResponse response, String batchId )
+ throws ServletException, IOException
+ {
+ boolean ok = true;
+ try
+ {
+ ok = discardFiles( request, response, _batches.get( batchId ) );
+ response.setStatus( ( ok ? HttpServletResponse.SC_OK : HttpServletResponse.SC_INTERNAL_SERVER_ERROR ) );
+ response.flushBuffer();
+ }
+ catch ( Exception ex )
+ {
+ _context.log( ex.toString(), ex );
+ response.sendError( HttpServletResponse.SC_INTERNAL_SERVER_ERROR );
+ }
+ finally
+ {
+ updateBatch( batchId, ok );
+ }
+ }
+
+
+ /**
+ * Client side wants us to move files into final position.
+ *
+ * @param request
+ * @param response
+ * @param batchId
+ * @throws ServletException
+ * @throws IOException
+ */
+ public void handleCommit( HttpServletRequest request, HttpServletResponse response, String batchId )
+ throws ServletException, IOException
+ {
+ boolean ok = true;
+ try
+ {
+ ok = commitFiles( request, response, _batches.get( batchId ) );
+ response.setStatus( ( ok ? HttpServletResponse.SC_OK : HttpServletResponse.SC_INTERNAL_SERVER_ERROR ) );
+ response.flushBuffer();
+ }
+ catch ( Exception ex )
+ {
+ ex.printStackTrace();
+ _context.log( ex.toString(), ex );
+ response.sendError( HttpServletResponse.SC_INTERNAL_SERVER_ERROR );
+ }
+ finally
+ {
+ updateBatch( batchId, ok );
+ }
+ }
+
+ /**
+ * Default behaviour is to put the file directly to it's final location.
+ * <p/>
+ * Subclasses can choose to override this method and put the file
+ * into a staging area first.
+ *
+ * @param request
+ * @param response
+ * @param pathInContext
+ * @param batchId
+ * @throws Exception
+ * @see org.sonatype.mercury.server.jetty.DefaultBatchFilter
+ */
+ public void putFile( HttpServletRequest request,
+ HttpServletResponse response,
+ String pathInContext,
+ String batchId )
+ throws Exception
+ {
+ String finalResource = URIUtil.addPaths( _baseURI, pathInContext );
+ File finalFile = null;
+ finalFile = new File( new URI( finalResource ) );
+ File parent = finalFile.getParentFile();
+ parent.mkdirs();
+ int toRead = request.getContentLength();
+ InputStream in = request.getInputStream();
+ OutputStream out = new FileOutputStream( finalFile, false );
+ if ( toRead >= 0 )
+ {
+ IO.copy( in, out, toRead );
+ }
+ else
+ {
+ IO.copy( in, out );
+ }
+
+ }
+
+ /**
+ * Remember a mercury, or update the count of files in the mercury.
+ *
+ * @param batchId
+ */
+ protected Batch addBatch( String batchId, String file )
+ {
+ Batch status = (Batch) _batches.get( batchId );
+ long timestamp = System.currentTimeMillis();
+ if ( status == null )
+ {
+ status = new Batch( batchId, timestamp );
+ _batches.put( batchId, status );
+ }
+ status.addFile( file );
+ return status;
+ }
+
+
+ /**
+ * Update the status of the mercury.
+ *
+ * @param batchId
+ * @param ok if true, the mercury job is removed from the list; otherwise it is marked as failed
+ */
+ protected void updateBatch( String batchId, boolean ok )
+ {
+ Batch status = (Batch) _batches.get( batchId );
+ if ( status == null )
+ {
+ _context.log( "Unknown mercury id to update: " + batchId );
+ }
+ else
+ {
+ if ( ok )
+ {
+ _batches.remove( batchId );
+ }
+ else
+ {
+ status.failed(); //mark as failed
+ }
+ }
+ }
+}
Propchange: maven/mercury/trunk/mercury-transport/mercury-transport-http/src/test/java/org/apache/maven/mercury/spi/http/server/BatchFilter.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/mercury/trunk/mercury-transport/mercury-transport-http/src/test/java/org/apache/maven/mercury/spi/http/server/BatchFilter.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Added: maven/mercury/trunk/mercury-transport/mercury-transport-http/src/test/java/org/apache/maven/mercury/spi/http/server/StagingBatchFilter.java
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-transport/mercury-transport-http/src/test/java/org/apache/maven/mercury/spi/http/server/StagingBatchFilter.java?rev=735233&view=auto
==============================================================================
--- maven/mercury/trunk/mercury-transport/mercury-transport-http/src/test/java/org/apache/maven/mercury/spi/http/server/StagingBatchFilter.java (added)
+++ maven/mercury/trunk/mercury-transport/mercury-transport-http/src/test/java/org/apache/maven/mercury/spi/http/server/StagingBatchFilter.java Fri Jan 16 21:58:27 2009
@@ -0,0 +1,236 @@
+/**
+ * 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.maven.mercury.spi.http.server;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.URI;
+
+import javax.servlet.FilterConfig;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.mortbay.util.IO;
+import org.mortbay.util.URIUtil;
+
+
+/**
+ * DefaultBatchFilter
+ * <p/>
+ * Handles the atomic upload (using PUT messages) of a batch of files. "Atomic" means
+ * that either all file uploads succeed or none do. This transactionality can only be
+ * guaranteed when using the mercury client, as a "commit/discard" message
+ * is sent from the client side to indicate how to terminate the mercury operation. If
+ * a commit is received, then all files that form part of the batch - indicated by a
+ * batch id in the PUT headers - are moved from a staging location to the final
+ * location. If a discard is received, then all files forming part of the mercury will
+ * be deleted. If the client side is not the jetty batcher, then the server side
+ * cannot know when the batch has ended, and therefore will immediately copy files
+ * to their final locations during the PUT.
+ */
+public class StagingBatchFilter extends BatchFilter
+{
+ private String _stagingDirURI;
+
+ public void init( FilterConfig config )
+ throws ServletException
+ {
+ super.init( config );
+
+ //allow tmp dir location to be configured
+ String t = config.getInitParameter( "stagingDirURI" );
+ if ( t != null )
+ {
+ _stagingDirURI = t;
+ }
+ else
+ {
+ //fall back to WEB-INF/lib
+ File f = new File( _context.getRealPath( "/" ) );
+ File w = new File( f, "WEB-INF" );
+ File l = new File( w, "lib" );
+ _stagingDirURI = l.toURI().toString();
+ }
+ }
+
+
+ /**
+ * Put the file to a staging area before doing move to final location
+ * on a commit.
+ *
+ * @see BatchFilter#putFile(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse, java.lang.String, java.lang.String)
+ */
+ public void putFile( HttpServletRequest request,
+ HttpServletResponse response,
+ String pathInContext,
+ String batchId )
+ throws Exception
+ {
+ String stagedResource = URIUtil.addPaths( _stagingDirURI,
+ batchId ); //put the file into staging dir under the batchid
+ stagedResource = URIUtil.addPaths( stagedResource, pathInContext );
+ File stagedFile = null;
+
+ try
+ {
+ stagedFile = new File( new URI( stagedResource ) );
+ File parent = stagedFile.getParentFile();
+ parent.mkdirs();
+
+ int toRead = request.getContentLength();
+ InputStream in = request.getInputStream();
+ OutputStream out = new FileOutputStream( stagedFile, false );
+ if ( toRead >= 0 )
+ {
+ IO.copy( in, out, toRead );
+ }
+ else
+ {
+ IO.copy( in, out );
+ }
+ out.close();
+ }
+ catch ( Exception e )
+ {
+ try
+ {
+ if ( stagedFile.exists() )
+ {
+ stagedFile.delete();
+ }
+ throw e;
+ }
+ catch ( Exception ex )
+ {
+ _context.log( ex.toString(), ex );
+ }
+ }
+ }
+
+
+ /**
+ * Do the move of all files in mercury to a final location
+ *
+ * @see BatchFilter#commitFiles(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse, java.lang.String)
+ */
+ public boolean commitFiles( HttpServletRequest request, HttpServletResponse response, Batch batch )
+ throws Exception
+ {
+ if ( batch == null )
+ {
+ return true; //nothing to do
+ }
+
+ boolean ok = true;
+ String stagedResource = URIUtil.addPaths( _stagingDirURI, batch.getBatchId() );
+ File batchDir = new File( new URI( stagedResource ) );
+ File[] files = batchDir.listFiles();
+ for ( int i = 0; files != null && i < files.length; i++ )
+ {
+ String name = files[i].getName();
+ File dest = new File( new URI( URIUtil.addPaths( _baseURI, name ) ) );
+ if ( !files[i].renameTo( dest ) )
+ {
+ ok = false;
+ _context.log("Unable to rename file "+files[i].getAbsolutePath()+" to "+dest.getAbsolutePath());
+ }
+ }
+ if ( ok )
+ {
+ ok = batchDir.delete();
+ if (!ok)
+ _context.log("Unable to delete batch dir "+batchDir.getAbsolutePath());
+ }
+ return ok;
+ }
+
+
+ /**
+ * Delete all files in the mercury from the staging area.
+ *
+ * @see BatchFilter#discardFiles(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse, java.lang.String)
+ */
+ public boolean discardFiles( HttpServletRequest request, HttpServletResponse response, Batch batch )
+ throws Exception
+ {
+ if ( batch == null )
+ {
+ return true; //nothing to do
+ }
+
+ String stagedResource = URIUtil.addPaths( _stagingDirURI, batch.getBatchId() );
+ File batchDir = new File( new URI( stagedResource ) );
+ boolean ok = true;
+ if ( !deleteFile( batchDir ) )
+ {
+ ok = false;
+ }
+ return ok;
+ }
+
+
+ /**
+ * Recursively descend file hierarchy and delete all files.
+ *
+ * @param f
+ * @return
+ */
+ private boolean deleteFile( File f )
+ {
+ if ( f == null )
+ {
+ return true;
+ }
+ if ( f.isFile() )
+ {
+ boolean ok = f.delete();
+ if (!ok)
+ _context.log("Unable to delete file "+f.getAbsolutePath());
+ return ok;
+ }
+ else if ( f.isDirectory() )
+ {
+ File[] files = f.listFiles();
+ boolean ok = true;
+ for ( int i = 0; files != null && i < files.length; i++ )
+ {
+ if ( !deleteFile( files[i] ) )
+ {
+ ok = false;
+ }
+ }
+
+ if ( !f.delete() )
+ {
+ ok = false;
+ _context.log("Unable to delete dir "+f.getAbsolutePath());
+ }
+
+ return ok;
+ }
+ else
+ {
+ return true;
+ }
+ }
+}
Propchange: maven/mercury/trunk/mercury-transport/mercury-transport-http/src/test/java/org/apache/maven/mercury/spi/http/server/StagingBatchFilter.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/mercury/trunk/mercury-transport/mercury-transport-http/src/test/java/org/apache/maven/mercury/spi/http/server/StagingBatchFilter.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Modified: maven/mercury/trunk/pom.xml
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/pom.xml?rev=735233&r1=735232&r2=735233&view=diff
==============================================================================
--- maven/mercury/trunk/pom.xml (original)
+++ maven/mercury/trunk/pom.xml Fri Jan 16 21:58:27 2009
@@ -66,8 +66,38 @@
<module>mercury-plexus</module>
<module>mercury-wagon</module>
</modules>
+
+ <properties>
+ <plexus.appbooter.version>1.4</plexus.appbooter.version>
+ <plexus.container.version>1.0-beta-3.0.1</plexus.container.version>
+ <plexus.component.annotations.version>1.0-beta-3.0.1</plexus.component.annotations.version>
+ <classworlds.version>1.3</classworlds.version>
+ <plexus.utils.version>1.5.5</plexus.utils.version>
+ <plexus.lang.version>1.1</plexus.lang.version>
+ <plexus.component.metadata.version>1.0-beta-3.0.1</plexus.component.metadata.version>
+
+ <commons.digester.version>1.8</commons.digester.version>
+ <commons.cli.version>1.1</commons.cli.version>
+
+ <jetty.version>6.1-SNAPSHOT</jetty.version>
+ <junit.version>3.8.1</junit.version>
+ <bouncy.castle.version>140</bouncy.castle.version>
+ <sat4j.version>2.0.4</sat4j.version>
+
+ <!-- mercury-wagon -->
+ <wagon.provider.api.version>1.0-beta-4</wagon.provider.api.version>
+
+ <distMgmtReleasesId>apache.releases</distMgmtReleasesId>
+ <distMgmtReleasesName>Apache Releases</distMgmtReleasesName>
+ <distMgmtReleasesUrl>scp://people.apache.org/www/people.apache.org/repo/m2-release-repository</distMgmtReleasesUrl>
- <scm>
+ <distMgmtSnapshotsId>apache.snapshots</distMgmtSnapshotsId>
+ <distMgmtSnapshotsName>Apache Snapshots</distMgmtSnapshotsName>
+ <distMgmtSnapshotsUrl>scp://people.apache.org/www/people.apache.org/repo/m2-snapshot-repository</distMgmtSnapshotsUrl>
+ </properties>
+
+
+ <scm>
<connection>scm:svn:http://svn.apache.org/repos/asf/maven/mercury/trunk/</connection>
<developerConnection>scm:svn:https://svn.apache.org/repos/asf/maven/mercury/trunk/</developerConnection>
<url>http://svn.apache.org/viewvc/maven/mercury/trunk/</url>
@@ -138,7 +168,7 @@
<artifactId>plexus-forked-app-booter</artifactId>
<version>${plexus.appbooter.version}</version>
</dependency>
-
+<!--
<dependency>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty-client</artifactId>
@@ -156,6 +186,52 @@
<artifactId>jetty-servlet-tester</artifactId>
<version>${jetty.version}</version>
</dependency>
+-->
+
+ <dependency>
+ <groupId>org.mortbay.jetty</groupId>
+ <artifactId>jetty-client</artifactId>
+ <classifier>assembly</classifier>
+ <version>6.1-SNAPSHOT</version>
+ <exclusions>
+ <exclusion>
+ <groupId>org.mortbay.jetty</groupId>
+ <artifactId>jetty</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.mortbay.jetty</groupId>
+ <artifactId>jetty-sslengine</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.mortbay.jetty</groupId>
+ <artifactId>jetty-util</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+
+ <dependency>
+ <groupId>org.mortbay.jetty</groupId>
+ <artifactId>jetty</artifactId>
+ <version>${jetty.version}</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.mortbay.jetty</groupId>
+ <artifactId>servlet-api-2.5</artifactId>
+ <version>${jetty.version}</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.mortbay.jetty</groupId>
+ <artifactId>jetty-util5</artifactId>
+ <version>${jetty.version}</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.mortbay.jetty</groupId>
+ <artifactId>jetty-servlet-tester</artifactId>
+ <version>${jetty.version}</version>
+ </dependency>
<dependency>
<groupId>org.codehaus.plexus</groupId>
@@ -332,8 +408,18 @@
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
+
+ <dependency>
+ <groupId>org.apache.maven.mercury</groupId>
+ <artifactId>mercury-transport-http</artifactId>
+ <version>${project.version}</version>
+ <type>test-jar</type>
+ <scope>test</scope>
+ </dependency>
+
</dependencies>
</dependencyManagement>
+
<dependencies>
<dependency>
<groupId>org.codehaus.plexus</groupId>
@@ -353,35 +439,6 @@
</dependency>
</dependencies>
- <properties>
- <plexus.appbooter.version>1.4</plexus.appbooter.version>
- <plexus.container.version>1.0-beta-3.0.1</plexus.container.version>
- <plexus.component.annotations.version>1.0-beta-3.0.1</plexus.component.annotations.version>
- <classworlds.version>1.3</classworlds.version>
- <plexus.utils.version>1.5.5</plexus.utils.version>
- <plexus.lang.version>1.1</plexus.lang.version>
- <plexus.component.metadata.version>1.0-beta-3.0.1</plexus.component.metadata.version>
-
- <commons.digester.version>1.8</commons.digester.version>
- <commons.cli.version>1.1</commons.cli.version>
-
- <jetty.version>6.1.12</jetty.version>
- <junit.version>3.8.1</junit.version>
- <bouncy.castle.version>140</bouncy.castle.version>
- <sat4j.version>2.0.4</sat4j.version>
-
- <!-- mercury-wagon -->
- <wagon.provider.api.version>1.0-beta-4</wagon.provider.api.version>
-
- <distMgmtReleasesId>apache.releases</distMgmtReleasesId>
- <distMgmtReleasesName>Apache Releases</distMgmtReleasesName>
- <distMgmtReleasesUrl>scp://people.apache.org/www/people.apache.org/repo/m2-release-repository</distMgmtReleasesUrl>
-
- <distMgmtSnapshotsId>apache.snapshots</distMgmtSnapshotsId>
- <distMgmtSnapshotsName>Apache Snapshots</distMgmtSnapshotsName>
- <distMgmtSnapshotsUrl>scp://people.apache.org/www/people.apache.org/repo/m2-snapshot-repository</distMgmtSnapshotsUrl>
- </properties>
-
<build>
<defaultGoal>install</defaultGoal>
<resources>