我正在使用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);
非常感谢任何帮助
非常感谢