I have a simple code that fetches a XML file from the web. More specific, a XML file with exchange rates from a norwegian bank. The problem is, it only works sometimes. Usually, it never works the first time.
After some testing, I'm pretty sure its crashes on InputStreamReader(url.openStream())
. But as a said, not every time.
So, is it any better way to to this, and ensure that it fetches the XML file correctly
All help is appriciated.
public class xmlReader { private static Properties intProps; public static void main(String[] args) { intProps = new Properties(); intProps.setProperty("SOURCEURL", "https://www.dnb.no/portalfront/datafiles/miscellaneous/csv/kursliste_ws.xml"); intProps.setProperty("SOURCEDIR", "C:\\Users\\"); intProps.setProperty("SOURCEFILE", "EXCHANGERATES_#YYYYMMDD#_#U#.xml"); fetchURL(); } private static void fetchURL() { try { URL url = new URL(intProps.getProperty("SOURCEURL")); BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream())); FileOutputStream fout = new FileOutputStream(intProps.getProperty("SOURCEDIR") + intProps.getProperty("SOURCEFILE")); String inputLine; while ((inputLine = in.readLine()) != null) { System.out.println("Line: " + inputLine); fout.write(inputLine.getBytes()); } fout.close(); in.close(); } catch(Exception e) { e.printStackTrace(); // writeLog("Error fetching from URL: " + e.getMessage()); }
}
The error is as following:
java.net.SocketException: Connection reset at java.net.SocketInputStream.read(Unknown Source) at java.net.SocketInputStream.read(Unknown Source) at sun.security.ssl.InputRecord.readFully(Unknown Source) at sun.security.ssl.InputRecord.read(Unknown Source) at sun.security.ssl.SSLSocketImpl.readRecord(Unknown Source) at sun.security.ssl.SSLSocketImpl.waitForClose(Unknown Source) at sun.security.ssl.HandshakeOutStream.flush(Unknown Source) at sun.security.ssl.Handshaker.kickstart(Unknown Source) at sun.security.ssl.SSLSocketImpl.kickstartHandshake(Unknown Source) at sun.security.ssl.SSLSocketImpl.performInitialHandshake(Unknown Source) at sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source) at sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source) at sun.net.www.protocol.https.HttpsClient.afterConnect(Unknown Source) at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(Unknown Source) at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(Unknown Source) at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source) at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(Unknown Source)