我正在使用 Play 2.1.1。我有一个 CSV 解析器类,如下所示:
public List<Bean> readCsv() throws Exception {
List<Bean> beans= new ArrayList<Bean>();
ICsvDozerBeanReader beanReader = null;
try{
//String csvName =
String csvName = "file.csv";
beanReader = new CsvDozerBeanReader(new FileReader(csvName), CsvPreference.STANDARD_PREFERENCE);
beanReader.getHeader(true); //to ignore header
beanReader.configureBeanMapping(Bean.class, FIELD_MAPPING);
Bean bean = null;
while( (bean= beanReader.read(Bean.class, processors)) != null ) {
beans.add(bean);
}
}finally{
if( beanReader != null ) {
beanReader.close();
}
}
此方法适用于junit:
@Test
public void testCsvParser() {
CSVLoaderServiceImpl service = new CSVLoaderServiceImpl();
List<Bean> beans = null;
try {
beans = service.readCsv();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
assertEquals(236, beans.size());
}
如果我将此确切代码复制到 Application.java 中的控制器方法之一。应用程序因未找到类异常而崩溃。
public static Result jsonMap(){
CSVLoaderServiceImpl service = new CSVLoaderServiceImpl();
List<Bean> beans = null;
try {
beans = service.readCsv();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return ok(beans.toString());
}
这是堆栈跟踪:
Caused by: java.lang.ClassNotFoundException: packageName.Bean
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
at sbt.PlayCommands$$anonfun$53$$anonfun$55$$anon$2.loadClass(PlayCommands.scala:535)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:266)
at org.apache.commons.lang.ClassUtils.getClass(ClassUtils.java:754)
at org.apache.commons.lang.ClassUtils.getClass(ClassUtils.java:802)
at org.apache.commons.lang.ClassUtils.getClass(ClassUtils.java:785)
at org.dozer.util.DefaultClassLoader.loadClass(DefaultClassLoader.java:3
我认为当 Play 处理启动 junit 的方法时,类加载器是不同的。真的不知道如何解决它。
更新:这是发生 classnotfoundexception 的行:
beanReader.configureBeanMapping(Bean.class, FIELD_MAPPING);
任何帮助将不胜感激
非常感谢