输入PCollection是http请求,它是一个有界数据集。我想在 ParDo 中进行异步 http 调用(Java),解析响应并将结果放入输出 PCollection 中。我的代码如下。获取异常如下。
我不明白原因。需要指导....
java.util.concurrent.CompletionException: java.lang.IllegalStateException: Can't add element ValueInGlobalWindow{value=streaming.mapserver.backfill.EnrichedPoint@2c59e, pane=PaneInfo.NO_FIRING} to committed bundle in PCollection Call Map Server With Rate Throttle/ParMultiDo(ProcessRequests).output [PCollection]
Run Code Online (Sandbox Code Playgroud)
代码:
public class ProcessRequestsFn extends DoFn<PreparedRequest,EnrichedPoint> {
private static AsyncHttpClient _HttpClientAsync;
private static ExecutorService _ExecutorService;
static{
AsyncHttpClientConfig cg = config()
.setKeepAlive(true)
.setDisableHttpsEndpointIdentificationAlgorithm(true)
.setUseInsecureTrustManager(true)
.addRequestFilter(new RateLimitedThrottleRequestFilter(100,1000))
.build();
_HttpClientAsync = asyncHttpClient(cg);
_ExecutorService = Executors.newCachedThreadPool();
}
@DoFn.ProcessElement
public void processElement(ProcessContext c) {
PreparedRequest request = c.element();
if(request == null)
return;
_HttpClientAsync.prepareGet((request.getRequest()))
.execute()
.toCompletableFuture()
.thenApply(response -> …Run Code Online (Sandbox Code Playgroud) 我正在寻找一种方法来返回我在loopJ AsyncHttpClient onFinish或onSuccess或onFailure中得到的响应.截至目前,我有这段代码:
**jsonParse.java file**
public class jsonParse {
static JSONObject jObj = null;
static String jsonString = "";
AsyncHttpClient client;
public JSONObject getJSONObj() {
RequestParams params;
params = new RequestParams();
params.add("username", "user");
params.add("password", "password");
client = new AsyncHttpClient();
client.post("http://example.com", params, new TextHttpResponseHandler() {
@Override
public void onSuccess(int i, Header[] headers, String response) {
jsonString = response;
Log.d("onSuccess: ", jsonString);
}
@Override
public void onFailure(int statusCode, Header[] headers, String response, Throwable e) {
if (statusCode == 401) {
jsonString = …Run Code Online (Sandbox Code Playgroud) 我使用android-async-http,并覆盖所有onSuccess和onFailure方法,但我收到错误:
onSuccess(int, Header[], JSONObject) was not overriden, but callback was received.
cz.msebera.android.httpclient.client.HttpResponseException: Not Found
Run Code Online (Sandbox Code Playgroud)
我只是想知道我真的覆盖了这个方法.我也得到了日志:onSuccess JSONObject:{"error":null,"success":false}
public static void querySecurityCode(String username) {
RequestParams params = new RequestParams();
params.put("username", username);
VStarRestClient.getClient().setEnableRedirects(true);
VStarRestClient.post(GET_SECURITY_CODE_URL, params, new JsonHttpResponseHandler(){
@Override
public void onSuccess(int statusCode, Header[] headers, JSONObject response) {
super.onSuccess(statusCode, headers, response);
Log.i("ws", "---->>onSuccess JSONObject:" + response);
}
@Override
public void onSuccess(int statusCode, Header[] headers, JSONArray response) {
super.onSuccess(statusCode, headers, response);
Log.i("ws", "---->>onSuccess JSONArray");
}
@Override
public …Run Code Online (Sandbox Code Playgroud) 如果我ListenableFuture<X>在使用the调用外部系统时得到一个AsyncHttpClient,并且我get()立即调用- 当前线程是否会等到异步线程准备好响应?如果这是真的,使用的好处是AsyncHttpClient什么?
AsyncHttpClient httpClient = new AsyncHttpClient();
ListenableFuture<Response> futureResponse = httpClient.execute(url, payload, headers);
// If this is immediately on next line, am I getting any benefit?
Response response = futureResponse.get();
Run Code Online (Sandbox Code Playgroud) 我正在尝试编写一个使用com.loopj.android.http.AsyncHttpClient的Android应用程序.虽然几年前我写了一个Android应用程序,但我很生疏,所以请对我温柔!
在我的应用程序中,我做了一个get,并且没有调用任何回调虚拟方法.为了简化并确保它不是我的应用程序,我基于SDK附带的SupportAppNavigation项目创建了一个新项目.我修改了onCreate代码如下:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.i("com.trumphurst", "Creating AsyncHttpClient");
AsyncHttpClient client = new AsyncHttpClient();
client.setTimeout(5000);
Log.i("com.trumphurst", "Getting www.google.com");
client.get("http://www.google.com", new AsyncHttpResponseHandler() {
@Override
public void onSuccess(String response) {
Log.i("com.trumphurst", "Success");
}
@Override
public void onFailure(Throwable error, String content) {
Log.i("com.trumphurst", "Failure");
}
});
setListAdapter(new SampleAdapter(querySampleActivities()));
}
Run Code Online (Sandbox Code Playgroud)
(请注意,这是我对SDK附带的示例应用程序所做的唯一代码更改.)
我在调试器下启动了应用程序,并监视了logcat输出.我看到"Creating AsyncHttpClient"和"Getting www.google.com",然后什么也没看到.
我已经为清单添加了一些权限 - 它现在开始了:
<manifest android:versionCode="1"
android:versionName="1"
xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.android.support.appnavigation">
<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="15" />
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<application android:label="@string/app_name">
<activity android:name=".app.AppNavHomeActivity"
android:label="@string/app_nav_home_label">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" …Run Code Online (Sandbox Code Playgroud)