Fix to allow the default statement creator to work with DBs that don't have parameter...
authorwassa <wassa@ab3bd59b-922f-494d-bb5f-6f0a3c29deca>
Mon, 11 Jul 2005 22:42:38 +0000 (22:42 +0000)
committerwassa <wassa@ab3bd59b-922f-494d-bb5f-6f0a3c29deca>
Mon, 11 Jul 2005 22:42:38 +0000 (22:42 +0000)
git-svn-id: https://subversion.switch.ch/svn/shibboleth/java-idp/trunk@1718 ab3bd59b-922f-494d-bb5f-6f0a3c29deca

src/edu/internet2/middleware/shibboleth/aa/attrresolv/provider/JDBCDataConnector.java

index df6b494..d78afc5 100644 (file)
@@ -617,6 +617,23 @@ class DefaultAE implements JDBCAttributeExtractor {
 class DefaultStatementCreator implements JDBCStatementCreator {
 
        private static Logger log = Logger.getLogger(DefaultStatementCreator.class.getName());
+       private int numberOfParams = 1;
+
+       public DefaultStatementCreator(Element conf) throws JDBCStatementCreatorException {
+
+               if (conf.getAttribute("numberOfParams") != null && !(conf.getAttribute("numberOfParams").equals(""))) {
+                       try {
+                               numberOfParams = Integer.parseInt(conf.getAttribute("numberOfParams"));
+                               if (numberOfParams < 0) { throw new NumberFormatException(
+                                               "The number of parameters cannot be less than 0."); }
+                       } catch (NumberFormatException nfe) {
+                               log.error("Statement Creator () attribute must be a positive integer: " + nfe);
+                               throw new JDBCStatementCreatorException("Statement Creator () attribute must be a positive integer.");
+                       }
+               }
+
+               log.debug("Parameters configured: " + numberOfParams);
+       }
 
        public void create(PreparedStatement preparedStatement, Principal principal, String requester, String responder,
                        Dependencies depends) throws JDBCStatementCreatorException {
@@ -624,14 +641,12 @@ class DefaultStatementCreator implements JDBCStatementCreator {
                log.debug("Creating prepared statement.  Substituting principal: (" + principal.getName() + ")");
                // Tried using ParameterMetaData to determine param count, but it fails, so...
                try {
-                       int i = 1;
-                       while (true) {
+                       for (int i = 1; i <= numberOfParams; i++) {
                                preparedStatement.setString(i++, principal.getName());
                        }
                } catch (SQLException e) {
                        // Ignore any additional exceptions, assume parameters simply don't exist.
                }
-
        }
 }