You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ro...@apache.org on 2019/06/07 15:19:28 UTC

[sling-whiteboard] 07/07: Launcher cleanup

This is an automated email from the ASF dual-hosted git repository.

rombert pushed a commit to branch url-connection-agent-cleanups
in repository https://gitbox.apache.org/repos/asf/sling-whiteboard.git

commit e3688776c1f55b825d2a700adb752cc41a8aa574
Author: Robert Munteanu <ro...@apache.org>
AuthorDate: Fri Jun 7 17:18:55 2019 +0200

    Launcher cleanup
---
 .../apache/sling/uca/impl/HttpClientLauncher.java  | 164 +++++++++++++--------
 1 file changed, 99 insertions(+), 65 deletions(-)

diff --git a/url-connection-agent/src/test/java/org/apache/sling/uca/impl/HttpClientLauncher.java b/url-connection-agent/src/test/java/org/apache/sling/uca/impl/HttpClientLauncher.java
index 9d8ca73..bce7dda 100644
--- a/url-connection-agent/src/test/java/org/apache/sling/uca/impl/HttpClientLauncher.java
+++ b/url-connection-agent/src/test/java/org/apache/sling/uca/impl/HttpClientLauncher.java
@@ -24,11 +24,13 @@ import java.net.MalformedURLException;
 import java.net.URL;
 import java.net.URLConnection;
 import java.util.Date;
+import java.util.EnumSet;
+import java.util.function.Consumer;
+import java.util.stream.Collectors;
 
 import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler;
 import org.apache.commons.httpclient.Header;
 import org.apache.commons.httpclient.HttpClient;
-import org.apache.commons.httpclient.HttpException;
 import org.apache.commons.httpclient.HttpMethod;
 import org.apache.commons.httpclient.methods.GetMethod;
 import org.apache.commons.httpclient.params.HttpClientParams;
@@ -45,92 +47,124 @@ import org.apache.http.util.EntityUtils;
  */
 public class HttpClientLauncher {
     
-    // TODO - write help messages with the values from this enum
     public enum ClientType {
-        JavaNet, HC3, HC4
+        JavaNet(HttpClientLauncher::runUsingJavaNet), 
+        HC3(HttpClientLauncher::runUsingHttpClient3),
+        HC4(HttpClientLauncher::runUsingHttpClient4);
+        
+        private final Consumer<String> consumer;
+
+        ClientType(Consumer<String> consumer) {
+            this.consumer = consumer;
+        }
+        
+        public Consumer<String> getConsumer() {
+            return consumer;
+        }
+        
+        static String pipeSeparatedString() {
+            return EnumSet.allOf(ClientType.class).stream()
+                .map(ClientType::toString)
+                .collect(Collectors.joining("|"));
+        }
+        
+        static ClientType fromString(String value) {
+            return EnumSet.allOf(ClientType.class).stream()
+                .filter( e -> e.toString().equals(value) )
+                .findFirst()
+                .orElse(null);
+        }
     }
 
     public static void main(String[] args) throws MalformedURLException, IOException {
         
         if ( args.length != 2 )
-            throw new IllegalArgumentException("Usage: java -cp ... " + HttpClientLauncher.class.getName() + " <URL> JavaNet|HC3|HC4");
+            throw new IllegalArgumentException(usage());
+        
+        ClientType type = ClientType.fromString(args[1]);
+        if ( type == null )
+            throw new IllegalArgumentException(usage());
         
-        System.out.println(new Date() + " [WEB] Executing request via " + args[1]);
+        System.out.println("[WEB] Executing request via " + type);
+        
+        type.consumer.accept(args[0]);
+    }
 
-        switch ( args[1] ) {
-            case "JavaNet":
-                runUsingJavaNet(args[0]);
-                break;
-            case "HC3":
-                runUsingHttpClient3(args[0]);
-                break;
-            case "HC4":
-                runUsingHttpClient4(args[0]);
-                break;
-            default:
-                throw new IllegalArgumentException("Usage: java -cp ... " + HttpClientLauncher.class.getName() + " <URL> JavaNet|HC3|HC4");
-        }
+    private static String usage() {
+        return "Usage: java -cp ... " + HttpClientLauncher.class.getName() + " <URL> " + ClientType.pipeSeparatedString();
     }
 
-    private static void runUsingJavaNet(String targetUrl) throws MalformedURLException, IOException {
-        URLConnection con = new URL(targetUrl).openConnection();
-        System.out.println("Connection type is " + con);
-        
-        try (InputStream in = con.getInputStream();
-                InputStreamReader isr = new InputStreamReader(in);
-                BufferedReader br = new BufferedReader(isr)) {
-            String line;
-            while ( (line = br.readLine()) != null )
-                System.out.println("[WEB] " + line);
+    private static void runUsingJavaNet(String targetUrl)  {
+        try {
+            URLConnection con = new URL(targetUrl).openConnection();
+            System.out.println("Connection type is " + con);
+            
+            try (InputStream in = con.getInputStream();
+                    InputStreamReader isr = new InputStreamReader(in);
+                    BufferedReader br = new BufferedReader(isr)) {
+                String line;
+                while ( (line = br.readLine()) != null )
+                    System.out.println("[WEB] " + line);
+            }
+        } catch (IOException e) {
+            throw new RuntimeException(e);
         }
     }
 
 
-    private static void runUsingHttpClient3(String targetUrl) throws HttpException, IOException {
-        HttpClient client = new HttpClient();
-        // disable retries, to make sure that we get equivalent behaviour with other implementations
-        client.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler(0, false));
-        HttpMethod get = new GetMethod(targetUrl);
-        System.out.format("Connection timeouts: connect: %d, so: %s%n", 
-                client.getHttpConnectionManager().getParams().getConnectionTimeout(),
-                client.getHttpConnectionManager().getParams().getSoTimeout());
-        System.out.format("Client so timeout: %d (raw: %s) %n", client.getParams().getSoTimeout(), 
-                client.getParams().getParameter(HttpClientParams.SO_TIMEOUT));
-        client.executeMethod(get);
-        
-        System.out.println(new Date() + " [WEB] " + get.getStatusLine());
-        
-        for ( Header header : get.getResponseHeaders() )
-            System.out.print(new Date() + " [WEB] " + header.toExternalForm());
-        
-        
-        try (InputStream in = get.getResponseBodyAsStream()) {
-            if (in != null) {
-                try (InputStreamReader isr = new InputStreamReader(in); 
-                        BufferedReader br = new BufferedReader(isr)) {
-                    String line;
-                    while ((line = br.readLine()) != null)
-                        System.out.println(new Date() + " [WEB] " + line);
+    private static void runUsingHttpClient3(String targetUrl) {
+        try {
+            HttpClient client = new HttpClient();
+            // disable retries, to make sure that we get equivalent behaviour with other implementations
+            client.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler(0, false));
+            HttpMethod get = new GetMethod(targetUrl);
+            System.out.format("Connection timeouts: connect: %d, so: %s%n", 
+                    client.getHttpConnectionManager().getParams().getConnectionTimeout(),
+                    client.getHttpConnectionManager().getParams().getSoTimeout());
+            System.out.format("Client so timeout: %d (raw: %s) %n", client.getParams().getSoTimeout(), 
+                    client.getParams().getParameter(HttpClientParams.SO_TIMEOUT));
+            client.executeMethod(get);
+            
+            System.out.println(new Date() + " [WEB] " + get.getStatusLine());
+            
+            for ( Header header : get.getResponseHeaders() )
+                System.out.print(new Date() + " [WEB] " + header.toExternalForm());
+            
+            
+            try (InputStream in = get.getResponseBodyAsStream()) {
+                if (in != null) {
+                    try (InputStreamReader isr = new InputStreamReader(in); 
+                            BufferedReader br = new BufferedReader(isr)) {
+                        String line;
+                        while ((line = br.readLine()) != null)
+                            System.out.println(new Date() + " [WEB] " + line);
 
+                    }
                 }
             }
+        } catch (IOException e) {
+            throw new RuntimeException(e);
         }
     }
     
-    private static void runUsingHttpClient4(String targetUrl) throws IOException {
-        // disable retries, to make sure that we get equivalent behaviour with other implementations
-        try ( CloseableHttpClient client = HttpClients.custom().disableAutomaticRetries().build() ) {
-            HttpGet get = new HttpGet(targetUrl);
-            try ( CloseableHttpResponse response = client.execute(get)) {
-                System.out.println("[WEB] " + response.getStatusLine());
-                for ( org.apache.http.Header header : response.getAllHeaders() )
-                    System.out.println("[WEB] " + header);
+    private static void runUsingHttpClient4(String targetUrl) {
+        try {
+            // disable retries, to make sure that we get equivalent behaviour with other implementations
+            try ( CloseableHttpClient client = HttpClients.custom().disableAutomaticRetries().build() ) {
+                HttpGet get = new HttpGet(targetUrl);
+                try ( CloseableHttpResponse response = client.execute(get)) {
+                    System.out.println("[WEB] " + response.getStatusLine());
+                    for ( org.apache.http.Header header : response.getAllHeaders() )
+                        System.out.println("[WEB] " + header);
+                    
+                    HttpEntity entity = response.getEntity();
+                    // TODO - print response body
+                    EntityUtils.consume(entity);
+                }
                 
-                HttpEntity entity = response.getEntity();
-                // TODO - print response body
-                EntityUtils.consume(entity);
             }
-            
+        } catch (IOException e) {
+            throw new RuntimeException(e);
         }
     }