Author: jleroux
Date: Tue Mar 16 16:00:32 2010 New Revision: 923828 URL: http://svn.apache.org/viewvc?rev=923828&view=rev Log: A patch from BJ Freeman "Datafile does not catch lack of delimiter if at end of line." (https://issues.apache.org/jira/browse/OFBIZ-3026) - OFBIZ-3026 There was an issue if the datafile did not have the last delimiter before the CRLF. This fixes it when there are not data for a field and also fixes the EOL. Modified: ofbiz/trunk/framework/datafile/src/org/ofbiz/datafile/Record.java ofbiz/trunk/framework/datafile/src/org/ofbiz/datafile/RecordIterator.java Modified: ofbiz/trunk/framework/datafile/src/org/ofbiz/datafile/Record.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/datafile/src/org/ofbiz/datafile/Record.java?rev=923828&r1=923827&r2=923828&view=diff ============================================================================== --- ofbiz/trunk/framework/datafile/src/org/ofbiz/datafile/Record.java (original) +++ ofbiz/trunk/framework/datafile/src/org/ofbiz/datafile/Record.java Tue Mar 16 16:00:32 2010 @@ -561,18 +561,24 @@ public class Record implements Serializa strVal = (String)modelField.defaultValue; } } else { - try { - strVal = st.nextToken(); - if (strVal.equals("" + delimiter)) { - strVal = null; - } else { - if (st.hasMoreTokens()) { - st.nextToken(); + //some input lines may be less than the header model. + if (st.hasMoreTokens()) { + try { + strVal = st.nextToken(); + if (strVal.equals("" + delimiter)) { + strVal = null; + } else { + if (st.hasMoreTokens()) { + st.nextToken(); + } } - } - } catch (NoSuchElementException nsee) { - throw new DataFileException("Field " + modelField.name + " could not be read from a line (" + lineNum + ") with only " + - line.length() + " chars.", nsee); + } catch (NoSuchElementException nsee) { + throw new DataFileException("Field " + modelField.name + " could not be read from a line (" + lineNum + ") with only " + + line.length() + " chars.", nsee); + } + } + else { //if input line is less than the header model then pad with null + strVal = null; } } try { Modified: ofbiz/trunk/framework/datafile/src/org/ofbiz/datafile/RecordIterator.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/datafile/src/org/ofbiz/datafile/RecordIterator.java?rev=923828&r1=923827&r2=923828&view=diff ============================================================================== --- ofbiz/trunk/framework/datafile/src/org/ofbiz/datafile/RecordIterator.java (original) +++ ofbiz/trunk/framework/datafile/src/org/ofbiz/datafile/RecordIterator.java Tue Mar 16 16:00:32 2010 @@ -26,6 +26,8 @@ import java.io.InputStreamReader; import java.net.URL; import java.util.Stack; +import org.ofbiz.base.util.Debug; + /** * Record Iterator for reading large files @@ -84,7 +86,6 @@ public class RecordIterator { this.nextRecord = null; boolean isFixedRecord = ModelDataFile.SEP_FIXED_RECORD.equals(modelDataFile.separatorStyle); - boolean isFixedLength = ModelDataFile.SEP_FIXED_LENGTH.equals(modelDataFile.separatorStyle); boolean isDelimited = ModelDataFile.SEP_DELIMITED.equals(modelDataFile.separatorStyle); // if (Debug.infoOn()) Debug.logInfo("[DataFile.readDataFile] separatorStyle is " + modelDataFile.separatorStyle + ", isFixedRecord: " + isFixedRecord, module); @@ -111,12 +112,14 @@ public class RecordIterator { } else { try { nextLine = br.readLine(); - } catch (IOException e) { + Debug.logInfo("br.readLine()=\"" + nextLine + "\"", module); + } catch (IOException e) { throw new DataFileException("Error reading line #" + nextLineNum + " from location: " + locationInfo, e); } } - if (nextLine != null && !(eof.equals(nextLine.substring(0,1)) && 1 == nextLine.length())) { + //if (nextLine != null && !(eof.equals(nextLine.substring(0,1)) && 1 == nextLine.length())) { + if (nextLine != null && !((nextLine.contains(eof) ) )) { nextLineNum++; ModelRecord modelRecord = findModelForLine(nextLine, nextLineNum, modelDataFile); if (isDelimited) { @@ -136,7 +139,8 @@ public class RecordIterator { } public boolean hasNext() { - return nextLine != null && !(eof.equals(nextLine.substring(0,1)) && 1 == nextLine.length()); + //return nextLine != null && !(eof.equals(nextLine.substring(0,1)) && 1 == nextLine.length()); + return nextLine != null && !((nextLine.contains(eof) ) ); } |
Free forum by Nabble | Edit this page |