原始java代码请求一个url时,没有设置连接超时和读超时,导致该连接一直存在。
-------------------------------------------------------------------------------------
"JobCourier0" prio=10 tid=0x0000000002776800 nid=0x5ef runnable [0x00007f6d5c4a3000]
java.lang.Thread.State: RUNNABLE
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(Unknown Source)
at java.net.SocketInputStream.read(Unknown Source)
at java.io.BufferedInputStream.fill(Unknown Source)
at java.io.BufferedInputStream.read1(Unknown Source)
at java.io.BufferedInputStream.read(Unknown Source)
- locked <0x000000077690aa60> (a java.io.BufferedInputStream)
at sun.net.www.http.HttpClient.parseHTTPHeader(Unknown Source)
at sun.net.www.http.HttpClient.parseHTTP(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
- locked <0x00000007768ffb98> (a sun.net.www.protocol.http.HttpURLConnection)
at SubProcess.Level2.SyncWithoutBlank.SyncWithoutBlankEncodeBlank.sendGet(SyncWithoutBlankEncodeBlank.java:57)
at SubProcess.Level2.SyncWithoutBlank.SyncWithoutBlankEncodeBlank.invoke(SyncWithoutBlankEncodeBlank.java:82)
at sun.reflect.GeneratedMethodAccessor107.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.tibco.ae.processapi.ui.javachooser.JavaClassMethodUtility.invokeMethod(Unknown Source)
at com.tibco.plugin.java.JavaActivity.eval(Unknown Source)
at com.tibco.pe.plugin.Activity.eval(Unknown Source)
at com.tibco.pe.core.TaskImpl.eval(Unknown Source)
at com.tibco.pe.core.Job.a(Unknown Source)
at com.tibco.pe.core.Job.k(Unknown Source)
at com.tibco.pe.core.JobDispatcher$JobCourier.a(Unknown Source)
at com.tibco.pe.core.JobDispatcher$JobCourier.run(Unknown Source)
-------------------------------------------------------------------------------------
源码如下:
package SubProcess.Level2.SyncWithoutBlank;
import java.util.*;
import java.io.*;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import javax.net.ssl.HttpsURLConnection;
public class SyncWithoutBlankEncodeBlank{
/****** START SET/GET METHOD, DO NOT MODIFY *****/
protected String url = "";
protected String USER_AGENT = "";
protected String responsestr = "";
public String geturl() {
return url;
}
public void seturl(String val) {
url = val;
}
public String getUSER_AGENT() {
return USER_AGENT;
}
public void setUSER_AGENT(String val) {
USER_AGENT = val;
}
public String getresponsestr() {
return responsestr;
}
public void setresponsestr(String val) {
responsestr = val;
}
/****** END SET/GET METHOD, DO NOT MODIFY *****/
public SyncWithoutBlankEncodeBlank() {
}
private String sendGet(String url) throws Exception {
URL obj = new URL(url);
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setConnectTimeout(15000);
con.setReadTimeout(15000);
//默认值我GET
con.setRequestMethod("GET");
//添加请求头
con.setRequestProperty("User-Agent", USER_AGENT);
// int responseCode = con.getResponseCode();
// System.out.println("\nsend GET to : " + url);
// System.out.println("Response Code : " + responseCode);
BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
//打印结果
// System.out.println("Response Code : " + responseCode + ". response : " + response.toString());
return response.toString();
}
public void invoke() throws Exception {
/* Available Variables: DO NOT MODIFY
In : String url
In : String USER_AGENT
Out : String responsestr
* Available Variables: DO NOT MODIFY *****/
//url=url.replace("https://","http://");
//found the reason that sendGet would not cause errors in queue, cause it would not take 4xx,5xx to be caught as errors
url=url.replaceAll(" ","%20");
responsestr=sendGet(url);}
}
网友评论