You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hc.apache.org by ol...@apache.org on 2011/07/21 21:49:07 UTC

svn commit: r1149337 - in /httpcomponents/httpasyncclient/trunk/httpasyncclient/src: examples/org/apache/http/examples/nio/client/ main/java/org/apache/http/impl/nio/client/ main/java/org/apache/http/nio/client/methods/ test/java/org/apache/http/impl/n...

Author: olegk
Date: Thu Jul 21 19:49:03 2011
New Revision: 1149337

URL: http://svn.apache.org/viewvc?rev=1149337&view=rev
Log:
Better API for building common HttpAsyncRequestProducers

Added:
    httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/nio/client/methods/BasicHttpAsyncResponseConsumer.java   (contents, props changed)
      - copied, changed from r1149330, httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/BasicHttpAsyncResponseConsumer.java
    httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/nio/client/methods/HttpAsyncMethods.java   (with props)
    httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/nio/client/methods/HttpAsyncRequestProducerImpl.java   (with props)
    httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/nio/client/methods/NHttpEntityWrapper.java   (contents, props changed)
      - copied, changed from r1149330, httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/NHttpEntityWrapper.java
Removed:
    httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/BasicHttpAsyncRequestProducer.java
    httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/BasicHttpAsyncResponseConsumer.java
    httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/NHttpEntityWrapper.java
Modified:
    httpcomponents/httpasyncclient/trunk/httpasyncclient/src/examples/org/apache/http/examples/nio/client/AsyncClientHttpExchangeStreaming.java
    httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/AbstractHttpAsyncClient.java
    httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/nio/client/methods/BaseHttpAsyncEntityRequestProducer.java
    httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/nio/client/methods/BaseHttpAsyncRequestProducer.java
    httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/nio/client/methods/HttpAsyncDelete.java
    httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/nio/client/methods/HttpAsyncGet.java
    httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/nio/client/methods/HttpAsyncHead.java
    httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/nio/client/methods/HttpAsyncOptions.java
    httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/nio/client/methods/HttpAsyncPost.java
    httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/nio/client/methods/HttpAsyncPut.java
    httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/nio/client/methods/HttpAsyncTrace.java
    httpcomponents/httpasyncclient/trunk/httpasyncclient/src/test/java/org/apache/http/impl/nio/client/TestHttpAsync.java
    httpcomponents/httpasyncclient/trunk/httpasyncclient/src/test/java/org/apache/http/impl/nio/client/TestHttpsAsync.java
    httpcomponents/httpasyncclient/trunk/httpasyncclient/src/test/java/org/apache/http/nio/client/methods/TestAsyncConsumers.java

Modified: httpcomponents/httpasyncclient/trunk/httpasyncclient/src/examples/org/apache/http/examples/nio/client/AsyncClientHttpExchangeStreaming.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpasyncclient/trunk/httpasyncclient/src/examples/org/apache/http/examples/nio/client/AsyncClientHttpExchangeStreaming.java?rev=1149337&r1=1149336&r2=1149337&view=diff
==============================================================================
--- httpcomponents/httpasyncclient/trunk/httpasyncclient/src/examples/org/apache/http/examples/nio/client/AsyncClientHttpExchangeStreaming.java (original)
+++ httpcomponents/httpasyncclient/trunk/httpasyncclient/src/examples/org/apache/http/examples/nio/client/AsyncClientHttpExchangeStreaming.java Thu Jul 21 19:49:03 2011
@@ -35,7 +35,7 @@ import org.apache.http.impl.nio.client.D
 import org.apache.http.nio.IOControl;
 import org.apache.http.nio.client.HttpAsyncClient;
 import org.apache.http.nio.client.methods.AsyncCharConsumer;
-import org.apache.http.nio.client.methods.HttpAsyncGet;
+import org.apache.http.nio.client.methods.HttpAsyncMethods;
 
 public class AsyncClientHttpExchangeStreaming {
 
@@ -44,7 +44,7 @@ public class AsyncClientHttpExchangeStre
         httpclient.start();
         try {
             Future<Boolean> future = httpclient.execute(
-                    new HttpAsyncGet("http://localhost:8080/"),
+                    HttpAsyncMethods.createGet("http://localhost:8080/"),
                     new MyResponseConsumer(), null);
             Boolean result = future.get();
             if (result != null && result.booleanValue()) {

Modified: httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/AbstractHttpAsyncClient.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/AbstractHttpAsyncClient.java?rev=1149337&r1=1149336&r2=1149337&view=diff
==============================================================================
--- httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/AbstractHttpAsyncClient.java (original)
+++ httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/AbstractHttpAsyncClient.java Thu Jul 21 19:49:03 2011
@@ -78,6 +78,7 @@ import org.apache.http.nio.client.HttpAs
 import org.apache.http.nio.client.HttpAsyncExchangeHandler;
 import org.apache.http.nio.client.HttpAsyncRequestProducer;
 import org.apache.http.nio.client.HttpAsyncResponseConsumer;
+import org.apache.http.nio.client.methods.HttpAsyncMethods;
 import org.apache.http.nio.concurrent.BasicFuture;
 import org.apache.http.nio.concurrent.FutureCallback;
 import org.apache.http.nio.conn.ClientConnectionManager;
@@ -528,8 +529,8 @@ public abstract class AbstractHttpAsyncC
             final HttpHost target, final HttpRequest request, final HttpContext context,
             final FutureCallback<HttpResponse> callback) {
         return execute(
-                new BasicHttpAsyncRequestProducer(target, request),
-                new BasicHttpAsyncResponseConsumer(),
+                HttpAsyncMethods.create(target, request),
+                HttpAsyncMethods.createConsumer(),
                 context, callback);
     }
 

Modified: httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/nio/client/methods/BaseHttpAsyncEntityRequestProducer.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/nio/client/methods/BaseHttpAsyncEntityRequestProducer.java?rev=1149337&r1=1149336&r2=1149337&view=diff
==============================================================================
--- httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/nio/client/methods/BaseHttpAsyncEntityRequestProducer.java (original)
+++ httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/nio/client/methods/BaseHttpAsyncEntityRequestProducer.java Thu Jul 21 19:49:03 2011
@@ -45,6 +45,7 @@ import org.apache.http.nio.entity.NStrin
 import org.apache.http.nio.entity.ProducingNHttpEntity;
 import org.apache.http.protocol.HTTP;
 
+@Deprecated
 abstract class BaseHttpAsyncEntityRequestProducer implements HttpAsyncRequestProducer, Closeable {
 
     private final URI requestURI;

Modified: httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/nio/client/methods/BaseHttpAsyncRequestProducer.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/nio/client/methods/BaseHttpAsyncRequestProducer.java?rev=1149337&r1=1149336&r2=1149337&view=diff
==============================================================================
--- httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/nio/client/methods/BaseHttpAsyncRequestProducer.java (original)
+++ httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/nio/client/methods/BaseHttpAsyncRequestProducer.java Thu Jul 21 19:49:03 2011
@@ -37,6 +37,7 @@ import org.apache.http.nio.ContentEncode
 import org.apache.http.nio.IOControl;
 import org.apache.http.nio.client.HttpAsyncRequestProducer;
 
+@Deprecated
 abstract class BaseHttpAsyncRequestProducer implements HttpAsyncRequestProducer {
 
     private final URI requestURI;

Copied: httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/nio/client/methods/BasicHttpAsyncResponseConsumer.java (from r1149330, httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/BasicHttpAsyncResponseConsumer.java)
URL: http://svn.apache.org/viewvc/httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/nio/client/methods/BasicHttpAsyncResponseConsumer.java?p2=httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/nio/client/methods/BasicHttpAsyncResponseConsumer.java&p1=httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/BasicHttpAsyncResponseConsumer.java&r1=1149330&r2=1149337&rev=1149337&view=diff
==============================================================================
--- httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/BasicHttpAsyncResponseConsumer.java (original)
+++ httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/nio/client/methods/BasicHttpAsyncResponseConsumer.java Thu Jul 21 19:49:03 2011
@@ -24,19 +24,18 @@
  * <http://www.apache.org/>.
  *
  */
-package org.apache.http.impl.nio.client;
+package org.apache.http.nio.client.methods;
 
 import java.io.IOException;
 
 import org.apache.http.HttpResponse;
 import org.apache.http.nio.ContentDecoder;
 import org.apache.http.nio.IOControl;
-import org.apache.http.nio.client.methods.AbstractHttpAsyncResponseConsumer;
 import org.apache.http.nio.entity.BufferingNHttpEntity;
 import org.apache.http.nio.entity.ConsumingNHttpEntity;
 import org.apache.http.nio.util.HeapByteBufferAllocator;
 
-class BasicHttpAsyncResponseConsumer extends AbstractHttpAsyncResponseConsumer<HttpResponse> {
+public class BasicHttpAsyncResponseConsumer extends AbstractHttpAsyncResponseConsumer<HttpResponse> {
 
     private volatile HttpResponse response;
     private volatile ConsumingNHttpEntity consumer;

Propchange: httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/nio/client/methods/BasicHttpAsyncResponseConsumer.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/nio/client/methods/BasicHttpAsyncResponseConsumer.java
------------------------------------------------------------------------------
    svn:keywords = Date Revision

Propchange: httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/nio/client/methods/BasicHttpAsyncResponseConsumer.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/nio/client/methods/HttpAsyncDelete.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/nio/client/methods/HttpAsyncDelete.java?rev=1149337&r1=1149336&r2=1149337&view=diff
==============================================================================
--- httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/nio/client/methods/HttpAsyncDelete.java (original)
+++ httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/nio/client/methods/HttpAsyncDelete.java Thu Jul 21 19:49:03 2011
@@ -31,6 +31,10 @@ import java.net.URI;
 import org.apache.http.client.methods.HttpDelete;
 import org.apache.http.client.methods.HttpUriRequest;
 
+/**
+ * @deprecated use {@link HttpAsyncMethods#createDelete(URI)}
+ */
+@Deprecated
 public class HttpAsyncDelete extends BaseHttpAsyncRequestProducer {
 
     public HttpAsyncDelete(final URI requestURI) {

Modified: httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/nio/client/methods/HttpAsyncGet.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/nio/client/methods/HttpAsyncGet.java?rev=1149337&r1=1149336&r2=1149337&view=diff
==============================================================================
--- httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/nio/client/methods/HttpAsyncGet.java (original)
+++ httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/nio/client/methods/HttpAsyncGet.java Thu Jul 21 19:49:03 2011
@@ -31,6 +31,10 @@ import java.net.URI;
 import org.apache.http.client.methods.HttpGet;
 import org.apache.http.client.methods.HttpUriRequest;
 
+/**
+ * @deprecated use {@link HttpAsyncMethods#createGet(URI)}
+ */
+@Deprecated
 public class HttpAsyncGet extends BaseHttpAsyncRequestProducer {
 
     public HttpAsyncGet(final URI requestURI) {

Modified: httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/nio/client/methods/HttpAsyncHead.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/nio/client/methods/HttpAsyncHead.java?rev=1149337&r1=1149336&r2=1149337&view=diff
==============================================================================
--- httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/nio/client/methods/HttpAsyncHead.java (original)
+++ httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/nio/client/methods/HttpAsyncHead.java Thu Jul 21 19:49:03 2011
@@ -31,6 +31,10 @@ import java.net.URI;
 import org.apache.http.client.methods.HttpHead;
 import org.apache.http.client.methods.HttpUriRequest;
 
+/**
+ * @deprecated use {@link HttpAsyncMethods#createHead(URI)}
+ */
+@Deprecated
 public class HttpAsyncHead extends BaseHttpAsyncRequestProducer {
 
     public HttpAsyncHead(final URI requestURI) {

Added: httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/nio/client/methods/HttpAsyncMethods.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/nio/client/methods/HttpAsyncMethods.java?rev=1149337&view=auto
==============================================================================
--- httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/nio/client/methods/HttpAsyncMethods.java (added)
+++ httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/nio/client/methods/HttpAsyncMethods.java Thu Jul 21 19:49:03 2011
@@ -0,0 +1,196 @@
+/*
+ * ====================================================================
+ * 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.
+ * ====================================================================
+ *
+ * This software consists of voluntary contributions made by many
+ * individuals on behalf of the Apache Software Foundation.  For more
+ * information on the Apache Software Foundation, please see
+ * <http://www.apache.org/>.
+ *
+ */
+package org.apache.http.nio.client.methods;
+
+import java.io.UnsupportedEncodingException;
+import java.net.URI;
+
+import org.apache.http.HttpHost;
+import org.apache.http.HttpRequest;
+import org.apache.http.HttpResponse;
+import org.apache.http.client.methods.HttpDelete;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.client.methods.HttpOptions;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.client.methods.HttpPut;
+import org.apache.http.client.methods.HttpTrace;
+import org.apache.http.client.methods.HttpUriRequest;
+import org.apache.http.client.utils.URIUtils;
+import org.apache.http.nio.client.HttpAsyncRequestProducer;
+import org.apache.http.nio.client.HttpAsyncResponseConsumer;
+import org.apache.http.nio.entity.NByteArrayEntity;
+import org.apache.http.nio.entity.NStringEntity;
+import org.apache.http.protocol.HTTP;
+
+public final class HttpAsyncMethods {
+
+    public static HttpAsyncRequestProducer create(final HttpHost target, final HttpRequest request) {
+        if (target == null) {
+            throw new IllegalArgumentException("HTTP host may not be null");
+        }
+        if (request == null) {
+            throw new IllegalArgumentException("HTTP request may not be null");
+        }
+        return new HttpAsyncRequestProducerImpl(target, request);
+    }
+
+    public static HttpAsyncRequestProducer create(final HttpUriRequest request) {
+        if (request == null) {
+            throw new IllegalArgumentException("HTTP request may not be null");
+        }
+        HttpHost target = URIUtils.extractHost(request.getURI());
+        return new HttpAsyncRequestProducerImpl(target, request);
+    }
+
+    public static HttpAsyncRequestProducer createGet(final URI requestURI) {
+        return create(new HttpGet(requestURI));
+    }
+
+    public static HttpAsyncRequestProducer createGet(final String requestURI) {
+        return create(new HttpGet(URI.create(requestURI)));
+    }
+
+    public static HttpAsyncRequestProducer createHead(final URI requestURI) {
+        return create(new HttpGet(requestURI));
+    }
+
+    public static HttpAsyncRequestProducer createHead(final String requestURI) {
+        return create(new HttpGet(URI.create(requestURI)));
+    }
+
+    public static HttpAsyncRequestProducer createDelete(final URI requestURI) {
+        return create(new HttpDelete(requestURI));
+    }
+
+    public static HttpAsyncRequestProducer createDelete(final String requestURI) {
+        return create(new HttpDelete(URI.create(requestURI)));
+    }
+
+    public static HttpAsyncRequestProducer createOptions(final URI requestURI) {
+        return create(new HttpOptions(requestURI));
+    }
+
+    public static HttpAsyncRequestProducer createOptions(final String requestURI) {
+        return create(new HttpOptions(URI.create(requestURI)));
+    }
+
+    public static HttpAsyncRequestProducer createTrace(final URI requestURI) {
+        return create(new HttpTrace(requestURI));
+    }
+
+    public static HttpAsyncRequestProducer createTrace(final String requestURI) {
+        return create(new HttpTrace(URI.create(requestURI)));
+    }
+
+    public static HttpAsyncRequestProducer createPost(
+            final URI requestURI,
+            final String content,
+            String mimeType, String charset) throws UnsupportedEncodingException {
+        HttpPost httppost = new HttpPost(requestURI);
+        if (mimeType == null) {
+            mimeType = HTTP.PLAIN_TEXT_TYPE;
+        }
+        if (charset == null) {
+            charset = HTTP.DEFAULT_CONTENT_CHARSET;
+        }
+        NStringEntity entity = new NStringEntity(content, charset);
+        entity.setContentType(mimeType + HTTP.CHARSET_PARAM + charset);
+        httppost.setEntity(entity);
+        HttpHost target = URIUtils.extractHost(requestURI);
+        return new HttpAsyncRequestProducerImpl(target, httppost, entity);
+    }
+
+    public static HttpAsyncRequestProducer createPost(
+            final String requestURI,
+            final String content,
+            String mimeType, String charset) throws UnsupportedEncodingException {
+        return createPost(URI.create(requestURI), content, mimeType, charset);
+    }
+
+    public static HttpAsyncRequestProducer createPost(
+            final URI requestURI,
+            final byte[] content, final String contentType) {
+        HttpPost httppost = new HttpPost(requestURI);
+        NByteArrayEntity entity = new NByteArrayEntity(content);
+        entity.setContentType(contentType);
+        HttpHost target = URIUtils.extractHost(requestURI);
+        return new HttpAsyncRequestProducerImpl(target, httppost, entity);
+    }
+
+    public static HttpAsyncRequestProducer createPost(
+            final String requestURI,
+            final byte[] content, final String contentType) {
+        return createPost(URI.create(requestURI), content, contentType);
+    }
+
+    public static HttpAsyncRequestProducer createPut(
+            final URI requestURI,
+            final String content,
+            String mimeType, String charset) throws UnsupportedEncodingException {
+        HttpPut httpput = new HttpPut(requestURI);
+        if (mimeType == null) {
+            mimeType = HTTP.PLAIN_TEXT_TYPE;
+        }
+        if (charset == null) {
+            charset = HTTP.DEFAULT_CONTENT_CHARSET;
+        }
+        NStringEntity entity = new NStringEntity(content, charset);
+        entity.setContentType(mimeType + HTTP.CHARSET_PARAM + charset);
+        httpput.setEntity(entity);
+        HttpHost target = URIUtils.extractHost(requestURI);
+        return new HttpAsyncRequestProducerImpl(target, httpput, entity);
+    }
+
+    public static HttpAsyncRequestProducer createPut(
+            final String requestURI,
+            final String content,
+            String mimeType, String charset) throws UnsupportedEncodingException {
+        return createPut(URI.create(requestURI), content, mimeType, charset);
+    }
+
+    public static HttpAsyncRequestProducer createPut(
+            final URI requestURI,
+            final byte[] content,
+            final String contentType) {
+        HttpPut httpput = new HttpPut(requestURI);
+        NByteArrayEntity entity = new NByteArrayEntity(content);
+        entity.setContentType(contentType);
+        HttpHost target = URIUtils.extractHost(requestURI);
+        return new HttpAsyncRequestProducerImpl(target, httpput, entity);
+    }
+
+    public static HttpAsyncRequestProducer createPut(
+            final String requestURI,
+            final byte[] content, final String contentType) {
+        return createPut(URI.create(requestURI), content, contentType);
+    }
+
+    public static HttpAsyncResponseConsumer<HttpResponse> createConsumer() {
+        return new BasicHttpAsyncResponseConsumer();
+    }
+
+}

Propchange: httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/nio/client/methods/HttpAsyncMethods.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/nio/client/methods/HttpAsyncMethods.java
------------------------------------------------------------------------------
    svn:keywords = Date Revision

Propchange: httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/nio/client/methods/HttpAsyncMethods.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/nio/client/methods/HttpAsyncOptions.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/nio/client/methods/HttpAsyncOptions.java?rev=1149337&r1=1149336&r2=1149337&view=diff
==============================================================================
--- httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/nio/client/methods/HttpAsyncOptions.java (original)
+++ httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/nio/client/methods/HttpAsyncOptions.java Thu Jul 21 19:49:03 2011
@@ -31,6 +31,10 @@ import java.net.URI;
 import org.apache.http.client.methods.HttpOptions;
 import org.apache.http.client.methods.HttpUriRequest;
 
+/**
+ * @deprecated use {@link HttpAsyncMethods#createOptions(URI)}
+ */
+@Deprecated
 public class HttpAsyncOptions extends BaseHttpAsyncRequestProducer {
 
     public HttpAsyncOptions(final URI requestURI) {

Modified: httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/nio/client/methods/HttpAsyncPost.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/nio/client/methods/HttpAsyncPost.java?rev=1149337&r1=1149336&r2=1149337&view=diff
==============================================================================
--- httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/nio/client/methods/HttpAsyncPost.java (original)
+++ httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/nio/client/methods/HttpAsyncPost.java Thu Jul 21 19:49:03 2011
@@ -32,6 +32,11 @@ import org.apache.http.HttpEntity;
 import org.apache.http.HttpEntityEnclosingRequest;
 import org.apache.http.client.methods.HttpPost;
 
+/**
+ * @deprecated use {@link HttpAsyncMethods#createPost(URI, String, String, String)}
+ *  or {@link HttpAsyncMethods#createPost(URI, byte[], String)}
+ */
+@Deprecated
 public class HttpAsyncPost extends BaseHttpAsyncEntityRequestProducer {
 
     public HttpAsyncPost(final URI requestURI, final byte[] content, final String contentType) {

Modified: httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/nio/client/methods/HttpAsyncPut.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/nio/client/methods/HttpAsyncPut.java?rev=1149337&r1=1149336&r2=1149337&view=diff
==============================================================================
--- httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/nio/client/methods/HttpAsyncPut.java (original)
+++ httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/nio/client/methods/HttpAsyncPut.java Thu Jul 21 19:49:03 2011
@@ -32,6 +32,11 @@ import org.apache.http.HttpEntity;
 import org.apache.http.HttpEntityEnclosingRequest;
 import org.apache.http.client.methods.HttpPut;
 
+/**
+ * @deprecated use {@link HttpAsyncMethods#createPut(URI, String, String, String)}
+ *  or {@link HttpAsyncMethods#createPut(URI, byte[], String)}
+ */
+@Deprecated
 public class HttpAsyncPut extends BaseHttpAsyncEntityRequestProducer {
 
     public HttpAsyncPut(final URI requestURI, final byte[] content, final String contentType) {

Added: httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/nio/client/methods/HttpAsyncRequestProducerImpl.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/nio/client/methods/HttpAsyncRequestProducerImpl.java?rev=1149337&view=auto
==============================================================================
--- httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/nio/client/methods/HttpAsyncRequestProducerImpl.java (added)
+++ httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/nio/client/methods/HttpAsyncRequestProducerImpl.java Thu Jul 21 19:49:03 2011
@@ -0,0 +1,114 @@
+/*
+ * ====================================================================
+ * 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.
+ * ====================================================================
+ *
+ * This software consists of voluntary contributions made by many
+ * individuals on behalf of the Apache Software Foundation.  For more
+ * information on the Apache Software Foundation, please see
+ * <http://www.apache.org/>.
+ *
+ */
+package org.apache.http.nio.client.methods;
+
+import java.io.Closeable;
+import java.io.IOException;
+
+import org.apache.http.HttpEntity;
+import org.apache.http.HttpEntityEnclosingRequest;
+import org.apache.http.HttpHost;
+import org.apache.http.HttpRequest;
+import org.apache.http.nio.ContentEncoder;
+import org.apache.http.nio.IOControl;
+import org.apache.http.nio.client.HttpAsyncRequestProducer;
+import org.apache.http.nio.entity.ProducingNHttpEntity;
+
+class HttpAsyncRequestProducerImpl implements HttpAsyncRequestProducer, Closeable {
+
+    private final HttpHost target;
+    private final HttpRequest request;
+    private final ProducingNHttpEntity producer;
+
+    HttpAsyncRequestProducerImpl(
+            final HttpHost target,
+            final HttpRequest request,
+            final ProducingNHttpEntity producer) {
+        super();
+        if (request == null) {
+            throw new IllegalArgumentException("Request may not be null");
+        }
+        this.target = target;
+        this.request = request;
+        this.producer = producer;
+    }
+
+    HttpAsyncRequestProducerImpl(final HttpHost target, final HttpRequest request) {
+        this(target, request, getProducer(request));
+    }
+
+    private static ProducingNHttpEntity getProducer(final HttpRequest request) {
+        if (request instanceof HttpEntityEnclosingRequest) {
+            HttpEntity entity = ((HttpEntityEnclosingRequest) request).getEntity();
+            if (entity instanceof ProducingNHttpEntity) {
+                return (ProducingNHttpEntity) entity;
+            } else {
+                return new NHttpEntityWrapper(entity);
+            }
+        } else {
+            return null;
+        }
+    }
+
+    public synchronized HttpRequest generateRequest() {
+        return this.request;
+    }
+
+    public synchronized HttpHost getTarget() {
+        return this.target;
+    }
+
+    public synchronized void produceContent(
+            final ContentEncoder encoder, final IOControl ioctrl) throws IOException {
+        if (this.producer != null) {
+            this.producer.produceContent(encoder, ioctrl);
+            if (encoder.isCompleted()) {
+                this.producer.finish();
+            }
+        }
+    }
+
+    public synchronized boolean isRepeatable() {
+        return this.producer == null || this.producer.isRepeatable();
+    }
+
+    public synchronized void resetRequest() {
+        if (this.producer != null) {
+            try {
+                this.producer.finish();
+            } catch (IOException ignore) {
+            }
+        }
+    }
+
+    public synchronized void close() throws IOException {
+        if (this.producer != null) {
+            this.producer.finish();
+        }
+    }
+
+}

Propchange: httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/nio/client/methods/HttpAsyncRequestProducerImpl.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/nio/client/methods/HttpAsyncRequestProducerImpl.java
------------------------------------------------------------------------------
    svn:keywords = Date Revision

Propchange: httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/nio/client/methods/HttpAsyncRequestProducerImpl.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/nio/client/methods/HttpAsyncTrace.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/nio/client/methods/HttpAsyncTrace.java?rev=1149337&r1=1149336&r2=1149337&view=diff
==============================================================================
--- httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/nio/client/methods/HttpAsyncTrace.java (original)
+++ httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/nio/client/methods/HttpAsyncTrace.java Thu Jul 21 19:49:03 2011
@@ -31,6 +31,10 @@ import java.net.URI;
 import org.apache.http.client.methods.HttpTrace;
 import org.apache.http.client.methods.HttpUriRequest;
 
+/**
+ * @deprecated use {@link HttpAsyncMethods#createTrace(URI)}
+ */
+@Deprecated
 public class HttpAsyncTrace extends BaseHttpAsyncRequestProducer {
 
     public HttpAsyncTrace(final URI requestURI) {

Copied: httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/nio/client/methods/NHttpEntityWrapper.java (from r1149330, httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/NHttpEntityWrapper.java)
URL: http://svn.apache.org/viewvc/httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/nio/client/methods/NHttpEntityWrapper.java?p2=httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/nio/client/methods/NHttpEntityWrapper.java&p1=httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/NHttpEntityWrapper.java&r1=1149330&r2=1149337&rev=1149337&view=diff
==============================================================================
--- httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/NHttpEntityWrapper.java (original)
+++ httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/nio/client/methods/NHttpEntityWrapper.java Thu Jul 21 19:49:03 2011
@@ -25,7 +25,7 @@
  *
  */
 
-package org.apache.http.impl.nio.client;
+package org.apache.http.nio.client.methods;
 
 import java.io.IOException;
 import java.io.InputStream;

Propchange: httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/nio/client/methods/NHttpEntityWrapper.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/nio/client/methods/NHttpEntityWrapper.java
------------------------------------------------------------------------------
    svn:keywords = Date Revision

Propchange: httpcomponents/httpasyncclient/trunk/httpasyncclient/src/main/java/org/apache/http/nio/client/methods/NHttpEntityWrapper.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: httpcomponents/httpasyncclient/trunk/httpasyncclient/src/test/java/org/apache/http/impl/nio/client/TestHttpAsync.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpasyncclient/trunk/httpasyncclient/src/test/java/org/apache/http/impl/nio/client/TestHttpAsync.java?rev=1149337&r1=1149336&r2=1149337&view=diff
==============================================================================
--- httpcomponents/httpasyncclient/trunk/httpasyncclient/src/test/java/org/apache/http/impl/nio/client/TestHttpAsync.java (original)
+++ httpcomponents/httpasyncclient/trunk/httpasyncclient/src/test/java/org/apache/http/impl/nio/client/TestHttpAsync.java Thu Jul 21 19:49:03 2011
@@ -40,6 +40,9 @@ import org.apache.http.client.methods.Ht
 import org.apache.http.localserver.AsyncHttpTestBase;
 import org.apache.http.nio.ContentDecoder;
 import org.apache.http.nio.IOControl;
+import org.apache.http.nio.client.HttpAsyncRequestProducer;
+import org.apache.http.nio.client.methods.BasicHttpAsyncResponseConsumer;
+import org.apache.http.nio.client.methods.HttpAsyncMethods;
 import org.apache.http.nio.entity.NByteArrayEntity;
 import org.apache.http.util.EntityUtils;
 import org.junit.Assert;
@@ -140,7 +143,7 @@ public class TestHttpAsync extends Async
     @Test
     public void testRequestFailure() throws Exception {
         HttpGet httpget = new HttpGet("/random/2048");
-        BasicHttpAsyncRequestProducer requestProducer = new BasicHttpAsyncRequestProducer(this.target, httpget) ;
+        HttpAsyncRequestProducer requestProducer = HttpAsyncMethods.create(this.target, httpget) ;
         BasicHttpAsyncResponseConsumer responseConsumer = new BasicHttpAsyncResponseConsumer() {
 
             @Override

Modified: httpcomponents/httpasyncclient/trunk/httpasyncclient/src/test/java/org/apache/http/impl/nio/client/TestHttpsAsync.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpasyncclient/trunk/httpasyncclient/src/test/java/org/apache/http/impl/nio/client/TestHttpsAsync.java?rev=1149337&r1=1149336&r2=1149337&view=diff
==============================================================================
--- httpcomponents/httpasyncclient/trunk/httpasyncclient/src/test/java/org/apache/http/impl/nio/client/TestHttpsAsync.java (original)
+++ httpcomponents/httpasyncclient/trunk/httpasyncclient/src/test/java/org/apache/http/impl/nio/client/TestHttpsAsync.java Thu Jul 21 19:49:03 2011
@@ -52,6 +52,9 @@ import org.apache.http.localserver.Async
 import org.apache.http.localserver.LocalTestServer;
 import org.apache.http.nio.ContentDecoder;
 import org.apache.http.nio.IOControl;
+import org.apache.http.nio.client.HttpAsyncRequestProducer;
+import org.apache.http.nio.client.methods.BasicHttpAsyncResponseConsumer;
+import org.apache.http.nio.client.methods.HttpAsyncMethods;
 import org.apache.http.nio.conn.scheme.Scheme;
 import org.apache.http.nio.conn.scheme.SchemeRegistry;
 import org.apache.http.nio.conn.ssl.SSLLayeringStrategy;
@@ -227,7 +230,7 @@ public class TestHttpsAsync extends Asyn
     @Test
     public void testRequestFailure() throws Exception {
         HttpGet httpget = new HttpGet("/random/2048");
-        BasicHttpAsyncRequestProducer requestProducer = new BasicHttpAsyncRequestProducer(this.target, httpget) ;
+        HttpAsyncRequestProducer requestProducer = HttpAsyncMethods.create(this.target, httpget) ;
         BasicHttpAsyncResponseConsumer responseConsumer = new BasicHttpAsyncResponseConsumer() {
 
             @Override

Modified: httpcomponents/httpasyncclient/trunk/httpasyncclient/src/test/java/org/apache/http/nio/client/methods/TestAsyncConsumers.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpasyncclient/trunk/httpasyncclient/src/test/java/org/apache/http/nio/client/methods/TestAsyncConsumers.java?rev=1149337&r1=1149336&r2=1149337&view=diff
==============================================================================
--- httpcomponents/httpasyncclient/trunk/httpasyncclient/src/test/java/org/apache/http/nio/client/methods/TestAsyncConsumers.java (original)
+++ httpcomponents/httpasyncclient/trunk/httpasyncclient/src/test/java/org/apache/http/nio/client/methods/TestAsyncConsumers.java Thu Jul 21 19:49:03 2011
@@ -38,6 +38,8 @@ import org.apache.http.HttpResponse;
 import org.apache.http.localserver.AsyncHttpTestBase;
 import org.apache.http.nio.ContentDecoder;
 import org.apache.http.nio.IOControl;
+import org.apache.http.nio.client.HttpAsyncRequestProducer;
+import org.apache.http.protocol.HTTP;
 import org.junit.Assert;
 import org.junit.Test;
 import org.mockito.Mockito;
@@ -79,7 +81,7 @@ public class TestAsyncConsumers extends 
     @Test
     public void testByteConsumer() throws Exception {
         for (int i = 0; i < 5; i++) {
-            HttpAsyncGet httpget = new HttpAsyncGet(this.target.toURI() + "/random/20480");
+            HttpAsyncRequestProducer httpget = HttpAsyncMethods.createGet(this.target.toURI() + "/random/20480");
             AsyncByteConsumer<Long> consumer = new ByteCountingConsumer();
             Future<Long> future = this.httpclient.execute(httpget, consumer, null);
             Long count = future.get();
@@ -90,7 +92,7 @@ public class TestAsyncConsumers extends 
     @Test
     public void testByteConsumerSmallBufffer() throws Exception {
         for (int i = 0; i < 5; i++) {
-            HttpAsyncGet httpget = new HttpAsyncGet(this.target.toURI() + "/random/20480");
+            HttpAsyncRequestProducer httpget = HttpAsyncMethods.createGet(this.target.toURI() + "/random/20480");
             AsyncByteConsumer<Long> consumer = new ByteCountingConsumer(512);
             Future<Long> future = this.httpclient.execute(httpget, consumer, null);
             Long count = future.get();
@@ -143,7 +145,8 @@ public class TestAsyncConsumers extends 
         String s = sb.toString();
 
         for (int i = 0; i < 5; i++) {
-            HttpAsyncPost httppost = new HttpAsyncPost(this.target.toURI() + "/echo/stuff", s);
+            HttpAsyncRequestProducer httppost = HttpAsyncMethods.createPost(
+                    this.target.toURI() + "/echo/stuff", s, "text/plain", HTTP.ASCII);
             AsyncCharConsumer<String> consumer = new BufferingCharConsumer();
             Future<String> future = this.httpclient.execute(httppost, consumer, null);
             String result = future.get();
@@ -161,7 +164,8 @@ public class TestAsyncConsumers extends 
         String s = sb.toString();
 
         for (int i = 0; i < 5; i++) {
-            HttpAsyncPost httppost = new HttpAsyncPost(this.target.toURI() + "/echo/stuff", s);
+            HttpAsyncRequestProducer httppost = HttpAsyncMethods.createPost(
+                    this.target.toURI() + "/echo/stuff", s, "text/plain", HTTP.ASCII);
             AsyncCharConsumer<String> consumer = new BufferingCharConsumer(512);
             Future<String> future = this.httpclient.execute(httppost, consumer, null);
             String result = future.get();
@@ -178,7 +182,8 @@ public class TestAsyncConsumers extends 
         }
         String s = sb.toString();
 
-        HttpAsyncPost httppost = new HttpAsyncPost(this.target.toURI() + "/echo/stuff", s);
+        HttpAsyncRequestProducer httppost = HttpAsyncMethods.createPost(
+                this.target.toURI() + "/echo/stuff", s, "text/plain", HTTP.ASCII);
         AsyncCharConsumer<String> consumer = Mockito.spy(new BufferingCharConsumer());
         Future<String> future = this.httpclient.execute(httppost, consumer, null);
         String result = future.get();
@@ -191,7 +196,8 @@ public class TestAsyncConsumers extends 
 
     @Test
     public void testResourceReleaseOnException() throws Exception {
-        HttpAsyncPost httppost = new HttpAsyncPost(this.target.toURI() + "/echo/stuff", "stuff");
+        HttpAsyncRequestProducer httppost = HttpAsyncMethods.createPost(
+                this.target.toURI() + "/echo/stuff", "stuff", "text/plain", HTTP.ASCII);
         AsyncCharConsumer<String> consumer = Mockito.spy(new BufferingCharConsumer());
         Mockito.doThrow(new IOException("Kaboom")).when(consumer).consumeContent(
                 Mockito.any(ContentDecoder.class), Mockito.any(IOControl.class));
@@ -213,7 +219,8 @@ public class TestAsyncConsumers extends 
 
     @Test
     public void testResourceReleaseOnBuildFailure() throws Exception {
-        HttpAsyncPost httppost = new HttpAsyncPost(this.target.toURI() + "/echo/stuff", "stuff");
+        HttpAsyncRequestProducer httppost = HttpAsyncMethods.createPost(
+                this.target.toURI() + "/echo/stuff", "stuff", "text/plain", HTTP.ASCII);
         AsyncCharConsumer<String> consumer = Mockito.spy(new BufferingCharConsumer());
         Mockito.doThrow(new HttpException("Kaboom")).when(consumer).buildResult();