Author: cbegin
Date: Thu Jun  4 04:53:14 2009
New Revision: 781652

URL: http://svn.apache.org/viewvc?rev=781652&view=rev
Log:
Fixed building of mapper config with minimal (or even no) elements.  Fixed 
spelling error in BuilderException.java

Added:
    
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/BuilderException.java
      - copied, changed from r780275, 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/BulderException.java
    
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/builder/MinimalMapperConfig.xml
    
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/builder/XmlConfigBuilderTest.java
Removed:
    
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/BulderException.java
Modified:
    
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/BaseBuilder.java
    
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/MapperBuilderAssistant.java
    
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/SqlSourceBuilder.java
    
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/annotation/MapperAnnotationBuilder.java
    
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/annotation/ProviderSqlSource.java
    
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/xml/XMLConfigBuilder.java
    
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/xml/XMLStatementBuilder.java
    
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/xml/dynamic/ExpressionEvaluator.java
    
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/xml/ibatis-3-config.dtd
    
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/parsing/XPathParser.java
    
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/exceptions/GeneralExceptionsTest.java

Modified: 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/BaseBuilder.java
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/BaseBuilder.java?rev=781652&r1=781651&r2=781652&view=diff
==============================================================================
--- 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/BaseBuilder.java
 (original)
+++ 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/BaseBuilder.java
 Thu Jun  4 04:53:14 2009
@@ -35,7 +35,7 @@
     try {
       return JdbcType.valueOf(resolveAlias(alias));
     } catch (IllegalArgumentException e) {
-      throw new BulderException("Error resolving JdbcType. Cause: " + e, e);
+      throw new BuilderException("Error resolving JdbcType. Cause: " + e, e);
     }
   }
 
@@ -44,7 +44,7 @@
     try {
       return ResultSetType.valueOf(resolveAlias(alias));
     } catch (IllegalArgumentException e) {
-      throw new BulderException("Error resolving ResultSetType. Cause: " + e, 
e);
+      throw new BuilderException("Error resolving ResultSetType. Cause: " + e, 
e);
     }
   }
 
@@ -53,7 +53,7 @@
     try {
       return ParameterMode.valueOf(resolveAlias(alias));
     } catch (IllegalArgumentException e) {
-      throw new BulderException("Error resolving ParameterMode. Cause: " + e, 
e);
+      throw new BuilderException("Error resolving ParameterMode. Cause: " + e, 
e);
     }
   }
 
@@ -62,7 +62,7 @@
     try {
       return Class.forName(resolveAlias(alias));
     } catch (ClassNotFoundException e) {
-      throw new BulderException("Error resolving class . Cause: " + e, e);
+      throw new BuilderException("Error resolving class . Cause: " + e, e);
     }
   }
 
@@ -72,7 +72,7 @@
       Class type = resolveClass(alias);
       return type.newInstance();
     } catch (Exception e) {
-      throw new BulderException("Error instantiating class. Cause: " + e, e);
+      throw new BuilderException("Error instantiating class. Cause: " + e, e);
     }
   }
 
@@ -81,7 +81,7 @@
     try {
       return type.newInstance();
     } catch (Exception e) {
-      throw new BulderException("Error instantiating class. Cause: " + e, e);
+      throw new BuilderException("Error instantiating class. Cause: " + e, e);
     }
   }
 

Copied: 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/BuilderException.java
 (from r780275, 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/BulderException.java)
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/BuilderException.java?p2=ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/BuilderException.java&p1=ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/BulderException.java&r1=780275&r2=781652&rev=781652&view=diff
==============================================================================
--- 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/BulderException.java
 (original)
+++ 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/BuilderException.java
 Thu Jun  4 04:53:14 2009
@@ -2,21 +2,21 @@
 
 import org.apache.ibatis.exceptions.IbatisException;
 
-public class BulderException extends IbatisException {
+public class BuilderException extends IbatisException {
 
-  public BulderException() {
+  public BuilderException() {
     super();
   }
 
-  public BulderException(String message) {
+  public BuilderException(String message) {
     super(message);
   }
 
-  public BulderException(String message, Throwable cause) {
+  public BuilderException(String message, Throwable cause) {
     super(message, cause);
   }
 
-  public BulderException(Throwable cause) {
+  public BuilderException(Throwable cause) {
     super(cause);
   }
 }

Modified: 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/MapperBuilderAssistant.java
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/MapperBuilderAssistant.java?rev=781652&r1=781651&r2=781652&view=diff
==============================================================================
--- 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/MapperBuilderAssistant.java
 (original)
+++ 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/MapperBuilderAssistant.java
 Thu Jun  4 04:53:14 2009
@@ -32,7 +32,7 @@
       this.currentNamespace = currentNamespace;
     }
     if (this.currentNamespace == null) {
-      throw new BulderException("The mapper element requires a namespace 
attribute to be specified.");
+      throw new BuilderException("The mapper element requires a namespace 
attribute to be specified.");
     }
   }
 
@@ -44,11 +44,11 @@
 
   public Cache useCacheRef(String namespace) {
     if (namespace == null) {
-      throw new BulderException("cache-ref element requires a namespace 
attribute.");
+      throw new BuilderException("cache-ref element requires a namespace 
attribute.");
     }
     Cache cache = configuration.getCache(namespace);
     if (cache == null) {
-      throw new BulderException("No cache for namespace '" + namespace + "' 
could be found.");
+      throw new BuilderException("No cache for namespace '" + namespace + "' 
could be found.");
     }
     currentCache = cache;
     return cache;
@@ -318,7 +318,7 @@
       }
     }
     if (javaType == null) {
-      throw new BulderException("Could not determine javaType for result 
property " + property + " using javaType " + javaType);
+      throw new BuilderException("Could not determine javaType for result 
property " + property + " using javaType " + javaType);
     }
     return javaType;
   }
@@ -329,7 +329,7 @@
       javaType = metaResultType.getGetterType(property);
     }
     if (javaType == null) {
-      throw new BulderException("Could not determine javaType for result.  
Specify property or javaType attribute.");
+      throw new BuilderException("Could not determine javaType for result.  
Specify property or javaType attribute.");
     }
     return javaType;
   }

Modified: 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/SqlSourceBuilder.java
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/SqlSourceBuilder.java?rev=781652&r1=781651&r2=781652&view=diff
==============================================================================
--- 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/SqlSourceBuilder.java
 (original)
+++ 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/SqlSourceBuilder.java
 Thu Jun  4 04:53:14 2009
@@ -71,7 +71,7 @@
             builder.typeHandler((TypeHandler) resolveInstance(value));
           }
         } else {
-          throw new BulderException("Improper inline parameter map format.  
Should be: #{propName,attr1=val1,attr2=val2}");
+          throw new BuilderException("Improper inline parameter map format.  
Should be: #{propName,attr1=val1,attr2=val2}");
         }
       }
       return builder.build();

Modified: 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/annotation/MapperAnnotationBuilder.java
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/annotation/MapperAnnotationBuilder.java?rev=781652&r1=781651&r2=781652&view=diff
==============================================================================
--- 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/annotation/MapperAnnotationBuilder.java
 (original)
+++ 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/annotation/MapperAnnotationBuilder.java
 Thu Jun  4 04:53:14 2009
@@ -240,7 +240,7 @@
       }
       return null;
     } catch (Exception e) {
-      throw new BulderException("Could not find value method on SQL 
annotation.  Cause: " + e, e);
+      throw new BuilderException("Could not find value method on SQL 
annotation.  Cause: " + e, e);
     }
   }
 

Modified: 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/annotation/ProviderSqlSource.java
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/annotation/ProviderSqlSource.java?rev=781652&r1=781651&r2=781652&view=diff
==============================================================================
--- 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/annotation/ProviderSqlSource.java
 (original)
+++ 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/annotation/ProviderSqlSource.java
 Thu Jun  4 04:53:14 2009
@@ -28,7 +28,7 @@
         }
       }
     } catch (Exception e) {
-      throw new BulderException("Error creating SqlSource for SqlProvider.  
Cause: " + e, e);
+      throw new BuilderException("Error creating SqlSource for SqlProvider.  
Cause: " + e, e);
     }
   }
 
@@ -48,7 +48,7 @@
       Class parameterType = parameterObject == null ? Object.class : 
parameterObject.getClass();
       return sqlSourceParser.parse(sql, parameterType);
     } catch (Exception e) {
-      throw new BulderException("Error invoking SqlProvider method ("
+      throw new BuilderException("Error invoking SqlProvider method ("
           + providerType.getName() + "." + providerMethod.getName()
           + ").  Cause: " + e, e);
     }

Modified: 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/xml/XMLConfigBuilder.java
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/xml/XMLConfigBuilder.java?rev=781652&r1=781651&r2=781652&view=diff
==============================================================================
--- 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/xml/XMLConfigBuilder.java
 (original)
+++ 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/xml/XMLConfigBuilder.java
 Thu Jun  4 04:53:14 2009
@@ -34,12 +34,12 @@
     this.configuration.setVariables(props);
     this.parsed = false;
     this.environment = environment;
-    this.parser = new XPathParser(reader,true, new 
XMLMapperEntityResolver(),props);
+    this.parser = new XPathParser(reader, true, new XMLMapperEntityResolver(), 
props);
   }
 
   public Configuration parse() {
     if (parsed) {
-      throw new BulderException("Each MapperConfigParser can only be used 
once.");
+      throw new BuilderException("Each MapperConfigParser can only be used 
once.");
     }
     parsed = true;
     parseConfiguration(parser.evalNode("/configuration"));
@@ -57,152 +57,174 @@
       typeHandlerElement(root.evalNode("typeHandlers"));
       mapperElement(root.evalNode("mappers"));
     } catch (Exception e) {
-      throw new BulderException("Error parsing SQL Mapper Configuration. 
Cause: " + e, e);
+      throw new BuilderException("Error parsing SQL Mapper Configuration. 
Cause: " + e, e);
     }
   }
 
   private void typeAliasesElement(XNode parent) {
-    for (XNode child : parent.getChildren()) {
-      String alias = child.getStringAttribute("alias");
-      String type = child.getStringAttribute("type");
-      typeAliasRegistry.registerAlias(alias, type);
+    if (parent != null) {
+      for (XNode child : parent.getChildren()) {
+        String alias = child.getStringAttribute("alias");
+        String type = child.getStringAttribute("type");
+        typeAliasRegistry.registerAlias(alias, type);
+      }
     }
   }
 
   private void pluginElement(XNode parent) throws Exception {
-    for (XNode child : parent.getChildren()) {
-      String interceptor = child.getStringAttribute("interceptor");
-      Properties properties = child.getChildrenAsProperties();
-      Interceptor interceptorInstance = (Interceptor) 
resolveClass(interceptor).newInstance();
-      interceptorInstance.setProperties(properties);
-      configuration.addInterceptor(interceptorInstance);
+    if (parent != null) {
+      for (XNode child : parent.getChildren()) {
+        String interceptor = child.getStringAttribute("interceptor");
+        Properties properties = child.getChildrenAsProperties();
+        Interceptor interceptorInstance = (Interceptor) 
resolveClass(interceptor).newInstance();
+        interceptorInstance.setProperties(properties);
+        configuration.addInterceptor(interceptorInstance);
+      }
     }
   }
 
 
   private void objectFactoryElement(XNode context) throws Exception {
-    String type = context.getStringAttribute("type");
-    Properties properties = context.getChildrenAsProperties();
-    ObjectFactory factory = (ObjectFactory) resolveClass(type).newInstance();
-    factory.setProperties(properties);
-    configuration.setObjectFactory(factory);
+    if (context != null) {
+      String type = context.getStringAttribute("type");
+      Properties properties = context.getChildrenAsProperties();
+      ObjectFactory factory = (ObjectFactory) resolveClass(type).newInstance();
+      factory.setProperties(properties);
+      configuration.setObjectFactory(factory);
+    }
   }
 
   private void propertiesElement(XNode context) throws Exception {
-    Properties defaults = context.getChildrenAsProperties();
-    String resource = context.getStringAttribute("resource");
-    String url = context.getStringAttribute("url");
-    if (resource != null && url != null) {
-      throw new BulderException("The properties element cannot specify both a 
URL and a resource based property file reference.  Please specify one or the 
other.");
-    }
-    if (resource != null) {
-      defaults.putAll(Resources.getResourceAsProperties(resource));
-    } else if (url != null) {
-      defaults.putAll(Resources.getUrlAsProperties(url));
-    }
-    Properties vars = configuration.getVariables();
-    if (vars != null) {
-      defaults.putAll(vars);
+    if (context != null) {
+      Properties defaults = context.getChildrenAsProperties();
+      String resource = context.getStringAttribute("resource");
+      String url = context.getStringAttribute("url");
+      if (resource != null && url != null) {
+        throw new BuilderException("The properties element cannot specify both 
a URL and a resource based property file reference.  Please specify one or the 
other.");
+      }
+      if (resource != null) {
+        defaults.putAll(Resources.getResourceAsProperties(resource));
+      } else if (url != null) {
+        defaults.putAll(Resources.getUrlAsProperties(url));
+      }
+      Properties vars = configuration.getVariables();
+      if (vars != null) {
+        defaults.putAll(vars);
+      }
+      parser.setVariables(defaults);
+      configuration.setVariables(defaults);
     }
-    parser.setVariables(defaults);
-    configuration.setVariables(defaults);
   }
 
   private void settingsElement(XNode context) throws Exception {
-    Properties props = context.getChildrenAsProperties();
-    // Check that all settings are known to the configuration class
-    for (Map.Entry entry : props.entrySet()) {
-      MetaClass metaConfig = MetaClass.forClass(Configuration.class);
-      if (!metaConfig.hasSetter((String) entry.getKey())) {
-        throw new BulderException("The setting " + entry.getKey() + " is not 
known.  Make sure you spelled it correctly (case sensitive).");
-      }
-    }
-    
configuration.setCacheEnabled(booleanValueOf(props.getProperty("cacheEnabled"), 
true));
-    
configuration.setLazyLoadingEnabled(booleanValueOf(props.getProperty("lazyLoadingEnabled"),
 true));
-    
configuration.setMultipleResultSetsEnabled(booleanValueOf(props.getProperty("multipleResultSetsEnabled"),
 true));
-    
configuration.setUseColumnLabel(booleanValueOf(props.getProperty("useColumnLabel"),
 true));
-    
configuration.setEnhancementEnabled(booleanValueOf(props.getProperty("enhancementEnabled"),
 false));
-    
configuration.setUseGeneratedKeys(booleanValueOf(props.getProperty("useGeneratedKeys"),
 false));
-    
configuration.setDefaultExecutorType(ExecutorType.valueOf(stringValueOf(props.getProperty("defaultExecutorType"),
 "SIMPLE")));
-    
configuration.setDefaultStatementTimeout(integerValueOf(props.getProperty("defaultStatementTimeout"),
 null));
+    if (context != null) {
+      Properties props = context.getChildrenAsProperties();
+      // Check that all settings are known to the configuration class
+      for (Map.Entry entry : props.entrySet()) {
+        MetaClass metaConfig = MetaClass.forClass(Configuration.class);
+        if (!metaConfig.hasSetter((String) entry.getKey())) {
+          throw new BuilderException("The setting " + entry.getKey() + " is 
not known.  Make sure you spelled it correctly (case sensitive).");
+        }
+      }
+      
configuration.setCacheEnabled(booleanValueOf(props.getProperty("cacheEnabled"), 
true));
+      
configuration.setLazyLoadingEnabled(booleanValueOf(props.getProperty("lazyLoadingEnabled"),
 true));
+      
configuration.setMultipleResultSetsEnabled(booleanValueOf(props.getProperty("multipleResultSetsEnabled"),
 true));
+      
configuration.setUseColumnLabel(booleanValueOf(props.getProperty("useColumnLabel"),
 true));
+      
configuration.setEnhancementEnabled(booleanValueOf(props.getProperty("enhancementEnabled"),
 false));
+      
configuration.setUseGeneratedKeys(booleanValueOf(props.getProperty("useGeneratedKeys"),
 false));
+      
configuration.setDefaultExecutorType(ExecutorType.valueOf(stringValueOf(props.getProperty("defaultExecutorType"),
 "SIMPLE")));
+      
configuration.setDefaultStatementTimeout(integerValueOf(props.getProperty("defaultStatementTimeout"),
 null));
+    }
   }
 
   private void environmentsElement(XNode context) throws Exception {
-    if (environment == null) {
-      environment = context.getStringAttribute("default");
-    }
-    for (XNode child : context.getChildren()) {
-      String id = child.getStringAttribute("id");
-      if (isSpecifiedEnvironment(id)) {
-        TransactionFactory txFactory = 
transactionManagerElement(child.evalNode("transactionManager"));
-        DataSourceFactory dsFactory = 
dataSourceElement(child.evalNode("dataSource"));
-        Environment.Builder environmentBuilder = new Environment.Builder(id, 
txFactory, dsFactory.getDataSource());
-        configuration.setEnvironment(environmentBuilder.build());
+    if (context != null) {
+      if (environment == null) {
+        environment = context.getStringAttribute("default");
+      }
+      for (XNode child : context.getChildren()) {
+        String id = child.getStringAttribute("id");
+        if (isSpecifiedEnvironment(id)) {
+          TransactionFactory txFactory = 
transactionManagerElement(child.evalNode("transactionManager"));
+          DataSourceFactory dsFactory = 
dataSourceElement(child.evalNode("dataSource"));
+          Environment.Builder environmentBuilder = new Environment.Builder(id, 
txFactory, dsFactory.getDataSource());
+          configuration.setEnvironment(environmentBuilder.build());
+        }
       }
     }
   }
 
   private TransactionFactory transactionManagerElement(XNode context) throws 
Exception {
-    String type = context.getStringAttribute("type");
-    Properties props = context.getChildrenAsProperties();
-    TransactionFactory factory = (TransactionFactory) 
resolveClass(type).newInstance();
-    factory.setProperties(props);
-    return factory;
+    if (context != null) {
+      String type = context.getStringAttribute("type");
+      Properties props = context.getChildrenAsProperties();
+      TransactionFactory factory = (TransactionFactory) 
resolveClass(type).newInstance();
+      factory.setProperties(props);
+      return factory;
+    }
+    throw new BuilderException("Environment declaration requires a 
TransactionFactory.");
   }
 
   private DataSourceFactory dataSourceElement(XNode context) throws Exception {
-    String type = context.getStringAttribute("type");
-    Properties props = context.getChildrenAsProperties();
-    DataSourceFactory factory = (DataSourceFactory) 
resolveClass(type).newInstance();
-    factory.setProperties(props);
-    return factory;
+    if (context != null) {
+      String type = context.getStringAttribute("type");
+      Properties props = context.getChildrenAsProperties();
+      DataSourceFactory factory = (DataSourceFactory) 
resolveClass(type).newInstance();
+      factory.setProperties(props);
+      return factory;
+    }
+    throw new BuilderException("Environment declaration requires a 
DataSourceFactory.");
   }
 
 
   private void typeHandlerElement(XNode parent) throws Exception {
-    for (XNode child : parent.getChildren()) {
-      String javaType = child.getStringAttribute("javaType");
-      String jdbcType = child.getStringAttribute("jdbcType");
-      String handler = child.getStringAttribute("handler");
-
-      Class javaTypeClass = resolveClass(javaType);
-      TypeHandler typeHandlerInstance = (TypeHandler) 
resolveClass(handler).newInstance();
-
-      if (jdbcType == null) {
-        typeHandlerRegistry.register(javaTypeClass, typeHandlerInstance);
-      } else {
-        typeHandlerRegistry.register(javaTypeClass, resolveJdbcType(jdbcType), 
typeHandlerInstance);
+    if (parent != null) {
+      for (XNode child : parent.getChildren()) {
+        String javaType = child.getStringAttribute("javaType");
+        String jdbcType = child.getStringAttribute("jdbcType");
+        String handler = child.getStringAttribute("handler");
+
+        Class javaTypeClass = resolveClass(javaType);
+        TypeHandler typeHandlerInstance = (TypeHandler) 
resolveClass(handler).newInstance();
+
+        if (jdbcType == null) {
+          typeHandlerRegistry.register(javaTypeClass, typeHandlerInstance);
+        } else {
+          typeHandlerRegistry.register(javaTypeClass, 
resolveJdbcType(jdbcType), typeHandlerInstance);
+        }
       }
     }
   }
 
 
   private void mapperElement(XNode parent) throws Exception {
-    for (XNode child : parent.getChildren()) {
-      String resource = child.getStringAttribute("resource");
-      String url = child.getStringAttribute("url");
-      Reader reader;
-      if (resource != null && url == null) {
-        ErrorContext.instance().resource(resource);
-        reader = Resources.getResourceAsReader(resource);
-        XMLMapperBuilder mapperParser = new XMLMapperBuilder(reader, 
configuration, resource);
-        mapperParser.parse();
-      } else if (url != null && resource == null) {
-        ErrorContext.instance().resource(url);
-        reader = Resources.getUrlAsReader(url);
-        XMLMapperBuilder mapperParser = new XMLMapperBuilder(reader, 
configuration, url);
-        mapperParser.parse();
-      } else {
-        throw new BulderException("A mapper element may only specify a url or 
resource, but not both.");
+    if (parent != null) {
+      for (XNode child : parent.getChildren()) {
+        String resource = child.getStringAttribute("resource");
+        String url = child.getStringAttribute("url");
+        Reader reader;
+        if (resource != null && url == null) {
+          ErrorContext.instance().resource(resource);
+          reader = Resources.getResourceAsReader(resource);
+          XMLMapperBuilder mapperParser = new XMLMapperBuilder(reader, 
configuration, resource);
+          mapperParser.parse();
+        } else if (url != null && resource == null) {
+          ErrorContext.instance().resource(url);
+          reader = Resources.getUrlAsReader(url);
+          XMLMapperBuilder mapperParser = new XMLMapperBuilder(reader, 
configuration, url);
+          mapperParser.parse();
+        } else {
+          throw new BuilderException("A mapper element may only specify a url 
or resource, but not both.");
+        }
       }
     }
   }
 
   private boolean isSpecifiedEnvironment(String id) {
     if (environment == null) {
-      throw new BulderException("No environment specified.");
+      throw new BuilderException("No environment specified.");
     } else if (id == null) {
-      throw new BulderException("Environment requires an id attribute.");
+      throw new BuilderException("Environment requires an id attribute.");
     } else if (environment.equals(id)) {
       return true;
     }

Modified: 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/xml/XMLStatementBuilder.java
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/xml/XMLStatementBuilder.java?rev=781652&r1=781651&r2=781652&view=diff
==============================================================================
--- 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/xml/XMLStatementBuilder.java
 (original)
+++ 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/xml/XMLStatementBuilder.java
 Thu Jun  4 04:53:14 2009
@@ -5,7 +5,6 @@
 import org.apache.ibatis.executor.keygen.*;
 import org.apache.ibatis.mapping.*;
 import org.apache.ibatis.parsing.XNode;
-import org.apache.ibatis.cache.Cache;
 import org.w3c.dom.*;
 
 import java.util.*;
@@ -75,7 +74,7 @@
       } else {
         NodeHandler handler = nodeHandlers.get(nodeName);
         if (handler == null) {
-          throw new BulderException("Unknown element <" + nodeName + "> in SQL 
statement.");
+          throw new BuilderException("Unknown element <" + nodeName + "> in 
SQL statement.");
         }
         handler.handleNode(child, contents);
 
@@ -148,7 +147,7 @@
         String nsrefid = sequentialBuilder.applyCurrentNamespace(refid);
         includeNode = xmlMapperParser.getSqlFragment(nsrefid);
         if (includeNode == null) {
-          throw new BulderException("Could not find SQL statement to include 
with refid '" + refid + "'");
+          throw new BuilderException("Could not find SQL statement to include 
with refid '" + refid + "'");
         }
       }
       MixedSqlNode mixedSqlNode = new MixedSqlNode(contents(includeNode));
@@ -248,7 +247,7 @@
       if (defaultSqlNodes.size() == 1) {
         defaultSqlNode = defaultSqlNodes.get(0);
       } else if (defaultSqlNodes.size() > 1) {
-        throw new BulderException("Too many default (otherwise) elements in 
choose statement.");
+        throw new BuilderException("Too many default (otherwise) elements in 
choose statement.");
       }
       return defaultSqlNode;
     }

Modified: 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/xml/dynamic/ExpressionEvaluator.java
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/xml/dynamic/ExpressionEvaluator.java?rev=781652&r1=781651&r2=781652&view=diff
==============================================================================
--- 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/xml/dynamic/ExpressionEvaluator.java
 (original)
+++ 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/xml/dynamic/ExpressionEvaluator.java
 Thu Jun  4 04:53:14 2009
@@ -1,6 +1,6 @@
 package org.apache.ibatis.builder.xml.dynamic;
 
-import org.apache.ibatis.builder.BulderException;
+import org.apache.ibatis.builder.BuilderException;
 import org.apache.ibatis.ognl.*;
 
 import java.math.BigDecimal;
@@ -15,7 +15,7 @@
       if (value instanceof Number) return !new 
BigDecimal(String.valueOf(value)).equals(BigDecimal.ZERO);
       return value != null;
     } catch (OgnlException e) {
-      throw new BulderException("Error evaluating expression '"+expression+"'. 
Cause: " + e, e);
+      throw new BuilderException("Error evaluating expression 
'"+expression+"'. Cause: " + e, e);
     }
   }
 
@@ -24,9 +24,9 @@
       Object value = Ognl.getValue(expression, parameterObject);
       if (value instanceof Iterable) return (Iterable) value;
       if (value.getClass().isArray()) return Arrays.asList((Object[])value);
-      throw new BulderException("Error evaluating expression '"+expression+"'. 
 Return value ("+value+") was not iterable.");
+      throw new BuilderException("Error evaluating expression 
'"+expression+"'.  Return value ("+value+") was not iterable.");
     } catch (OgnlException e) {
-      throw new BulderException("Error evaluating expression '"+expression+"'. 
Cause: " + e, e);
+      throw new BuilderException("Error evaluating expression 
'"+expression+"'. Cause: " + e, e);
     }
   }
 

Modified: 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/xml/ibatis-3-config.dtd
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/xml/ibatis-3-config.dtd?rev=781652&r1=781651&r2=781652&view=diff
==============================================================================
--- 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/xml/ibatis-3-config.dtd
 (original)
+++ 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/xml/ibatis-3-config.dtd
 Thu Jun  4 04:53:14 2009
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 
-<!ELEMENT configuration (properties?, settings?, typeAliases?, typeHandlers?, 
objectFactory?, plugins?, environments?, mappers)>
+<!ELEMENT configuration (properties?, settings?, typeAliases?, typeHandlers?, 
objectFactory?, plugins?, environments?, mappers?)>
 
 <!ELEMENT properties (property*)>
 <!ATTLIST properties
@@ -14,7 +14,7 @@
 value CDATA #REQUIRED
 >
 
-<!ELEMENT settings (setting*)>
+<!ELEMENT settings (setting+)>
 
 <!ELEMENT setting EMPTY>
 <!ATTLIST setting
@@ -51,7 +51,7 @@
 interceptor CDATA #REQUIRED
 >
 
-<!ELEMENT environments (environment*)>
+<!ELEMENT environments (environment+)>
 <!ATTLIST environments
 default CDATA #REQUIRED
 >

Modified: 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/parsing/XPathParser.java
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/parsing/XPathParser.java?rev=781652&r1=781651&r2=781652&view=diff
==============================================================================
--- 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/parsing/XPathParser.java
 (original)
+++ 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/parsing/XPathParser.java
 Thu Jun  4 04:53:14 2009
@@ -1,6 +1,6 @@
 package org.apache.ibatis.parsing;
 
-import org.apache.ibatis.builder.BulderException;
+import org.apache.ibatis.builder.BuilderException;
 import org.w3c.dom.*;
 import org.xml.sax.*;
 
@@ -95,7 +95,7 @@
     try {
       return xpath.evaluate(expression, root, returnType);
     } catch (Exception e) {
-      throw new BulderException("Error evaluating XPath.  Cause: " + e, e);
+      throw new BuilderException("Error evaluating XPath.  Cause: " + e, e);
     }
   }
 
@@ -126,7 +126,7 @@
       });
       return builder.parse(new InputSource(reader));
     } catch (Exception e) {
-      throw new BulderException("Error creating document instance.  Cause: " + 
e, e);
+      throw new BuilderException("Error creating document instance.  Cause: " 
+ e, e);
     }
   }
 

Added: 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/builder/MinimalMapperConfig.xml
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/builder/MinimalMapperConfig.xml?rev=781652&view=auto
==============================================================================
--- 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/builder/MinimalMapperConfig.xml
 (added)
+++ 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/builder/MinimalMapperConfig.xml
 Thu Jun  4 04:53:14 2009
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+
+<!DOCTYPE configuration
+    PUBLIC "-//ibatis.apache.org//DTD Config 3.0//EN"
+    "http://ibatis.apache.org/dtd/ibatis-3-config.dtd";>
+
+<configuration>
+
+
+</configuration>
+
+

Added: 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/builder/XmlConfigBuilderTest.java
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/builder/XmlConfigBuilderTest.java?rev=781652&view=auto
==============================================================================
--- 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/builder/XmlConfigBuilderTest.java
 (added)
+++ 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/builder/XmlConfigBuilderTest.java
 Thu Jun  4 04:53:14 2009
@@ -0,0 +1,22 @@
+package org.apache.ibatis.builder;
+
+import static org.junit.Assert.*;
+import org.junit.Test;
+import org.apache.ibatis.builder.xml.XMLConfigBuilder;
+import org.apache.ibatis.io.Resources;
+import org.apache.ibatis.mapping.Configuration;
+
+import java.io.Reader;
+
+public class XmlConfigBuilderTest {
+
+  @Test
+  public void shouldSuccessfullyLoadMinimalXMLConfigFile() throws Exception {
+    String resource = "org/apache/ibatis/builder/MinimalMapperConfig.xml";
+    Reader reader = Resources.getResourceAsReader(resource);
+    XMLConfigBuilder builder = new XMLConfigBuilder(reader);
+    Configuration config = builder.parse();
+    assertNotNull(config);
+  }
+
+}

Modified: 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/exceptions/GeneralExceptionsTest.java
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/exceptions/GeneralExceptionsTest.java?rev=781652&r1=781651&r2=781652&view=diff
==============================================================================
--- 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/exceptions/GeneralExceptionsTest.java
 (original)
+++ 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/exceptions/GeneralExceptionsTest.java
 Thu Jun  4 04:53:14 2009
@@ -1,7 +1,7 @@
 package org.apache.ibatis.exceptions;
 
 import org.apache.ibatis.binding.BindingException;
-import org.apache.ibatis.builder.BulderException;
+import org.apache.ibatis.builder.BuilderException;
 import org.apache.ibatis.cache.CacheException;
 import org.apache.ibatis.datasource.DataSourceException;
 import org.apache.ibatis.executor.ExecutorException;
@@ -41,7 +41,7 @@
         LogException.class,
         MigrationException.class,
         ParsingException.class,
-        BulderException.class,
+        BuilderException.class,
         PluginException.class,
         ReflectionException.class,
         IbatisException.class,


Reply via email to