Note that there are some explanatory texts on larger screens.

plurals
  1. POBest way to handle a DataInputStream.readFully method throwing an EOFException in my code
    primarykey
    data
    text
    <p>I am working with the DataInputStream.readFully method and trying to figure out the best way to handle the EOFException that is executed in this method. I am getting this log entry and could use some help trying to find out what the problem is as this exception does not appear to be handled and my problem is stuck in a loop with this same error. Any help/direction would be appreciated. Thank you. </p> <pre><code> TRACE | AccSysFNBBT-Socket-1-ReceiveQueuer-0 | com.sharpbancsystems.ATM.channel.ActiveSocket | 528 |2013-11-22 11:10:02,311| - Received 2 bytes: S INFO | AccSysFNBBT-Socket-1-ReceiveQueuer-0 | com.sharpbancsystems.ATM.channel.ActiveSocket | 455 |2013-11-22 11:10:02,312| - Received message, length is 2643 INFO | AccSysFNBBT-Socket-1-ReceiveQueuer-1 | com.sharpbancsystems.ATM.channel.ActiveSocket | 453 |2013-11-22 11:10:03,315| - Waiting for new message. WARN | AccSysFNBBT-Socket-1-ReceiveQueuer-0 | com.sharpbancsystems.ATM.channel.ActiveSocket | 483 |2013-11-22 11:10:03,315| - java.io.EOFException java.io.DataInputStream.readFully(Unknown Source) com.sharpbancsystems.ATM.channel.ActiveSocket.blockUntilGetMessageBytes(ActiveSocket.java:462) com.sharpbancsystems.ATM.channel.ActiveSocket.blockUntilReceiveMessage(ActiveSocket.java:266) com.sharpbancsystems.ATM.channel.ReceiveQueuer.run(ReceiveQueuer.java:113) java.lang.Thread.run(Unknown Source) </code></pre> <p>Here is my code where this is occurring:</p> <pre><code>private byte[] blockUntilGetMessageBytes(final Request request, final ProcessingTimer timer) throws ChannelException { byte[] data = null; int len; try { // have to synchronize on the dataInputStream because the class was designed to have more than one ReceiveQueuer using this method synchronized (dataInputStream) { LOGGER.info("Waiting for new message."); len = blockUntilGetMessageLength(); LOGGER.info("Received message, length is " + len); if (!owningChannel.shouldTerminate) { if (len &gt; 0 &amp;&amp; len &lt;= 15000) { request.setTimeStampDataFieldAsTimestamp(RequestConstants.SaveDataField.FromStartReceiveTMS); timer.start(); data = new byte[len]; dataInputStream.readFully(data, 0, len); LOGGER.trace("Full message: " + new String(data)); request.setTimeStampDataFieldAsTimestamp(RequestConstants.SaveDataField.FromFinishReceiveTMS); timer.finish(); request.setNanosecondDataField(RequestConstants.SaveDataField.FromReceiveNS, timer.nanos()); if (channelStats != null) { channelStats.addBytesReceived(data.length + 2); // include the 2 bytes for the length indicator channelStats.increaseReceivedMsgs(); } } else if (len == 0) { // Should probably log it, but continue LOGGER.info("Empty message received."); throw new ChannelException(getBankID(), "Empty message received"); } else { throw new ISOException("Invalid receive length: " + len + "."); } } } return data; } catch (final Exception ex) { LOGGER.warn(FormatData.fullStackTrace(ex)); throw new ChannelException(getChannelID().getNumericId(), this.getClass().getSimpleName().concat(".getMessageBytes()"), ex); } } protected int blockUntilGetMessageLength() { final byte[] b = new byte[2]; try { dataInputStream.readFully(b, 0, 2); } catch (final EOFException ex){ // ***** 20131022 MS - Per Shannon add getNeedReconnect() here. ***** getNeedReconnect().set(true); socket.isConnected(); // ***** 20131022 MS - Per Shannon this means there was a premature EOF. ***** if (this.shouldTerminate) { return 0; } else { synchronized (socket) { socket.notify(); } LOGGER.warn(FormatData.formatStack(ex)); } } catch (final IOException ex) { // ***** 20131022 MS - Per Shannon add getNeedReconnect() here. ***** getNeedReconnect().set(true); socket.isConnected(); if (this.shouldTerminate) { return 0; } else { synchronized (socket) { socket.notify(); } LOGGER.warn(FormatData.formatStack(ex)); return 0; } } LOGGER.trace("Received 2 bytes: " + new String(b)); return ((((b[0]) &amp; BYTEMASK) &lt;&lt; BYTESHIFT) | ((b[1]) &amp; BYTEMASK)); } </code></pre>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload