You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@weex.apache.org by ji...@apache.org on 2017/01/24 08:21:58 UTC

[47/50] [abbrv] incubator-weex git commit: Android feature urlconnection interceptor (#92)

Android feature urlconnection interceptor (#92)

* * [android] support inspection for default http adapter

* * [android] support inspection for default http adapter

* * [android] ignore inspector temporary

* + [android] add delegate

* * [android] for codacy

* * [android] add delegate interface

* * [android] do nothing

* * [android] add static nop delegate


Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/7b8cc461
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/7b8cc461
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/7b8cc461

Branch: refs/heads/master
Commit: 7b8cc46167cb695e6b707f95193194f9a1129290
Parents: dc1cbae
Author: moxun <fu...@foxmail.com>
Authored: Fri Dec 30 11:49:11 2016 +0800
Committer: sospartan <so...@gmail.com>
Committed: Wed Jan 11 17:43:15 2017 +0800

----------------------------------------------------------------------
 android/playground/app/build.gradle             |  3 +-
 .../extend/adapter/InterceptWXHttpAdapter.java  | 63 ++++++++++++++++++++
 .../weex/adapter/DefaultWXHttpAdapter.java      | 52 +++++++++++++++-
 3 files changed, 114 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/7b8cc461/android/playground/app/build.gradle
----------------------------------------------------------------------
diff --git a/android/playground/app/build.gradle b/android/playground/app/build.gradle
index a29a04b..535f7a9 100755
--- a/android/playground/app/build.gradle
+++ b/android/playground/app/build.gradle
@@ -105,7 +105,8 @@ dependencies {
     compile 'com.android.support:design:23.2.1'
     compile 'com.android.support:support-annotations:23.2.1'
     compile 'com.jakewharton.scalpel:scalpel:1.1.2'
+    compile 'com.taobao.android.weex_inspection:urlconnection_interceptor:1.0.0'
     //compile 'com.google.android.gms:play-services-appindexing:8.1.0'
     compile 'com.android.support.test.espresso:espresso-idling-resource:2.2.2'
-    compile 'com.taobao.android:weex_inspector:0.8.0.0@aar'
+    //compile 'com.taobao.android:weex_inspector:0.8.0.0@aar'
 }

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/7b8cc461/android/playground/app/src/main/java/com/alibaba/weex/extend/adapter/InterceptWXHttpAdapter.java
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/java/com/alibaba/weex/extend/adapter/InterceptWXHttpAdapter.java b/android/playground/app/src/main/java/com/alibaba/weex/extend/adapter/InterceptWXHttpAdapter.java
new file mode 100644
index 0000000..8bf929d
--- /dev/null
+++ b/android/playground/app/src/main/java/com/alibaba/weex/extend/adapter/InterceptWXHttpAdapter.java
@@ -0,0 +1,63 @@
+package com.alibaba.weex.extend.adapter;
+
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+
+import com.taobao.weex.adapter.DefaultWXHttpAdapter;
+import com.taobao.weex.urlconnection.ByteArrayRequestEntity;
+import com.taobao.weex.urlconnection.SimpleRequestEntity;
+import com.taobao.weex.urlconnection.WeexURLConnectionManager;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.HttpURLConnection;
+
+/**
+ * Created by moxun on 16/12/29.
+ */
+
+public class InterceptWXHttpAdapter extends DefaultWXHttpAdapter {
+
+    private IEventReporterDelegate eventReporterDelegate;
+
+    @NonNull
+    @Override
+    public IEventReporterDelegate getEventReporterDelegate() {
+        if (eventReporterDelegate == null) {
+            eventReporterDelegate = new IEventReporterDelegate() {
+
+                WeexURLConnectionManager manager = new WeexURLConnectionManager(null);
+
+                @Override
+                public void preConnect(HttpURLConnection connection, @Nullable String body) {
+                    SimpleRequestEntity requestEntity = null;
+                    if (body != null) {
+                        requestEntity = new ByteArrayRequestEntity(body.getBytes());
+                    }
+
+                    manager.preConnect(connection, requestEntity);
+                }
+
+                @Override
+                public void postConnect() {
+                    try {
+                        manager.postConnect();
+                    } catch (IOException e) {
+                        e.printStackTrace();
+                    }
+                }
+
+                @Override
+                public InputStream interpretResponseStream(@Nullable InputStream inputStream) {
+                    return manager.interpretResponseStream(inputStream);
+                }
+
+                @Override
+                public void httpExchangeFailed(IOException e) {
+                    manager.httpExchangeFailed(e);
+                }
+            };
+        }
+        return eventReporterDelegate;
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/7b8cc461/android/sdk/src/main/java/com/taobao/weex/adapter/DefaultWXHttpAdapter.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/adapter/DefaultWXHttpAdapter.java b/android/sdk/src/main/java/com/taobao/weex/adapter/DefaultWXHttpAdapter.java
index fac3053..0a20a33 100755
--- a/android/sdk/src/main/java/com/taobao/weex/adapter/DefaultWXHttpAdapter.java
+++ b/android/sdk/src/main/java/com/taobao/weex/adapter/DefaultWXHttpAdapter.java
@@ -204,13 +204,19 @@
  */
 package com.taobao.weex.adapter;
 
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
 import android.text.TextUtils;
 
 import com.taobao.weex.common.WXRequest;
 import com.taobao.weex.common.WXResponse;
-import com.taobao.weex.utils.WXLogUtils;
 
-import java.io.*;
+import java.io.BufferedReader;
+import java.io.ByteArrayOutputStream;
+import java.io.DataOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
 import java.net.HttpURLConnection;
 import java.net.URL;
 import java.util.List;
@@ -222,6 +228,7 @@ import java.util.concurrent.Executors;
 
 public class DefaultWXHttpAdapter implements IWXHttpAdapter {
 
+  private static final IEventReporterDelegate DEFAULT_DELEGATE = new NOPEventReportDelegate();
   private ExecutorService mExecutorService;
 
   private void execute(Runnable runnable){
@@ -240,17 +247,22 @@ public class DefaultWXHttpAdapter implements IWXHttpAdapter {
       @Override
       public void run() {
         WXResponse response = new WXResponse();
+        IEventReporterDelegate reporter = getEventReporterDelegate();
         try {
           HttpURLConnection connection = openConnection(request, listener);
+          reporter.preConnect(connection, request.body);
           Map<String,List<String>> headers = connection.getHeaderFields();
           int responseCode = connection.getResponseCode();
           if(listener != null){
             listener.onHeadersReceived(responseCode,headers);
           }
+          reporter.postConnect();
 
           response.statusCode = String.valueOf(responseCode);
           if (responseCode >= 200 && responseCode<=299) {
-            response.originalData = readInputStreamAsBytes(connection.getInputStream(), listener);
+            InputStream rawStream = connection.getInputStream();
+            rawStream = reporter.interpretResponseStream(rawStream);
+            response.originalData = readInputStreamAsBytes(rawStream, listener);
           } else {
             response.errorMsg = readInputStream(connection.getErrorStream(), listener);
           }
@@ -265,6 +277,9 @@ public class DefaultWXHttpAdapter implements IWXHttpAdapter {
           if(listener!=null){
             listener.onHttpFinish(response);
           }
+          if (e instanceof IOException) {
+            reporter.httpExchangeFailed((IOException) e);
+          }
         }
       }
     });
@@ -366,5 +381,36 @@ public class DefaultWXHttpAdapter implements IWXHttpAdapter {
     return (HttpURLConnection) url.openConnection();
   }
 
+  public @NonNull IEventReporterDelegate getEventReporterDelegate() {
+    return DEFAULT_DELEGATE;
+  }
+
+  public interface IEventReporterDelegate {
+    void preConnect(HttpURLConnection connection, @Nullable String body);
+    void postConnect();
+    InputStream interpretResponseStream(@Nullable InputStream inputStream);
+    void httpExchangeFailed(IOException e);
+  }
+
+  private static class NOPEventReportDelegate implements IEventReporterDelegate {
+    @Override
+    public void preConnect(HttpURLConnection connection, @Nullable String body) {
+      //do nothing
+    }
+
+    @Override
+    public void postConnect() {
+      //do nothing
+    }
+
+    @Override
+    public InputStream interpretResponseStream(@Nullable InputStream inputStream) {
+      return inputStream;
+    }
 
+    @Override
+    public void httpExchangeFailed(IOException e) {
+      //do nothing
+    }
+  }
 }