java - 如何正确使 dbunit 引用 xml 数据集中的 dtd 文件?

标签 java xml dataset dtd dbunit

如何设置 dbunit 以在 xml 数据集标记中添加引用 dtd 文件的行?

在我的 xml 文件中,我将数据集表示为

<dataset>
    <TABLE COLUMN="value ..."
    ...

但我想添加对 dtd 的引用(或其他方式)

<!DOCTYPE dataset SYSTEM "../my.dtd">
     <TABLE COLUMN="value" ... 
     ...

XML 的生成方式为:

FlatXmlDataSet.write(dataSet, out);

当我手动添加该行时,出现解析错误

java.lang.NullPointerException
at org.dbunit.dataset.xml.FlatXmlProducer.isNewTable(FlatXmlProducer.java:255)
at org.dbunit.dataset.xml.FlatXmlProducer.startElement(FlatXmlProducer.java:429)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(AbstractSAXParser.java:509)
at com.sun.org.apache.xerces.internal.parsers.AbstractXMLDocumentParser.emptyElement(AbstractXMLDocumentParser.java:182)
at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.emptyElement(XMLDTDValidator.java:766)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanStartElement(XMLDocumentFragmentScannerImpl.java:1342)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$ContentDriver.scanRootElementHook(XMLDocumentScannerImpl.java:1292)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:3122)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:880)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:606)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:510)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:848)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:777)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1213)
at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:649)
at org.dbunit.dataset.xml.FlatXmlProducer.produce(FlatXmlProducer.java:365)
at org.dbunit.dataset.CachedDataSet.<init>(CachedDataSet.java:97)
at org.dbunit.dataset.xml.FlatXmlDataSet.<init>(FlatXmlDataSet.java:110)
at org.dbunit.dataset.xml.FlatXmlDataSetBuilder.buildInternal(FlatXmlDataSetBuilder.java:264)
at org.dbunit.dataset.xml.FlatXmlDataSetBuilder.build(FlatXmlDataSetBuilder.java:111)
at test.de.planta.server.DBUnitHelper.readDataSet(DBUnitHelper.java:243)
at test.de.planta.server.DBUnitHelper.insertDataFromXMLIntoH2(DBUnitHelper.java:202)
at test.de.planta.server.DBUnitHelper.CleanInsertData(DBUnitHelper.java:95)
at test.de.planta.server.DBUnitHelper.doCleanImport(DBUnitHelper.java:64)
at test.de.planta.server.DBUnitHelper.main(DBUnitHelper.java:57)

最佳答案

您缺少实际的 <dataset>元素。

文件应按如下所示开始:

<!DOCTYPE dataset SYSTEM "../my.dtd">
<dataset>
     <TABLE COLUMN="value" ... 

关于java - 如何正确使 dbunit 引用 xml 数据集中的 dtd 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27016023/

相关文章:

JavaFX ToggleButton 设置颜色和恢复默认颜色

java - Vert.x 数据访问优于使用 JDBC 的 CompletableFuture.supplyAsync

java - 如何以编程方式更改 XML 中的值

Python - 使用 pyodbc 将 XML 字段从 SQL SERVER 转换为 XML FILE

php - 使用 JSON 的实时搜索功能

c# - 当我们创建类型化数据集时,方法之间有什么区别?

linq-to-sql - 如何为 Linq to 实体使用不同的提供程序?

database - SAS:从多个数据集创建多个文件

java - Java数组类的成员

java - Android: "next"单击表单以错误的 View 结束