I've had a look into this and I can't see anything related to Groovy that is making this necessary, it appears to be entirely a postgresql issue.
When executing a prepared statement postgresql seems to require that the parameter list sql types match the column types. So the problem isn't that we are passing in a string but that we are setting the sql type to character varying by using PreparedStatement.setString(). Here's a patch that fixes the issue but I'm not really confident enough to commit it, it would be great to get some comments from people who know more about this kind of thing: Index: framework/entity/src/org/ofbiz/entity/jdbc/SQLProcessor.java =================================================================== --- framework/entity/src/org/ofbiz/entity/jdbc/SQLProcessor.java (revision 703572) +++ framework/entity/src/org/ofbiz/entity/jdbc/SQLProcessor.java (working copy) @@ -592,6 +592,22 @@ * * @throws SQLException */ + public void setValueTimestampString(String field) throws SQLException { + if (field != null) { + _ps.setObject(_ind, field, Types.TIMESTAMP); + } else { + _ps.setNull(_ind, Types.TIMESTAMP); + } + _ind++; + } + + /** + * Set the next binding variable of the currently active prepared statement. + * + * @param field + * + * @throws SQLException + */ public void setValue(java.sql.Time field) throws SQLException { if (field != null) { _ps.setTime(_ind, field); Index: framework/entity/src/org/ofbiz/entity/jdbc/SqlJdbcUtil.java =================================================================== --- framework/entity/src/org/ofbiz/entity/jdbc/SqlJdbcUtil.java (revision 703572) +++ framework/entity/src/org/ofbiz/entity/jdbc/SqlJdbcUtil.java (working copy) @@ -731,6 +731,9 @@ fieldClassName = "byte[]"; } + if ("java.sql.Timestamp".equals(fieldType)) { + fieldClassName = fieldType; + } if (Debug.verboseOn()) Debug.logVerbose("type of field " + entityName + "." + modelField.getName() + " is " + fieldClassName + ", was expecting " + mft.getJavaType() + "; this may " + "indicate an error in the configuration or in the class, and may result " + @@ -749,7 +752,11 @@ break; case 2: - sqlP.setValue((java.sql.Timestamp) fieldValue); + if (fieldValue instanceof String) { + sqlP.setValueTimestampString((String) fieldValue); + } else { + sqlP.setValue((java.sql.Timestamp) fieldValue); + } break; case 3: Regards Scott 2008/10/13 Jacques Le Roux <[EMAIL PROTECTED]>: > Done in revision: 703816 > It was not possible for PackingSlip.groovy and > FindInventoryEventPlan.groovy. Because there the date string is build > dynamically in the Groovy file > > Jacques > > From: "Jacques Le Roux" <[EMAIL PROTECTED]> >> >> Adrian, >> >> Yes good idea indeed, I will do that >> >> Jacques >> >> From: "Adrian Crum" <[EMAIL PROTECTED]> >>> >>> Jacques, >>> >>> Instead of modifying the groovy files, try specifying the data type in >>> the screen widget. >>> >>> Example in ReportFinancialSummaryScreens.xml: >>> >>> <set field="fromDate" from-field="parameters.fromDate" type="Timestamp"/> >>> <set field="thruDate" from-field="parameters.thruDate" type="Timestamp"/> >>> <script >>> location="component://accounting/webapp/accounting/WEB-INF/actions/reports/TransactionTotals.groovy"/> >>> >>> -Adrian > >