提交 7635cede 编写于 作者: J jbarrez

ACT-134: made configuration parser not validating against the xsd to allow for easy extension.

上级 2d93ba3a
<?xml version="1.0" encoding="UTF-8"?>
<activiti-cfg xmlns="http://activiti.org/cfg">
<activiti-cfg>
<database name="@db@" schema-strategy="check-version">
<jdbc url="@jdbc.url@"
......
<?xml version="1.0" encoding="UTF-8"?>
<activiti-cfg xmlns="http://activiti.org/cfg">
<activiti-cfg>
<database name="h2" schema-strategy="create-drop">
<jdbc url="jdbc:h2:mem:activiti;DB_CLOSE_DELAY=1000"
......
<?xml version="1.0" encoding="UTF-8"?>
<activiti-cfg xmlns="http://activiti.org/cfg">
<activiti-cfg>
<database name="h2" schema-strategy="create-drop">
<jdbc url="jdbc:h2:mem:activiti;DB_CLOSE_DELAY=1000"
......
......@@ -16,7 +16,6 @@ package org.activiti.engine.impl.cfg;
import java.io.InputStream;
import java.net.URL;
import org.activiti.engine.impl.util.ReflectUtil;
import org.activiti.engine.impl.util.xml.Element;
import org.activiti.engine.impl.util.xml.Parse;
import org.activiti.engine.impl.util.xml.Parser;
......@@ -59,14 +58,13 @@ public class ConfigurationParse extends Parse {
*/
ConfigurationParse(Parser parser) {
super(parser);
setSchemaResource(ReflectUtil.getClassLoader().getResource(ConfigurationParser.SCHEMA_RESOURCE_5_0).toString());
}
@Override
public ConfigurationParse execute() {
super.execute();
parseRootElementAttributes();
parseRootElement();
parseDatabaseCfg();
parseJobExecutorCfg();
parseMailServerCfg();
......@@ -82,7 +80,10 @@ public class ConfigurationParse extends Parse {
return this;
}
protected void parseRootElementAttributes() {
protected void parseRootElement() {
if (!"activiti-cfg".equals(rootElement.getTagName())) {
addError("Invalid root element: " + rootElement.getTagName(), rootElement);
}
this.processEngineName = rootElement.attribute("process-engine-name");
}
......
......@@ -117,13 +117,15 @@ public class Parse extends DefaultHandler {
try {
InputStream inputStream = streamSource.getInputStream();
if (schemaResource == null) { // must be done before parser is created
parser.getSaxParserFactory().setNamespaceAware(false);
parser.getSaxParserFactory().setValidating(false);
}
SAXParser saxParser = parser.getSaxParser();
if (schemaResource != null) {
if (schemaResource != null) {
saxParser.setProperty(JAXP_SCHEMA_LANGUAGE, W3C_XML_SCHEMA);
saxParser.setProperty(JAXP_SCHEMA_SOURCE, schemaResource);
} else {
parser.getSaxParserFactory().setNamespaceAware(false);
parser.getSaxParserFactory().setValidating(false);
}
saxParser.parse(inputStream, new ParseHandler(this));
......
......@@ -40,7 +40,7 @@ public class ConfigurationParserTest extends PvmTestCase {
.execute();
fail("Invalid config xml should not parse");
} catch (ActivitiException e) {
assertTextPresent("Cannot find the declaration of element 'activiti-invalid'", e.getMessage());
assertTextPresent("Invalid root element", e.getMessage());
}
}
......@@ -56,12 +56,12 @@ public class ConfigurationParserTest extends PvmTestCase {
}
public void testOnlyDbConfiguration() {
ConfigurationParse parse =
configurationParser.createParse()
.sourceResource("org/activiti/engine/test/cfg/only-db-config.activiti.cfg.xml")
.execute();
assertNotNull(parse);
assertEquals("only-db", parse.getProcessEngineName());
ConfigurationParse parse =
configurationParser.createParse()
.sourceResource("org/activiti/engine/test/cfg/only-db-config.activiti.cfg.xml")
.execute();
assertNotNull(parse);
assertEquals("only-db", parse.getProcessEngineName());
}
public void testMultipleDbConfigurations() {
......@@ -75,7 +75,7 @@ public class ConfigurationParserTest extends PvmTestCase {
}
}
public void testValidConfiguration() {
public void testCompleteConfiguration() {
ConfigurationParse parse =
configurationParser.createParse()
.sourceResource("org/activiti/engine/test/cfg/complete.activiti.cfg.xml")
......@@ -101,5 +101,14 @@ public class ConfigurationParserTest extends PvmTestCase {
assertEquals(ProcessEngineConfiguration.parseHistoryLevel("audit"), parse.getHistoryLevel());
}
public void testConfigurationWithSchemaLocations() {
ConfigurationParse parse =
configurationParser.createParse()
.sourceResource("org/activiti/engine/test/cfg/activiti.cfg.with.schemalocation.xml")
.execute();
assertNotNull(parse);
assertEquals("with-schema", parse.getProcessEngineName());
}
}
<?xml version="1.0" encoding="UTF-8"?>
<activiti-cfg xmlns="http://activiti.org/cfg">
<activiti-cfg>
<database name="h2" schema-strategy="create-if-necessary">
<jdbc url="jdbc:h2:mem:activiti;DB_CLOSE_DELAY=1000"
......
......@@ -2,7 +2,7 @@
<activiti-cfg xmlns="http://activiti.org/cfg"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://activiti.org/cfg http://activiti.org/cfg/activiti-cfg-5.0.xsd"
process-engine-name="complete-cfg">
process-engine-name="with-schema">
<mail host="localhost" port="5025" />
......
<?xml version="1.0" encoding="UTF-8"?>
<activiti-cfg xmlns="http://activiti.org/cfg" process-engine-name="complete-cfg">
<activiti-cfg process-engine-name="complete-cfg">
<mail host="localhost" port="5025" />
......
<?xml version="1.0" encoding="UTF-8"?>
<activiti-invalid xmlns="http://activiti.org/cfg">
<activiti-invalid>
</activiti-invalid>
<?xml version="1.0" encoding="UTF-8"?>
<activiti-cfg xmlns="http://activiti.org/cfg" process-engine-name="only-db">
<activiti-cfg process-engine-name="only-db">
<database name="h2" schema-strategy="create-if-necessary">
<jdbc url="jdbc:h2:mem:activiti;DB_CLOSE_DELAY=1000"
......
<?xml version="1.0" encoding="UTF-8"?>
<activiti-cfg xmlns="http://activiti.org/cfg">
<activiti-cfg>
<job-executor auto-activate="off" />
......
<?xml version="1.0" encoding="UTF-8"?>
<activiti-cfg xmlns="http://activiti.org/cfg" process-engine-name="only-db">
<activiti-cfg process-engine-name="only-db">
<database name="h2" schema-strategy="create-if-necessary">
<jdbc url="jdbc:h2:mem:activiti;DB_CLOSE_DELAY=1000"
......
<?xml version="1.0" encoding="UTF-8"?>
<activiti-cfg xmlns="http://activiti.org/cfg">
<activiti-cfg>
<database name="h2" schema-strategy="drop-create">
<jdbc url="jdbc:h2:tcp://non-existing-host/non-existing-db;DB_CLOSE_DELAY=1000"
......
<?xml version="1.0" encoding="UTF-8"?>
<activiti-cfg xmlns="http://activiti.org/cfg">
<activiti-cfg>
<database name="h2" schema-strategy="check-version">
<jdbc url="jdbc:h2:mem:ProcessEngineInitializationTest;DB_CLOSE_DELAY=1000"
......
<?xml version="1.0" encoding="UTF-8"?>
<activiti-cfg xmlns="http://activiti.org/cfg">
<activiti-cfg>
<database name="h2" schema-strategy="create-if-necessary">
<jdbc url="jdbc:h2:mem:activiti;DB_CLOSE_DELAY=1000"
......
<?xml version="1.0" encoding="UTF-8"?>
<activiti-cfg xmlns="http://activiti.org/cfg">
<activiti-cfg>
<database name="h2" schema-strategy="create-if-necessary">
<jdbc url="jdbc:h2:mem:activiti;DB_CLOSE_DELAY=1000"
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册