gpt4 book ai didi

xml - 多模块 Java/Maven 项目中 DBUnit 的 XML DTD 路径?

转载 作者:数据小太阳 更新时间:2023-10-29 01:43:11 26 4
gpt4 key购买 nike

我有一个多模块 Maven 项目。在持久模块中,我有许多引用 DTD 的 XML 文件数据文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE myapp-data SYSTEM "myapp-data.dtd" >

<dataset>
.....omitted for brevity....
</dataset>

DTD 与 XML 文件存储在同一目录中,甚至 Eclipse 也将这些 XML 文件报告为有效。

但是,当我运行该应用程序时,DBUnit FlatXMLDataSet 抛出一个 FileNotFound 异常,因为它找不到 DTD。它显然是在根项目目录(例如 myproject/)中寻找 DTD。我原以为它会在与 XML 文件本身相同的目录中查找 DTD(例如 myproject/persist/target/test-data)。

查看 DBUnit 源代码,它是这样说的“相对 DOCTYPE uri 是从当前工作目录中解析出来的。”

解决这个问题的好方法是什么?

最佳答案

好的,我想我明白了。谢天谢地开源。

FlatXmlDataSetBuilder 上有一个方法可以将流传输到 DTD。这是一个公共(public)方法 IMO,这很疯狂,但话又说回来,DBUnit 不在与 dtd 文件的 XML 相同的目录中查找,这很疯狂。所以这里是:

String dtdResourceName = "classpath:test-data/myapp-data.dtd";      
Resource res = applicationContext.getResource(dtdResourceName);
builder.setMetaDataSetFromDtd(res.getInputStream());

现在我将带有 dtd 的 DOCTYPE 声明留在与 XML 相同的目录中,并使用这个 hack 来欺骗 DBUnit 做正确的事情。

关于xml - 多模块 Java/Maven 项目中 DBUnit 的 XML DTD 路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3017816/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com