diff --git a/main/src/main/java/org/hibernate/tool/ant/JDBCConfigurationTask.java b/main/src/main/java/org/hibernate/tool/ant/JDBCConfigurationTask.java index 0daa297c27..7ce62e0fac 100644 --- a/main/src/main/java/org/hibernate/tool/ant/JDBCConfigurationTask.java +++ b/main/src/main/java/org/hibernate/tool/ant/JDBCConfigurationTask.java @@ -6,6 +6,7 @@ import java.io.File; import java.lang.reflect.Constructor; +import java.util.Map; import java.util.Properties; import org.apache.tools.ant.BuildException; @@ -15,6 +16,8 @@ import org.hibernate.cfg.reveng.OverrideRepository; import org.hibernate.cfg.reveng.ReverseEngineeringSettings; import org.hibernate.cfg.reveng.ReverseEngineeringStrategy; +import org.hibernate.boot.cfgxml.internal.ConfigLoader; +import org.hibernate.boot.registry.BootstrapServiceRegistryBuilder; import org.hibernate.tool.api.metadata.MetadataDescriptor; import org.hibernate.tool.api.metadata.MetadataDescriptorFactory; import org.hibernate.tool.util.ReflectHelper; @@ -40,7 +43,7 @@ public JDBCConfigurationTask() { setDescription("JDBC Configuration (for reverse engineering)"); } protected MetadataDescriptor createMetadataDescriptor() { - Properties properties = loadPropertiesFile(); + Properties properties = loadProperties(); ReverseEngineeringStrategy res = createReverseEngineeringStrategy(); return MetadataDescriptorFactory .createJdbcDescriptor( @@ -108,7 +111,7 @@ public void setDetectManyToMany(boolean b) { public void setDetectOptimisticLock(boolean b) { detectOptimisticLock = b; } - + private ReverseEngineeringStrategy loadreverseEngineeringStrategy(final String className, ReverseEngineeringStrategy delegate) throws BuildException { try { @@ -132,4 +135,21 @@ private ReverseEngineeringStrategy loadreverseEngineeringStrategy(final String c throw new BuildException("Could not create or find " + className + " with one argument delegate constructor", e); } } + + private Map loadCfgXmlFile() { + return new ConfigLoader(new BootstrapServiceRegistryBuilder().build()) + .loadConfigXmlFile(getConfigurationFile()) + .getConfigurationValues(); + } + + private Properties loadProperties() { + Properties result = new Properties(); + if (getPropertyFile() != null) { + result.putAll(loadPropertiesFile()); + } + if (getConfigurationFile() != null) { + result.putAll(loadCfgXmlFile()); + } + return result; + } }