Hi Balendra, Is it possible for you to post it as a patch file. Either upload it to the MM JIRA [1] or simply make a gist [2] or so.
[1] https://issues.apache.org/jira/browse/METAMODEL [2] https://gist.github.com/ 2013/8/2 Balendra Singh <[email protected]>: > Hi, > > In my case field type is date. SalesforceTable is returning ColumnType.DATE > for date, datetime and time. In SalesforceDataSet, it is using a datetime > format to format my date value field and was throwing exception. > > I made the following fixes for this issue - > > 1. In SalesforceDataSet.convert(Object value, ColumnType columnType) > > private Object convert(Object value, ColumnType columnType) { > if (value instanceof String && !columnType.isLiteral()) { > if (columnType.isBoolean()) { > return BooleanComparator.toBoolean(value); > } > if (columnType.isNumber()) { > return NumberComparator.toNumber(columnType.isNumber()); > } > if (columnType.isTimeBased()) { > > SimpleDateFormat format; > *if (columnType == ColumnType.DATE) {* > * > * > * format = new SimpleDateFormat(* > * SalesforceDataContext.SOQL_DATE_FORMAT_IN);* > * } else if (columnType == ColumnType.TIMESTAMP) {* > * format = new SimpleDateFormat(* > * SalesforceDataContext.SOQL_DATE_TIME_FORMAT_IN);* > * } else {* > * format = new SimpleDateFormat(* > * SalesforceDataContext.SOQL_TIME_FORMAT_IN);* > * }* > format.setTimeZone(SalesforceDataContext.SOQL_TIMEZONE); > try { > return format.parse(value.toString()); > } catch (ParseException e) { > throw new IllegalStateException( > "Unable to parse date/time value: " + value); > } > } > } > return value; > } > > > 2. In SalesforceDataContext added the following date format strings - > > public static final String SOQL_DATE_FORMAT_IN = "yyyy-MM-dd"; > public static final String SOQL_DATE_FORMAT_OUT = "yyyy-MM-dd"; > public static final String SOQL_DATE_TIME_FORMAT_IN = > "yyyy-MM-dd'T'HH:mm:ss.SSS"; > public static final String SOQL_DATE_TIME_FORMAT_OUT = > "yyyy-MM-dd'T'HH:mm:ssZZZ"; > public static final String SOQL_TIME_FORMAT_IN = "HH:mm:ss.SSS"; > public static final String SOQL_TIME_FORMAT_OUT = "HH:mm:ssZZZ"; > > 3. In SalesforceTable.toColumnType - I have returned specific date > datatypes > > > protected static ColumnType toColumnType(FieldType type) { > switch (type) { > case _boolean: > return ColumnType.BOOLEAN; > case _int: > return ColumnType.INTEGER; > case _double: > return ColumnType.DOUBLE; > * case date:* > * return ColumnType.DATE;* > * case datetime:* > * return ColumnType.TIMESTAMP;* > * case time:* > * return ColumnType.TIME;* > case string: > case email: > case url: > case phone: > case reference: > case textarea: > case encryptedstring: > case base64: > case currency: > case id: > case picklist: > return ColumnType.VARCHAR; > } > return ColumnType.OTHER; > } > > Please validate the code changes for the issue. > > > Thanks, > Balendra > > > > > > On 1 August 2013 18:41, Kasper Sørensen <[email protected]>wrote: > >> Strange, it seems that Salesforce sends dates back in not just a >> single, but various formats. Usually we have seen the format >> "yyyy-MM-dd'T'HH:mm:ss.SSS" (Represented by >> SalesforceDataContext.SOQL_DATE_FORMAT_IN). In your case it seems it >> simply sent a date in the format yyyy-MM-dd. Do you happen to know >> what field this failed for, and what datatype it had? Maybe this is a >> simple case that we need to distinguish in a more detailed manner for >> e.g. DATE vs DATETIME vs TIMESTAMP types... >> >> Anyways, the fix shouldn't be too hard. Simplest solution would be to >> simply make a "convertToDate(String)" method in SalesforceUtils and >> probe the incoming string to select a proper date format. >> >> 2013/8/1 Balendra Singh <[email protected]>: >> > While using metamodel in our project we found the following exception - >> > >> > In salesforce, if date value is provided then >> > SalesforceDataSet<http://eobjects.org/trac/wiki/SalesforceDataSet> is >> > throwing following exception while inserting this record to some other >> > database. >> > >> > *Stacktrace* >> > >> > Job execution FAILURE - Unable to parse date/time value: 2012-08-02 ( >> > IllegalStateException < >> http://eobjects.org/trac/wiki/IllegalStateException>) >> > - Exception stacktrace of failure condition: >> > java.lang.IllegalStateException< >> http://eobjects.org/trac/wiki/IllegalStateException>: >> > Unable to parse date/time value: 2012-08-02 at >> > org.eobjects.metamodel.salesforce.SalesforceDataSet< >> http://eobjects.org/trac/wiki/SalesforceDataSet>. >> > convert(SalesforceDataSet >> > <http://eobjects.org/trac/wiki/SalesforceDataSet>.java:119) >> > at org.eobjects.metamodel.salesforce.SalesforceDataSet< >> http://eobjects.org/trac/wiki/SalesforceDataSet> >> > .getRow(SalesforceDataSet >> > <http://eobjects.org/trac/wiki/SalesforceDataSet>.java:98) >> > at org.eobjects.analyzer.job.runner. >> > RowProcessingPublisher< >> http://eobjects.org/trac/wiki/RowProcessingPublisher> >> > .processRows(RowProcessingPublisher< >> http://eobjects.org/trac/wiki/RowProcessingPublisher>.java:295) >> > at org.eobjects.analyzer.job.tasks.RunRowProcessingPublisherTask?< >> http://eobjects.org/trac/wiki/RunRowProcessingPublisherTask> >> > .execute(RunRowProcessingPublisherTask?< >> http://eobjects.org/trac/wiki/RunRowProcessingPublisherTask> >> > .java:43) >> > >> > at org.eobjects.analyzer.job.concurrent.TaskRunnable< >> http://eobjects.org/trac/wiki/TaskRunnable> >> > .run(TaskRunnable <http://eobjects.org/trac/wiki/TaskRunnable>.java:63) >> at >> > java.util.concurrent.ThreadPoolExecutor< >> http://eobjects.org/trac/wiki/ThreadPoolExecutor> >> > $Worker.runTask(ThreadPoolExecutor< >> http://eobjects.org/trac/wiki/ThreadPoolExecutor>.java:886) >> > at java.util.concurrent.ThreadPoolExecutor< >> http://eobjects.org/trac/wiki/ThreadPoolExecutor> >> > $Worker.run(ThreadPoolExecutor?< >> http://eobjects.org/trac/wiki/ThreadPoolExecutor>.java:908) >> > at java.lang.Thread.run(Thread.java:662) >>
