4

我正在使用 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);

任何帮助将不胜感激

非常感谢

4

0 回答 0