2016-04-22 1 views
4

Я ищу способ создания XWalkWebResourceResponse. Мое дело следующее.Как создать XWalkWebResourceResponse?

Я создаю пользовательский XWalkResourceClient клиент, который перехватит все сетевые запросы. Весь запрос, который должен быть перехвачен, возвращается как абстрактная оболочка - AppWebResourceResponse.

public final class CrossWebViewClient extends XWalkResourceClient { 
    // other fields and constructor 

    CrossWebResourceResponseMapper responseMapper; 

    @Override 
    public XWalkWebResourceResponse shouldInterceptLoadRequest(XWalkView view, XWalkWebResourceRequest request) { 
     AppWebResourceRequest mappedRequest = requestMapper.toGenericRequest(request); 
     AppWebResourceResponse interceptedResponse = requestInterceptor.shouldInterceptRequest(mappedRequest); 
     if (interceptedResponse == null) { 
      return super.shouldInterceptLoadRequest(view, request); 
     } 
     return responseMapper.toTargetResponse(interceptedResponse); 
    }  
} 

Последний шаг. Я должен приспособить AppWebResourceResponse to XWalkWebResourceResponse, и здесь у меня есть проблема.

public class CrossWebResourceResponseMapper implements AppWebResourceResponse.Mapper<XWalkWebResourceResponse> { 
    @Override 
    public XWalkWebResourceResponse toTargetResponse(final AppWebResourceResponse appResponse) { 
     String mimeType = appResponse.getMimeType(); 
     String encoding = appResponse.getEncoding(); 
     int statusCode = appResponse.getStatusCode(); 
     String reasonPhrase = appResponse.getReasonPhrase(); 
     Map<String, String> headers = appResponse.getResponseHeaders(); 
     InputStream data = appResponse.getData(); 


     // ??? how to create response object? 
     XWalkWebResourceResponse response; 

     response.setMimeType(mimeType); 
     response.setEncoding(encoding); 
     response.setStatusCodeAndReasonPhrase(statusCode, reasonPhrase); 
     response.setResponseHeaders(headers); 
     response.setData(data); 
     return response; 
    } 
} 

Согласно API имеет открытый конструктор new XWalkWebResourceResponse(bridge), потребляющий объект моста, хотя мне не удалось найти способ получить конкретный мост (org.xwalk.core.internal.XWalkWebResourceResponseBridge).

Где я могу найти XWalkWebResourceResponseBridge?

Спасибо, заранее.

Обновление на 25/04/2016:

По Xiaofeng можно создать XWalkWebResourceResponse объекта с помощью XWalkResourceClient объект.

public class XWalkWebResourceResponseMapper { 
    public XWalkWebResourceResponse toTargetResponse(XWalkResourceClient client, AppWebResourceResponse appResponse) { 
     String mimeType = appResponse.getMimeType(); 
     String encoding = appResponse.getEncoding(); 
     int statusCode = appResponse.getStatusCode(); 
     String reasonPhrase = appResponse.getReasonPhrase(); 
     Map<String, String> headers = appResponse.getResponseHeaders(); 
     InputStream data = appResponse.getData(); 

     return client.createXWalkWebResourceResponse(mimeType, encoding, data, statusCode, reasonPhrase, headers); 
    } 
} 

public final class CrossWebViewClient extends XWalkResourceClient { 
    @Override 
    public XWalkWebResourceResponse shouldInterceptLoadRequest(XWalkView view, XWalkWebResourceRequest request) { 
     AppWebResourceRequest mappedRequest = requestMapper.toGenericRequest(request); 
     AppWebResourceResponse interceptedResponse = requestInterceptor.shouldInterceptRequest(mappedRequest); 
     if (interceptedResponse == null) { 
      return super.shouldInterceptLoadRequest(view, request); 
     } 
     return responseMapper.toTargetResponse(this, interceptedResponse); 
    } 
} 

ответ

4

Спасибо, используя Crosswalk.

Чтобы создать XWalkWebResourceResponse, вы должны использовать createXWalkWebResourceResponse в XWalkResourceClient, см. here. Поскольку проблема внутреннего блока, он не может использовать общий конструктор для создания.

Вот пример о том, как использовать его: https://github.com/crosswalk-project/crosswalk/pull/3454/files

class MyResourceClient extends XWalkResourceClientInternal { 
MyResourceClient(XWalkViewInternal view) { 
    super(view); 
} 
@Override 
XWalkWebResourceResponseInternal shouldInterceptLoadRequest(XWalkViewInternal view, 
     XWalkWebResourceRequestInternal request) { 
    // Handle it here. 
    // Use createXWalkWebResourceResponse instead of "new XWalkWebResourceResponse" 
    // to create the response. 
    // Similar with before, there are two function to use: 
    // 1) createXWalkWebResourceResponse(String mimeType, String encoding, InputStream data) 
    // 2) createXWalkWebResourceResponse(String mimeType, String encoding, InputStream data, 
    //    int statusCode, String reasonPhrase, Map<String, String> responseHeaders) 
    ... 
} 

}

Вы также можете увидеть это в XWalkView API документ позже.

+2

Хотя эта ссылка может ответить на вопрос, лучше включить здесь основные части ответа и предоставить ссылку для справки. Ответные ссылки могут стать недействительными, если связанная страница изменится. - [Из обзора] (/ review/low-quality-posts/12132999) –

+0

@MayankPatel, спасибо, что вы напоминаете, но почему вы даете «не полезно»? – Xiaofeng

Смежные вопросы