HDa*_*ave 9 xml dbunit dtd maven-2
我有一个多模块maven项目.在persist模块中,我有许多引用DTD的XML文件数据文件:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE myapp-data SYSTEM "myapp-data.dtd" >
<dataset>
.....omitted for brevity....
</dataset>
Run Code Online (Sandbox Code Playgroud)
DTD与XML文件存储在同一目录中,甚至Eclipse也将这些XML文件报告为有效.
但是,当我运行应用程序时,DBUnit FlatXMLDataSet会抛出FileNotFound异常,因为它无法找到DTD.它显然在根项目目录中寻找DTD(例如myproject /).我原以为它会在与XML文件本身相同的目录中查找DTD(例如myproject/persist/target/test-data).
看看DBUnit的源代码,就可以说"相对DOCTYPE uri是从当前工作的dicrectory中解决的".
有什么好办法解决这个问题?
好吧,我想我想出了这个.谢谢开源.
FlatXmlDataSetBuilder上有一个方法,它将流引入DTD.这是一个公共方法IMO,这很疯狂,但是再一次,它疯狂的是DBUnit与dtd文件的XML不在同一目录中.所以这里是:
String dtdResourceName = "classpath:test-data/myapp-data.dtd";
Resource res = applicationContext.getResource(dtdResourceName);
builder.setMetaDataSetFromDtd(res.getInputStream());
Run Code Online (Sandbox Code Playgroud)
现在我将带有dtd的DOCTYPE声明留在与XML相同的目录中,并使用此hack来欺骗DBUnit做正确的事情.