从控制器调用方法时播放框架 - classnotfoundexception。使用junit进行测试时工作正常

时间:2013-06-21 15:23:27

标签: java junit playframework playframework-2.1

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

非常感谢任何帮助

非常感谢

0 个答案:

没有答案