dbunit之org.dbunit.dataset.DataSetException: java.net.MalformedURLException解决方法

一、问题定位

在使用dbunit做DAO的单元测试时,抛出了一个org.dbunit.dataset.DataSetException: java.net.MalformedURLException异常,如下图,

可以看到问题出现在我写的TestDbUnit的49行,再看源代码

第49行是这一句 IDataset ds = new FlatXmlDataSet(file)。但实际出现问题的是file对象中的TestDbUnit.class.getClassLoader().getResourceAsStream("t_user.xml"),

我将这一句打印出来发现结果为:

结果为null,说明没有读到t_user.xml文件,这也是产生org.dbunit.dataset.DataSetException: java.net.MalformedURLException的原因。

二、解决方法

问题的根源是t_use.xml文件没有被读取,为什么会产生这种情况能,首先看我t_user.xml文件的位置,

t_use.xml文件是在dbunit_xml包下的,而解析它的TestDbUnit类是在zttc.itat.service包下的。

方法一:

现在我们将t_use.xml文件移动到test根目录下,在运行发现问题解决:

打印出的TestDbUnit.class.getClassLoader().getResourceAsStream("t_user.xml")也不再为null。

方法二:

将TestDbUnit.class.getClassLoader().getResourceAsStream("t_user.xml")改为TestDbUnit.class.getResourceAsStream("t_user.xml")然后将t_user.xml移动到与TestDbUnit同一个包下也同样可以解决问题:

方法三:

如果我就是想把t_user.xml放到dbunit_xml包下读取怎么办,可以用这个语句TestDbUnit.class.getResourceAsStream("/dbunit_xml/t_user.xml"),运行也没有错误

三、Class.getResourceAsStream(String path) 与Class.getClassLoader.getResourceAsStream(String
path)

1. Class.getResourceAsStream(String path) : path 不以’/‘开头时默认是从此类所在的包下取资源,以’/‘开头则是从ClassPath根下获取。其只是通过path构造一个绝对路径,最终还是由ClassLoader获取资源。

2. Class.getClassLoader.getResourceAsStream(String path) :默认则是从ClassPath根下获取,path不能以’/‘开头,最终是由ClassLoader获取资源。

时间: 2024-10-26 07:11:43

dbunit之org.dbunit.dataset.DataSetException: java.net.MalformedURLException解决方法的相关文章

java中文乱码解决方法汇总

publicstaticvoidmain(String[]argv){ try{ System.out.println("中文");//1 System.out.println("中文".getBytes());//2 System.out.println("中文".getBytes("GB2312″));//3 System.out.println("中文".getBytes("ISO8859_1″));

Mac 下 Terminal 中 Java乱码的解决方法

在 .bash_profile 中增加一行 export JAVA_TOOL_OPTIONS=-Dfile.encoding=UTF-8 就可以了. Mac 下 Terminal 中 Java乱码的解决方法,布布扣,bubuko.com

java.lang.OutOfMemoryError: Java heap space解决方法

//首先检查程序有没有限入死循环 这个问题主要还是由这个问题 java.lang.OutOfMemoryError: Java heap space 引起的.第一次出现这样的的问题以后,引发了其他的问题.在网上一查可能是JAVA的堆栈设置太小的原因. 跟据网上的答案大致有这两种解决方法: 1.设置环境变量 解决方法:手动设置Heap size 修改TOMCAT_HOME/bin/catalina.sh set JAVA_OPTS= -Xms32m -Xmx512m 可以根据自己机器的内存进行更改

转载:java.lang.OutOfMemoryError: Java heap space解决方法

//首先检查程序有没有限入死循环 这个问题主要还是由这个问题 java.lang.OutOfMemoryError: Java heap space 引起的.第一次出现这样的的问题以后,引发了其他的问题.在网上一查可能是JAVA的堆栈设置太小的原因.跟据网上的答案大致有这两种解决方法:1.设置环境变量 解决方法:手动设置Heap size修改TOMCAT_HOME/bin/catalina.shset JAVA_OPTS= -Xms32m -Xmx512m可以根据自己机器的内存进行更改. 2.j

Java线程死锁解决方法(转)

转自:http://leowzy.iteye.com/blog/740859 Java线程死锁如何避免这一悲剧  Java线程死锁需要如何解决,这个问题一直在我们不断的使用中需要只有不断的关键.不幸的是,使用上锁会带来其他问题.让我们来看一些常见问题以及相应的解决方法: Java线程死锁 Java线程死锁是一个经典的多线程问题,因为不同的线程都在等待那些根本不可能被释放的锁,从而导致所有的工作都无法完成.假设有两个线程,分别代表两个饥饿的人,他们必须共享刀叉并轮流吃饭.他们都需要获得两个锁:共享

Arrays.asList引起的java.lang.UnsupportedOperationException解决方法

在项目中对List进行操作时报错java.lang.UnsupportedOperationException,后来发现操作的List是由数组转换而成的,通过看源码发现问题,并写测试程序如下. 代码块: public class ListTest { public static void main(String[] args) { String[] array = {"1","2","3","4","5"}

启动Eclipse报Initializing Java Tooling错误解决方法

打开Eclipse报错,百度之后按照https://blog.csdn.net/qq_39189632/article/details/78231839这个方法来解决 方法如下: 一.解决方法 (1).第一步删除项目目录下的文件:工作空间下的目录:\.metadata\.plugins\org.eclipse.core.resources\projects (2).第二步重新启动Eclipse 但如此之后,弹出另外一个报错 Could not write metadata for '/Remot

Java compiler level does not match the version of the installed Java project facet.解决方法

右键项目"Properties",在弹出的"Properties"窗口左侧,单击"Project Facets",打开"Project Facets"页面. 在页面中的"Java"下拉列表中,选择相应版本就OK了

java 包冲突解决方法

1.诊断包冲突 java.lang.NoSuchMethodError: org.apache.commons.io.output.DeferredFileOutputStream.<init>(ILjava/lang/String;Ljava/lang/String;Ljava/io/File;)V 2.解决 2.1 可见的依赖冲突 在eclipse中打开工程,在pom文件的dependency hierarchy中,搜冲突的包commons-io,查看各依赖包的依赖信息.包有依赖冲突的话,