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
+ }
+ }
}