diff --git a/symmetric-core/src/main/java/org/jumpmind/symmetric/file/FileTriggerFileModifiedListener.java b/symmetric-core/src/main/java/org/jumpmind/symmetric/file/FileTriggerFileModifiedListener.java index aa8487774b..772f8a5a27 100644 --- a/symmetric-core/src/main/java/org/jumpmind/symmetric/file/FileTriggerFileModifiedListener.java +++ b/symmetric-core/src/main/java/org/jumpmind/symmetric/file/FileTriggerFileModifiedListener.java @@ -28,13 +28,11 @@ import org.apache.commons.io.monitor.FileAlterationListenerAdaptor; import org.apache.commons.io.monitor.FileAlterationObserver; import org.jumpmind.symmetric.ISymmetricEngine; -import org.jumpmind.symmetric.common.ParameterConstants; import org.jumpmind.symmetric.model.FileSnapshot; -import org.jumpmind.symmetric.model.FileTrigger; import org.jumpmind.symmetric.model.FileSnapshot.LastEventType; -import org.jumpmind.symmetric.model.ProcessInfo.Status; import org.jumpmind.symmetric.model.FileTriggerRouter; import org.jumpmind.symmetric.model.ProcessInfo; +import org.jumpmind.symmetric.model.ProcessInfo.Status; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/symmetric-core/src/main/java/org/jumpmind/symmetric/file/FileTriggerTracker.java b/symmetric-core/src/main/java/org/jumpmind/symmetric/file/FileTriggerTracker.java index 4008aa0f90..2bda7110d3 100644 --- a/symmetric-core/src/main/java/org/jumpmind/symmetric/file/FileTriggerTracker.java +++ b/symmetric-core/src/main/java/org/jumpmind/symmetric/file/FileTriggerTracker.java @@ -27,7 +27,6 @@ import org.apache.commons.io.monitor.FileAlterationObserver; import org.jumpmind.exception.IoException; import org.jumpmind.symmetric.ISymmetricEngine; -import org.jumpmind.symmetric.common.ParameterConstants; import org.jumpmind.symmetric.model.FileSnapshot; import org.jumpmind.symmetric.model.FileSnapshot.LastEventType; import org.jumpmind.symmetric.model.FileTriggerRouter; diff --git a/symmetric-core/src/main/java/org/jumpmind/symmetric/route/DBFRouter.java b/symmetric-core/src/main/java/org/jumpmind/symmetric/route/DBFRouter.java index 88f37a8489..d6897b3474 100644 --- a/symmetric-core/src/main/java/org/jumpmind/symmetric/route/DBFRouter.java +++ b/symmetric-core/src/main/java/org/jumpmind/symmetric/route/DBFRouter.java @@ -31,15 +31,16 @@ public List parse(File file, int lineNumber) { List rows = new ArrayList(); InputStream fileInputStream = null; + int currentLine = 1; try { boolean validateHeader = engine.getParameterService() .is(ParameterConstants.DBF_ROUTER_VALIDATE_HEADER, true); fileInputStream = Files.newInputStream(file.toPath(), StandardOpenOption.READ); dbfReader = new DBFReader(fileInputStream, validateHeader); - int currentLine = 1; + while (dbfReader.hasNextRecord()) { - StringBuffer row = new StringBuffer(); + StringBuilder row = new StringBuilder(); Object[] record = dbfReader.nextRecord(); if (currentLine > lineNumber) { for (int i = 0; i < record.length; i++) { @@ -53,7 +54,7 @@ public List parse(File file, int lineNumber) { } } catch (Exception e) { - log.error("Unable to parse DBF file " + file.getName(), e); + log.error("Unable to parse DBF file " + file.getName() + " line number " + currentLine, e); } finally { if (fileInputStream != null) { diff --git a/symmetric-core/src/main/java/org/jumpmind/symmetric/route/parse/DBFReader.java b/symmetric-core/src/main/java/org/jumpmind/symmetric/route/parse/DBFReader.java index fd8ccf1a92..ba53b96885 100644 --- a/symmetric-core/src/main/java/org/jumpmind/symmetric/route/parse/DBFReader.java +++ b/symmetric-core/src/main/java/org/jumpmind/symmetric/route/parse/DBFReader.java @@ -3,13 +3,19 @@ import java.io.*; import java.nio.charset.Charset; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + public class DBFReader { + static final Logger log = LoggerFactory.getLogger(DBFReader.class); + private DataInputStream stream; private DBFField fields[]; private byte nextRecord[]; private int nFieldCount; private boolean validate; + private int lineNumber; public DBFReader(String s, boolean validate) throws DBFException { stream = null; @@ -153,13 +159,19 @@ public boolean hasNextRecord() { public Object[] nextRecord() throws DBFException { if (!hasNextRecord()) throw new DBFException("No more records available."); + lineNumber++; Object aobj[] = new Object[nFieldCount]; int i = 1; for (int j = 0; j < aobj.length; j++) { int k = fields[j].getLength(); StringBuffer stringbuffer = new StringBuffer(k); stringbuffer.append(new String(nextRecord, i, k)); - aobj[j] = fields[j].parse(stringbuffer.toString()); + try { + aobj[j] = fields[j].parse(stringbuffer.toString()); + } catch (DBFException e) { + log.error("Failed to parse field " + (j+1) + " on line " + lineNumber + " with that had a value of " + stringbuffer); + throw e; + } i += fields[j].getLength(); }