In Java how to generate simple TimeoutException?
In this tutorial we will generate Timeout error calling Google.com
with simple 10 millisecond delay. CrunchifyGenerateTimeout is a public call in which we are calling google.com using connection.connect()
.
package crunchify.com.tutorial; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; /** * @author Crunchify.com * Program: How to Generate Simple TimeoutException for a specific IP in Java * Version: 1.0.1 * */ public class CrunchifyGenerateTimeout { public static void main(String[] args) throws Exception { new CrunchifyGenerateTimeout(); } public CrunchifyGenerateTimeout() { try { String myUrl = "https://google.com/"; // myUrl = URLEncoder.encode(myUrl, "UTF-8"); String results = crunchifyCallURL(myUrl); System.out.println(results); } catch (Exception e) { e.printStackTrace(); } } /** * Just return a result of URL call. * * @param crunchifyURL * @return * @throws Exception */ private String crunchifyCallURL(String crunchifyURL) throws Exception { URL crunchURL = null; BufferedReader crunchReader = null; StringBuilder crunchBuilder; try { // create the HttpURLConnection crunchURL = new URL(crunchifyURL); HttpURLConnection connection = (HttpURLConnection) crunchURL.openConnection(); // Let's make GET call connection.setRequestMethod("GET"); // Current Timeout 10 milliseconds - to generate Timeout Error connection.setReadTimeout(10); connection.connect(); // Simply read result and print line crunchReader = new BufferedReader(new InputStreamReader(connection.getInputStream())); crunchBuilder = new StringBuilder(); String eachLine = null; while ((eachLine = crunchReader.readLine()) != null) { crunchBuilder.append(eachLine + "\n"); } return crunchBuilder.toString(); } catch (Exception et) { et.printStackTrace(); throw et; } finally { if (crunchReader != null) { try { crunchReader.close(); } catch (IOException ioException) { ioException.printStackTrace(); } } } } }
Just run above program as Java application and you will be able to generate TimeoutException in Eclipse console.
If you increase ReadTimeout to 1000 milliseconds then you won’t be able to regenerate exception.
// connection.setReadTimeout(1000);
java.net.SocketTimeoutException: Read timed out at java.base/java.net.SocketInputStream.socketRead0(Native Method) at java.base/java.net.SocketInputStream.socketRead(SocketInputStream.java:116) at java.base/java.net.SocketInputStream.read(SocketInputStream.java:171) at java.base/java.net.SocketInputStream.read(SocketInputStream.java:141) at java.base/sun.security.ssl.SSLSocketInputRecord.read(SSLSocketInputRecord.java:425) at java.base/sun.security.ssl.SSLSocketInputRecord.decode(SSLSocketInputRecord.java:154) at java.base/sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1031) at java.base/sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:973) at java.base/sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1402) at java.base/sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1429) at java.base/sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1413) at java.base/sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:567) at java.base/sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185) at java.base/sun.net.www.protocol.https.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:163) at crunchify.com.tutorial.CrunchifyGenerateTimeout.doHttpUrlConnectionAction(CrunchifyGenerateTimeout.java:60) at crunchify.com.tutorial.CrunchifyGenerateTimeout.<init>(CrunchifyGenerateTimeout.java:29) at crunchify.com.tutorial.CrunchifyGenerateTimeout.main(CrunchifyGenerateTimeout.java:20) java.net.SocketTimeoutException: Read timed out at java.base/java.net.SocketInputStream.socketRead0(Native Method) at java.base/java.net.SocketInputStream.socketRead(SocketInputStream.java:116) at java.base/java.net.SocketInputStream.read(SocketInputStream.java:171) at java.base/java.net.SocketInputStream.read(SocketInputStream.java:141) at java.base/sun.security.ssl.SSLSocketInputRecord.read(SSLSocketInputRecord.java:425) at java.base/sun.security.ssl.SSLSocketInputRecord.decode(SSLSocketInputRecord.java:154) at java.base/sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1031) at java.base/sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:973) at java.base/sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1402) at java.base/sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1429) at java.base/sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1413) at java.base/sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:567) at java.base/sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185) at java.base/sun.net.www.protocol.https.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:163) at crunchify.com.tutorial.CrunchifyGenerateTimeout.doHttpUrlConnectionAction(CrunchifyGenerateTimeout.java:60) at crunchify.com.tutorial.CrunchifyGenerateTimeout.<init>(CrunchifyGenerateTimeout.java:29) at crunchify.com.tutorial.CrunchifyGenerateTimeout.main(CrunchifyGenerateTimeout.java:20)