You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by re...@apache.org on 2024/10/10 14:54:06 UTC
(cxf) 01/09: [CXF-9062]Be able to create AsyncHTTPConduit based on URLConnectionHT… (#2093)
This is an automated email from the ASF dual-hosted git repository.
reta pushed a commit to branch 4.0.x-fixes
in repository https://gitbox.apache.org/repos/asf/cxf.git
commit 2561dfc8ae76689c2432d65099d4036e01c69158
Author: Freeman(Yue) Fang <fr...@gmail.com>
AuthorDate: Tue Oct 8 09:36:46 2024 -0400
[CXF-9062]Be able to create AsyncHTTPConduit based on URLConnectionHT… (#2093)
* [CXF-9062]Be able to create AsyncHTTPConduit based on URLConnectionHTTPConduit
* [CXF-9062]address feedback
(cherry picked from commit d3da696c254edcdd4ed95ad6ed24907f5ab036c1)
---
.../http/asyncclient/AsyncHTTPConduit.java | 6 ++--
.../http/asyncclient/AsyncHTTPConduitFactory.java | 13 +++++++--
.../asyncclient/AsyncWrappedOutputStreamBase.java | 34 ++++++++++++++++++++++
.../asyncclient/CXFHttpAsyncResponseConsumer.java | 5 ++--
.../transport/http/asyncclient/CXFHttpRequest.java | 8 ++---
...uit.java => URLConnectionAsyncHTTPConduit.java} | 20 ++++++-------
.../http/asyncclient/hc5/AsyncHTTPConduit.java | 6 ++--
.../asyncclient/hc5/AsyncHTTPConduitFactory.java | 13 +++++++--
.../hc5/AsyncWrappedOutputStreamBase.java | 34 ++++++++++++++++++++++
.../hc5/CXFHttpAsyncResponseConsumer.java | 5 ++--
.../http/asyncclient/hc5/CXFHttpRequest.java | 7 ++---
...uit.java => URLConnectionAsyncHTTPConduit.java} | 23 ++++++++-------
.../cxf/transport/http/HTTPTransportFactory.java | 13 ++++++---
.../http_undertow/UndertowDigestAuthTest.java | 2 +-
.../AbstractUndertowClientServerHttp2Test.java | 8 ++---
.../systest/http_jetty/JettyDigestAuthTest.java | 2 +-
16 files changed, 139 insertions(+), 60 deletions(-)
diff --git a/rt/transports/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/AsyncHTTPConduit.java b/rt/transports/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/AsyncHTTPConduit.java
index 7325611b8b..c3eb240191 100755
--- a/rt/transports/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/AsyncHTTPConduit.java
+++ b/rt/transports/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/AsyncHTTPConduit.java
@@ -31,7 +31,6 @@ import java.net.SocketTimeoutException;
import java.net.URI;
import java.net.URISyntaxException;
import java.nio.ByteBuffer;
-import java.nio.channels.WritableByteChannel;
import java.security.GeneralSecurityException;
import java.security.Principal;
import java.security.cert.Certificate;
@@ -58,7 +57,6 @@ import org.apache.cxf.helpers.HttpHeaderHelper;
import org.apache.cxf.helpers.IOUtils;
import org.apache.cxf.io.CacheAndWriteOutputStream;
import org.apache.cxf.io.CachedOutputStream;
-import org.apache.cxf.io.CopyingOutputStream;
import org.apache.cxf.message.Message;
import org.apache.cxf.message.MessageUtils;
import org.apache.cxf.service.model.EndpointInfo;
@@ -265,7 +263,7 @@ public class AsyncHTTPConduit extends HttpClientHTTPConduit {
public class AsyncWrappedOutputStream extends WrappedOutputStream
- implements CopyingOutputStream, WritableByteChannel {
+ implements AsyncWrappedOutputStreamBase {
final HTTPClientPolicy csPolicy;
CXFHttpRequest entity;
@@ -618,7 +616,7 @@ public class AsyncHTTPConduit extends HttpClientHTTPConduit {
|| lastURL.getPort() != url.getPort();
}
- protected boolean retrySetHttpResponse(HttpResponse r) {
+ public boolean retrySetHttpResponse(HttpResponse r) {
if (isAsync) {
setHttpResponse(r);
}
diff --git a/rt/transports/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/AsyncHTTPConduitFactory.java b/rt/transports/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/AsyncHTTPConduitFactory.java
index f0c88a8cac..9b0c928f29 100644
--- a/rt/transports/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/AsyncHTTPConduitFactory.java
+++ b/rt/transports/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/AsyncHTTPConduitFactory.java
@@ -32,6 +32,7 @@ import org.apache.cxf.service.model.EndpointInfo;
import org.apache.cxf.transport.http.HTTPConduit;
import org.apache.cxf.transport.http.HTTPConduitFactory;
import org.apache.cxf.transport.http.HTTPTransportFactory;
+import org.apache.cxf.transport.http.URLConnectionHTTPConduit;
import org.apache.cxf.transports.http.configuration.HTTPClientPolicy;
import org.apache.cxf.ws.addressing.EndpointReferenceType;
import org.apache.http.HttpRequest;
@@ -85,7 +86,8 @@ public class AsyncHTTPConduitFactory implements HTTPConduitFactory {
//CXF specific
public static final String USE_POLICY = "org.apache.cxf.transport.http.async.usePolicy";
-
+
+
public enum UseAsyncPolicy {
ALWAYS, ASYNC_ONLY, NEVER;
@@ -129,6 +131,7 @@ public class AsyncHTTPConduitFactory implements HTTPConduitFactory {
int soTimeout = IOReactorConfig.DEFAULT.getSoTimeout();
boolean soKeepalive = IOReactorConfig.DEFAULT.isSoKeepalive();
boolean tcpNoDelay = true;
+
AsyncHTTPConduitFactory() {
@@ -262,7 +265,11 @@ public class AsyncHTTPConduitFactory implements HTTPConduitFactory {
if (isShutdown) {
return null;
}
- return new AsyncHTTPConduit(bus, localInfo, target, this);
+ if (HTTPTransportFactory.isForceURLConnectionConduit()) {
+ return new URLConnectionAsyncHTTPConduit(bus, localInfo, target, this);
+ } else {
+ return new AsyncHTTPConduit(bus, localInfo, target, this);
+ }
}
public void shutdown() {
@@ -375,7 +382,7 @@ public class AsyncHTTPConduitFactory implements HTTPConduitFactory {
protected void adaptClientBuilder(HttpAsyncClientBuilder httpAsyncClientBuilder) {
}
- public CloseableHttpAsyncClient createClient(final AsyncHTTPConduit c) throws IOException {
+ public CloseableHttpAsyncClient createClient(final URLConnectionHTTPConduit c) throws IOException {
if (client == null) {
setupNIOClient(c.getClient());
}
diff --git a/rt/transports/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/AsyncWrappedOutputStreamBase.java b/rt/transports/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/AsyncWrappedOutputStreamBase.java
new file mode 100644
index 0000000000..66e5b24198
--- /dev/null
+++ b/rt/transports/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/AsyncWrappedOutputStreamBase.java
@@ -0,0 +1,34 @@
+/**
+ * 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.cxf.transport.http.asyncclient;
+
+import java.nio.channels.WritableByteChannel;
+
+import org.apache.cxf.io.CachedOutputStream;
+import org.apache.cxf.io.CopyingOutputStream;
+import org.apache.http.HttpResponse;
+
+interface AsyncWrappedOutputStreamBase
+ extends CopyingOutputStream, WritableByteChannel {
+ boolean retransmitable();
+
+ CachedOutputStream getCachedStream();
+
+ boolean retrySetHttpResponse(HttpResponse r);
+}
diff --git a/rt/transports/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/CXFHttpAsyncResponseConsumer.java b/rt/transports/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/CXFHttpAsyncResponseConsumer.java
index 09af41f64b..bae369f4dc 100644
--- a/rt/transports/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/CXFHttpAsyncResponseConsumer.java
+++ b/rt/transports/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/CXFHttpAsyncResponseConsumer.java
@@ -21,7 +21,6 @@ package org.apache.cxf.transport.http.asyncclient;
import java.io.IOException;
-import org.apache.cxf.transport.http.asyncclient.AsyncHTTPConduit.AsyncWrappedOutputStream;
import org.apache.http.HttpException;
import org.apache.http.HttpResponse;
import org.apache.http.nio.ContentDecoder;
@@ -32,7 +31,7 @@ import org.apache.http.protocol.HttpContext;
public class CXFHttpAsyncResponseConsumer implements HttpAsyncResponseConsumer<Boolean> {
private final SharedInputBuffer buf;
- private final AsyncWrappedOutputStream outstream;
+ private final AsyncWrappedOutputStreamBase outstream;
private final CXFResponseCallback responseCallback;
private volatile boolean completed;
@@ -40,7 +39,7 @@ public class CXFHttpAsyncResponseConsumer implements HttpAsyncResponseConsumer<B
private volatile HttpResponse response;
public CXFHttpAsyncResponseConsumer(
- final AsyncWrappedOutputStream asyncWrappedOutputStream,
+ final AsyncWrappedOutputStreamBase asyncWrappedOutputStream,
final SharedInputBuffer buf,
final CXFResponseCallback responseCallback) {
super();
diff --git a/rt/transports/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/CXFHttpRequest.java b/rt/transports/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/CXFHttpRequest.java
index 82dfff5e73..e206bcac43 100644
--- a/rt/transports/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/CXFHttpRequest.java
+++ b/rt/transports/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/CXFHttpRequest.java
@@ -21,7 +21,7 @@ package org.apache.cxf.transport.http.asyncclient;
import java.net.URI;
-import org.apache.cxf.transport.http.asyncclient.AsyncHTTPConduit.AsyncWrappedOutputStream;
+
import org.apache.http.Header;
import org.apache.http.HttpEntity;
import org.apache.http.HttpEntityEnclosingRequest;
@@ -40,7 +40,7 @@ public class CXFHttpRequest extends AbstractHttpMessage implements HttpEntityEnc
private URI uri;
private HttpEntity entity;
- private AsyncWrappedOutputStream out;
+ private AsyncWrappedOutputStreamBase out;
private RequestConfig config;
public CXFHttpRequest(final String method) {
@@ -48,10 +48,10 @@ public class CXFHttpRequest extends AbstractHttpMessage implements HttpEntityEnc
this.method = method;
}
- public void setOutputStream(AsyncWrappedOutputStream o) {
+ public void setOutputStream(AsyncWrappedOutputStreamBase o) {
out = o;
}
- public AsyncWrappedOutputStream getOutputStream() {
+ public AsyncWrappedOutputStreamBase getOutputStream() {
return out;
}
public URI getURI() {
diff --git a/rt/transports/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/AsyncHTTPConduit.java b/rt/transports/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/URLConnectionAsyncHTTPConduit.java
similarity index 98%
copy from rt/transports/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/AsyncHTTPConduit.java
copy to rt/transports/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/URLConnectionAsyncHTTPConduit.java
index 7325611b8b..9244db36ad 100755
--- a/rt/transports/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/AsyncHTTPConduit.java
+++ b/rt/transports/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/URLConnectionAsyncHTTPConduit.java
@@ -31,7 +31,6 @@ import java.net.SocketTimeoutException;
import java.net.URI;
import java.net.URISyntaxException;
import java.nio.ByteBuffer;
-import java.nio.channels.WritableByteChannel;
import java.security.GeneralSecurityException;
import java.security.Principal;
import java.security.cert.Certificate;
@@ -58,13 +57,12 @@ import org.apache.cxf.helpers.HttpHeaderHelper;
import org.apache.cxf.helpers.IOUtils;
import org.apache.cxf.io.CacheAndWriteOutputStream;
import org.apache.cxf.io.CachedOutputStream;
-import org.apache.cxf.io.CopyingOutputStream;
import org.apache.cxf.message.Message;
import org.apache.cxf.message.MessageUtils;
import org.apache.cxf.service.model.EndpointInfo;
import org.apache.cxf.transport.http.Address;
import org.apache.cxf.transport.http.Headers;
-import org.apache.cxf.transport.http.HttpClientHTTPConduit;
+import org.apache.cxf.transport.http.URLConnectionHTTPConduit;
import org.apache.cxf.transport.http.asyncclient.AsyncHTTPConduitFactory.UseAsyncPolicy;
import org.apache.cxf.transport.http.asyncclient.AsyncHttpResponseWrapperFactory.AsyncHttpResponseWrapper;
import org.apache.cxf.transport.https.HttpsURLConnectionInfo;
@@ -97,7 +95,7 @@ import org.apache.http.nio.util.HeapByteBufferAllocator;
/**
*
*/
-public class AsyncHTTPConduit extends HttpClientHTTPConduit {
+public class URLConnectionAsyncHTTPConduit extends URLConnectionHTTPConduit {
public static final String USE_ASYNC = "use.async.http.conduit";
private final AsyncHTTPConduitFactory factory;
@@ -111,7 +109,7 @@ public class AsyncHTTPConduit extends HttpClientHTTPConduit {
private volatile CloseableHttpAsyncClient client;
- public AsyncHTTPConduit(Bus b,
+ public URLConnectionAsyncHTTPConduit(Bus b,
EndpointInfo ei,
EndpointReferenceType t,
AsyncHTTPConduitFactory factory) throws IOException {
@@ -265,7 +263,7 @@ public class AsyncHTTPConduit extends HttpClientHTTPConduit {
public class AsyncWrappedOutputStream extends WrappedOutputStream
- implements CopyingOutputStream, WritableByteChannel {
+ implements AsyncWrappedOutputStreamBase {
final HTTPClientPolicy csPolicy;
CXFHttpRequest entity;
@@ -523,11 +521,11 @@ public class AsyncHTTPConduit extends HttpClientHTTPConduit {
if (creds != null) {
return creds;
}
- if (AsyncHTTPConduit.this.proxyAuthorizationPolicy != null
- && AsyncHTTPConduit.this.proxyAuthorizationPolicy.getUserName() != null) {
- return new UsernamePasswordCredentials(AsyncHTTPConduit.this
+ if (URLConnectionAsyncHTTPConduit.this.proxyAuthorizationPolicy != null
+ && URLConnectionAsyncHTTPConduit.this.proxyAuthorizationPolicy.getUserName() != null) {
+ return new UsernamePasswordCredentials(URLConnectionAsyncHTTPConduit.this
.proxyAuthorizationPolicy.getUserName(),
- AsyncHTTPConduit.this.proxyAuthorizationPolicy.getPassword());
+ URLConnectionAsyncHTTPConduit.this.proxyAuthorizationPolicy.getPassword());
}
return null;
}
@@ -618,7 +616,7 @@ public class AsyncHTTPConduit extends HttpClientHTTPConduit {
|| lastURL.getPort() != url.getPort();
}
- protected boolean retrySetHttpResponse(HttpResponse r) {
+ public boolean retrySetHttpResponse(HttpResponse r) {
if (isAsync) {
setHttpResponse(r);
}
diff --git a/rt/transports/http-hc5/src/main/java/org/apache/cxf/transport/http/asyncclient/hc5/AsyncHTTPConduit.java b/rt/transports/http-hc5/src/main/java/org/apache/cxf/transport/http/asyncclient/hc5/AsyncHTTPConduit.java
index 33351f17d6..3372ae4343 100644
--- a/rt/transports/http-hc5/src/main/java/org/apache/cxf/transport/http/asyncclient/hc5/AsyncHTTPConduit.java
+++ b/rt/transports/http-hc5/src/main/java/org/apache/cxf/transport/http/asyncclient/hc5/AsyncHTTPConduit.java
@@ -31,7 +31,6 @@ import java.net.SocketTimeoutException;
import java.net.URI;
import java.net.URISyntaxException;
import java.nio.ByteBuffer;
-import java.nio.channels.WritableByteChannel;
import java.security.GeneralSecurityException;
import java.security.Principal;
import java.security.cert.Certificate;
@@ -58,7 +57,6 @@ import org.apache.cxf.helpers.HttpHeaderHelper;
import org.apache.cxf.helpers.IOUtils;
import org.apache.cxf.io.CacheAndWriteOutputStream;
import org.apache.cxf.io.CachedOutputStream;
-import org.apache.cxf.io.CopyingOutputStream;
import org.apache.cxf.message.Message;
import org.apache.cxf.message.MessageUtils;
import org.apache.cxf.service.model.EndpointInfo;
@@ -285,7 +283,7 @@ public class AsyncHTTPConduit extends HttpClientHTTPConduit {
}
public class AsyncWrappedOutputStream extends WrappedOutputStream
- implements CopyingOutputStream, WritableByteChannel {
+ implements AsyncWrappedOutputStreamBase {
private final HTTPClientPolicy csPolicy;
private CXFHttpRequest entity;
@@ -634,7 +632,7 @@ public class AsyncHTTPConduit extends HttpClientHTTPConduit {
|| lastURL.getPort() != url.getPort();
}
- protected boolean retrySetHttpResponse(HttpResponse r) {
+ public boolean retrySetHttpResponse(HttpResponse r) {
if (isAsync) {
setHttpResponse(r);
}
diff --git a/rt/transports/http-hc5/src/main/java/org/apache/cxf/transport/http/asyncclient/hc5/AsyncHTTPConduitFactory.java b/rt/transports/http-hc5/src/main/java/org/apache/cxf/transport/http/asyncclient/hc5/AsyncHTTPConduitFactory.java
index 0c1114cd5d..634843dc19 100644
--- a/rt/transports/http-hc5/src/main/java/org/apache/cxf/transport/http/asyncclient/hc5/AsyncHTTPConduitFactory.java
+++ b/rt/transports/http-hc5/src/main/java/org/apache/cxf/transport/http/asyncclient/hc5/AsyncHTTPConduitFactory.java
@@ -35,6 +35,7 @@ import org.apache.cxf.service.model.EndpointInfo;
import org.apache.cxf.transport.http.HTTPConduit;
import org.apache.cxf.transport.http.HTTPConduitFactory;
import org.apache.cxf.transport.http.HTTPTransportFactory;
+import org.apache.cxf.transport.http.URLConnectionHTTPConduit;
import org.apache.cxf.transports.http.configuration.HTTPClientPolicy;
import org.apache.cxf.ws.addressing.EndpointReferenceType;
import org.apache.hc.client5.http.SystemDefaultDnsResolver;
@@ -89,7 +90,8 @@ public class AsyncHTTPConduitFactory implements HTTPConduitFactory {
public static final String USE_POLICY = "org.apache.cxf.transport.http.async.usePolicy";
private static final Logger LOG = LogUtils.getL7dLogger(AsyncHTTPConduitFactory.class);
-
+
+
public enum UseAsyncPolicy {
ALWAYS, ASYNC_ONLY, NEVER;
@@ -154,6 +156,7 @@ public class AsyncHTTPConduitFactory implements HTTPConduitFactory {
private boolean soKeepalive = IOReactorConfig.DEFAULT.isSoKeepalive();
private boolean tcpNoDelay = true;
+
AsyncHTTPConduitFactory() {
super();
}
@@ -276,7 +279,11 @@ public class AsyncHTTPConduitFactory implements HTTPConduitFactory {
if (isShutdown) {
return null;
}
- return new AsyncHTTPConduit(bus, localInfo, target, this);
+ if (HTTPTransportFactory.isForceURLConnectionConduit()) {
+ return new URLConnectionAsyncHTTPConduit(bus, localInfo, target, this);
+ } else {
+ return new AsyncHTTPConduit(bus, localInfo, target, this);
+ }
}
public void shutdown() {
@@ -399,7 +406,7 @@ public class AsyncHTTPConduitFactory implements HTTPConduitFactory {
protected void adaptClientBuilder(HttpAsyncClientBuilder httpAsyncClientBuilder) {
}
- public CloseableHttpAsyncClient createClient(final AsyncHTTPConduit c, final TlsStrategy tlsStrategy)
+ public CloseableHttpAsyncClient createClient(final URLConnectionHTTPConduit c, final TlsStrategy tlsStrategy)
throws IOException {
return clients
diff --git a/rt/transports/http-hc5/src/main/java/org/apache/cxf/transport/http/asyncclient/hc5/AsyncWrappedOutputStreamBase.java b/rt/transports/http-hc5/src/main/java/org/apache/cxf/transport/http/asyncclient/hc5/AsyncWrappedOutputStreamBase.java
new file mode 100644
index 0000000000..de36731636
--- /dev/null
+++ b/rt/transports/http-hc5/src/main/java/org/apache/cxf/transport/http/asyncclient/hc5/AsyncWrappedOutputStreamBase.java
@@ -0,0 +1,34 @@
+/**
+ * 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.cxf.transport.http.asyncclient.hc5;
+
+import java.nio.channels.WritableByteChannel;
+
+import org.apache.cxf.io.CachedOutputStream;
+import org.apache.cxf.io.CopyingOutputStream;
+import org.apache.hc.core5.http.HttpResponse;
+
+interface AsyncWrappedOutputStreamBase
+ extends CopyingOutputStream, WritableByteChannel {
+ boolean retransmitable();
+
+ CachedOutputStream getCachedStream();
+
+ boolean retrySetHttpResponse(HttpResponse r);
+}
diff --git a/rt/transports/http-hc5/src/main/java/org/apache/cxf/transport/http/asyncclient/hc5/CXFHttpAsyncResponseConsumer.java b/rt/transports/http-hc5/src/main/java/org/apache/cxf/transport/http/asyncclient/hc5/CXFHttpAsyncResponseConsumer.java
index 5808de4870..2ed2b634e1 100644
--- a/rt/transports/http-hc5/src/main/java/org/apache/cxf/transport/http/asyncclient/hc5/CXFHttpAsyncResponseConsumer.java
+++ b/rt/transports/http-hc5/src/main/java/org/apache/cxf/transport/http/asyncclient/hc5/CXFHttpAsyncResponseConsumer.java
@@ -23,7 +23,6 @@ import java.io.IOException;
import java.nio.ByteBuffer;
import java.util.List;
-import org.apache.cxf.transport.http.asyncclient.hc5.AsyncHTTPConduit.AsyncWrappedOutputStream;
import org.apache.hc.core5.concurrent.FutureCallback;
import org.apache.hc.core5.http.EntityDetails;
import org.apache.hc.core5.http.Header;
@@ -35,7 +34,7 @@ import org.apache.hc.core5.http.protocol.HttpContext;
public class CXFHttpAsyncResponseConsumer implements AsyncResponseConsumer<Boolean> {
private final SharedInputBuffer buf;
- private final AsyncWrappedOutputStream outstream;
+ private final AsyncWrappedOutputStreamBase outstream;
private final CXFResponseCallback responseCallback;
private volatile boolean completed;
@@ -43,7 +42,7 @@ public class CXFHttpAsyncResponseConsumer implements AsyncResponseConsumer<Boole
private volatile HttpResponse response;
public CXFHttpAsyncResponseConsumer(
- final AsyncWrappedOutputStream asyncWrappedOutputStream,
+ final AsyncWrappedOutputStreamBase asyncWrappedOutputStream,
final SharedInputBuffer buf,
final CXFResponseCallback responseCallback) {
super();
diff --git a/rt/transports/http-hc5/src/main/java/org/apache/cxf/transport/http/asyncclient/hc5/CXFHttpRequest.java b/rt/transports/http-hc5/src/main/java/org/apache/cxf/transport/http/asyncclient/hc5/CXFHttpRequest.java
index 037bb88179..e38a9ceba6 100644
--- a/rt/transports/http-hc5/src/main/java/org/apache/cxf/transport/http/asyncclient/hc5/CXFHttpRequest.java
+++ b/rt/transports/http-hc5/src/main/java/org/apache/cxf/transport/http/asyncclient/hc5/CXFHttpRequest.java
@@ -22,7 +22,6 @@ package org.apache.cxf.transport.http.asyncclient.hc5;
import java.net.URI;
import java.net.URISyntaxException;
-import org.apache.cxf.transport.http.asyncclient.hc5.AsyncHTTPConduit.AsyncWrappedOutputStream;
import org.apache.hc.client5.http.classic.methods.HttpUriRequestBase;
import org.apache.hc.client5.http.config.Configurable;
import org.apache.hc.client5.http.config.RequestConfig;
@@ -32,17 +31,17 @@ public class CXFHttpRequest extends HttpUriRequestBase implements Configurable {
private static final long serialVersionUID = 1L;
private HttpEntity entity;
- private AsyncWrappedOutputStream out;
+ private AsyncWrappedOutputStreamBase out;
private RequestConfig config;
public CXFHttpRequest(String method, URI uri) {
super(method, uri);
}
- public void setOutputStream(AsyncWrappedOutputStream o) {
+ public void setOutputStream(AsyncWrappedOutputStreamBase o) {
out = o;
}
- public AsyncWrappedOutputStream getOutputStream() {
+ public AsyncWrappedOutputStreamBase getOutputStream() {
return out;
}
diff --git a/rt/transports/http-hc5/src/main/java/org/apache/cxf/transport/http/asyncclient/hc5/AsyncHTTPConduit.java b/rt/transports/http-hc5/src/main/java/org/apache/cxf/transport/http/asyncclient/hc5/URLConnectionAsyncHTTPConduit.java
similarity index 97%
copy from rt/transports/http-hc5/src/main/java/org/apache/cxf/transport/http/asyncclient/hc5/AsyncHTTPConduit.java
copy to rt/transports/http-hc5/src/main/java/org/apache/cxf/transport/http/asyncclient/hc5/URLConnectionAsyncHTTPConduit.java
index 33351f17d6..d8e70f1ff2 100644
--- a/rt/transports/http-hc5/src/main/java/org/apache/cxf/transport/http/asyncclient/hc5/AsyncHTTPConduit.java
+++ b/rt/transports/http-hc5/src/main/java/org/apache/cxf/transport/http/asyncclient/hc5/URLConnectionAsyncHTTPConduit.java
@@ -31,7 +31,6 @@ import java.net.SocketTimeoutException;
import java.net.URI;
import java.net.URISyntaxException;
import java.nio.ByteBuffer;
-import java.nio.channels.WritableByteChannel;
import java.security.GeneralSecurityException;
import java.security.Principal;
import java.security.cert.Certificate;
@@ -58,13 +57,12 @@ import org.apache.cxf.helpers.HttpHeaderHelper;
import org.apache.cxf.helpers.IOUtils;
import org.apache.cxf.io.CacheAndWriteOutputStream;
import org.apache.cxf.io.CachedOutputStream;
-import org.apache.cxf.io.CopyingOutputStream;
import org.apache.cxf.message.Message;
import org.apache.cxf.message.MessageUtils;
import org.apache.cxf.service.model.EndpointInfo;
import org.apache.cxf.transport.http.Address;
import org.apache.cxf.transport.http.Headers;
-import org.apache.cxf.transport.http.HttpClientHTTPConduit;
+import org.apache.cxf.transport.http.URLConnectionHTTPConduit;
import org.apache.cxf.transport.http.asyncclient.hc5.AsyncHTTPConduitFactory.UseAsyncPolicy;
import org.apache.cxf.transport.http.asyncclient.hc5.AsyncHttpResponseWrapperFactory.AsyncHttpResponseWrapper;
import org.apache.cxf.transport.https.HttpsURLConnectionInfo;
@@ -98,7 +96,7 @@ import org.apache.hc.core5.util.Timeout;
/**
* Async HTTP Conduit using Apache HttpClient 5
*/
-public class AsyncHTTPConduit extends HttpClientHTTPConduit {
+public class URLConnectionAsyncHTTPConduit extends URLConnectionHTTPConduit {
/**
* Enable HTTP/2 support
*/
@@ -114,7 +112,9 @@ public class AsyncHTTPConduit extends HttpClientHTTPConduit {
private volatile SSLSession session;
private volatile CloseableHttpAsyncClient client;
- public AsyncHTTPConduit(Bus b, EndpointInfo ei, EndpointReferenceType t, AsyncHTTPConduitFactory factory)
+ public URLConnectionAsyncHTTPConduit(Bus b, EndpointInfo ei,
+ EndpointReferenceType t,
+ AsyncHTTPConduitFactory factory)
throws IOException {
super(b, ei, t);
this.factory = factory;
@@ -285,7 +285,7 @@ public class AsyncHTTPConduit extends HttpClientHTTPConduit {
}
public class AsyncWrappedOutputStream extends WrappedOutputStream
- implements CopyingOutputStream, WritableByteChannel {
+ implements AsyncWrappedOutputStreamBase {
private final HTTPClientPolicy csPolicy;
private CXFHttpRequest entity;
@@ -539,11 +539,12 @@ public class AsyncHTTPConduit extends HttpClientHTTPConduit {
if (creds != null) {
return creds;
}
- if (AsyncHTTPConduit.this.proxyAuthorizationPolicy != null
- && AsyncHTTPConduit.this.proxyAuthorizationPolicy.getUserName() != null) {
+ if (URLConnectionAsyncHTTPConduit.this.proxyAuthorizationPolicy != null
+ && URLConnectionAsyncHTTPConduit.this.proxyAuthorizationPolicy.getUserName() != null) {
return new UsernamePasswordCredentials(
- AsyncHTTPConduit.this.proxyAuthorizationPolicy.getUserName(),
- AsyncHTTPConduit.this.proxyAuthorizationPolicy.getPassword().toCharArray());
+ URLConnectionAsyncHTTPConduit.this.proxyAuthorizationPolicy.getUserName(),
+ URLConnectionAsyncHTTPConduit.this.proxyAuthorizationPolicy.getPassword().
+ toCharArray());
}
return null;
}
@@ -634,7 +635,7 @@ public class AsyncHTTPConduit extends HttpClientHTTPConduit {
|| lastURL.getPort() != url.getPort();
}
- protected boolean retrySetHttpResponse(HttpResponse r) {
+ public boolean retrySetHttpResponse(HttpResponse r) {
if (isAsync) {
setHttpResponse(r);
}
diff --git a/rt/transports/http/src/main/java/org/apache/cxf/transport/http/HTTPTransportFactory.java b/rt/transports/http/src/main/java/org/apache/cxf/transport/http/HTTPTransportFactory.java
index 40d42c8e31..11e1f69cc5 100644
--- a/rt/transports/http/src/main/java/org/apache/cxf/transport/http/HTTPTransportFactory.java
+++ b/rt/transports/http/src/main/java/org/apache/cxf/transport/http/HTTPTransportFactory.java
@@ -69,6 +69,10 @@ public class HTTPTransportFactory
"http://schemas.xmlsoap.org/wsdl/http/"
));
+ private static boolean forceURLConnectionConduit
+ = Boolean.valueOf(SystemPropertyAction.getProperty("org.apache.cxf.transport.http.forceURLConnection"));
+
+
private static final Logger LOG = LogUtils.getL7dLogger(HTTPTransportFactory.class);
/**
@@ -86,8 +90,6 @@ public class HTTPTransportFactory
private final Lock r = lock.readLock();
private final Lock w = lock.writeLock();
- private boolean forceURLConnectionConduit
- = Boolean.valueOf(SystemPropertyAction.getProperty("org.apache.cxf.transport.http.forceURLConnection"));
public HTTPTransportFactory() {
this(new DestinationRegistryImpl());
@@ -237,7 +239,7 @@ public class HTTPTransportFactory
conduit = factory.createConduit(this, bus, endpointInfo, target);
}
if (conduit == null) {
- if (forceURLConnectionConduit) {
+ if (HTTPTransportFactory.isForceURLConnectionConduit()) {
conduit = new URLConnectionHTTPConduit(bus, endpointInfo, target);
} else {
conduit = new HttpClientHTTPConduit(bus, endpointInfo, target);
@@ -301,5 +303,8 @@ public class HTTPTransportFactory
r.unlock();
}
}
-
+
+ public static boolean isForceURLConnectionConduit() {
+ return forceURLConnectionConduit;
+ }
}
diff --git a/systests/transport-undertow/src/test/java/org/apache/cxf/systest/http_undertow/UndertowDigestAuthTest.java b/systests/transport-undertow/src/test/java/org/apache/cxf/systest/http_undertow/UndertowDigestAuthTest.java
index ce295b66e3..ab48a96472 100644
--- a/systests/transport-undertow/src/test/java/org/apache/cxf/systest/http_undertow/UndertowDigestAuthTest.java
+++ b/systests/transport-undertow/src/test/java/org/apache/cxf/systest/http_undertow/UndertowDigestAuthTest.java
@@ -118,7 +118,7 @@ public class UndertowDigestAuthTest extends AbstractClientServerTestBase {
client.setReceiveTimeout(600000);
cond.setClient(client);
if (async) {
- if (cond instanceof AsyncHTTPConduit) {
+ if (cond.getClass().getName().endsWith("AsyncHTTPConduit")) {
UsernamePasswordCredentials creds = new UsernamePasswordCredentials("ffang", "pswd".toCharArray());
bp.getRequestContext().put(Credentials.class.getName(), creds);
bp.getRequestContext().put(AsyncHTTPConduit.USE_ASYNC, Boolean.TRUE);
diff --git a/systests/transport-undertow/src/test/java/org/apache/cxf/systest/http_undertow/http2/AbstractUndertowClientServerHttp2Test.java b/systests/transport-undertow/src/test/java/org/apache/cxf/systest/http_undertow/http2/AbstractUndertowClientServerHttp2Test.java
index 1f318e148b..d1179bb23f 100644
--- a/systests/transport-undertow/src/test/java/org/apache/cxf/systest/http_undertow/http2/AbstractUndertowClientServerHttp2Test.java
+++ b/systests/transport-undertow/src/test/java/org/apache/cxf/systest/http_undertow/http2/AbstractUndertowClientServerHttp2Test.java
@@ -30,15 +30,15 @@ import org.apache.cxf.transport.https.InsecureTrustManager;
import org.junit.Test;
import static org.hamcrest.CoreMatchers.equalTo;
-import static org.hamcrest.CoreMatchers.instanceOf;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
abstract class AbstractUndertowClientServerHttp2Test extends AbstractBusClientServerTestBase {
@Test
public void testBookNotFoundWithHttp2() throws Exception {
final WebClient client = createWebClient("/web/bookstore/notFound", true);
- assertThat(WebClient.getConfig(client).getHttpConduit(), instanceOf(AsyncHTTPConduit.class));
+ assertTrue(WebClient.getConfig(client).getHttpConduit().getClass().getName().endsWith("AsyncHTTPConduit"));
final Response response = client
.accept("text/plain")
@@ -53,7 +53,7 @@ abstract class AbstractUndertowClientServerHttp2Test extends AbstractBusClientSe
@Test
public void testBookWithHttp2() throws Exception {
final WebClient client = createWebClient("/web/bookstore/booknames", true);
- assertThat(WebClient.getConfig(client).getHttpConduit(), instanceOf(AsyncHTTPConduit.class));
+ assertTrue(WebClient.getConfig(client).getHttpConduit().getClass().getName().endsWith("AsyncHTTPConduit"));
final Response response = client
.accept("text/plain")
@@ -68,7 +68,7 @@ abstract class AbstractUndertowClientServerHttp2Test extends AbstractBusClientSe
@Test
public void testGetBookStreamHttp2() throws Exception {
final WebClient client = createWebClient("/web/bookstore/bookstream", true);
- assertThat(WebClient.getConfig(client).getHttpConduit(), instanceOf(AsyncHTTPConduit.class));
+ assertTrue(WebClient.getConfig(client).getHttpConduit().getClass().getName().endsWith("AsyncHTTPConduit"));
final Response response = client
.accept("application/json")
diff --git a/systests/transports/src/test/java/org/apache/cxf/systest/http_jetty/JettyDigestAuthTest.java b/systests/transports/src/test/java/org/apache/cxf/systest/http_jetty/JettyDigestAuthTest.java
index aef52d8121..fa10c66731 100644
--- a/systests/transports/src/test/java/org/apache/cxf/systest/http_jetty/JettyDigestAuthTest.java
+++ b/systests/transports/src/test/java/org/apache/cxf/systest/http_jetty/JettyDigestAuthTest.java
@@ -116,7 +116,7 @@ public class JettyDigestAuthTest extends AbstractClientServerTestBase {
HTTPClientPolicy client = new HTTPClientPolicy();
cond.setClient(client);
if (async) {
- if (cond instanceof AsyncHTTPConduit) {
+ if (cond.getClass().getName().endsWith("AsyncHTTPConduit")) {
UsernamePasswordCredentials creds = new UsernamePasswordCredentials("ffang", "pswd");
bp.getRequestContext().put(Credentials.class.getName(), creds);
bp.getRequestContext().put(AsyncHTTPConduit.USE_ASYNC, Boolean.TRUE);