3.8升4.1版本 aop throws Exception异常问题

3.8版本 升级到4.1时异常

getBrand方法前有调用拦截器@Before(PolicesInterceptor.class)

错误: 未报告的异常错误java.lang.Exception; 必须对其进行捕获或声明以便抛出

问题描述:

 /**

  *函数名称:getBrand

  *函数参数:

  *返 回 值:List<BasBrand>

  *函数功能:根椐用户编码所拥有的权限获取品牌权限列表信息

  ***/

 @Before(PolicesInterceptor.class)

 public List<BasBrand> getBrand() throws Exception{

  String key = getUser().get("cloudwarehouse") + this.getUserCode();

  List<BasBrand> brandlist = CacheKit.get(brandCacheName, key);

     if(brandlist == null){

      String sql = "select b.brand_code,b.brand_name from bas_brand b order by b.brand_code";

      brandlist = BasBrand.dao.find(sql);     

   if(brandlist!=null && brandlist.size()>0){

    CacheKit.put(brandCacheName, key, brandlist);

   }

     }

     return brandlist;

 }
 
 启动过程报错如下:
 Starting JFinal 4.1 -> http://0.0.0.0:8080
Info: jfinal-undertow 1.6, undertow 2.0.19.Final, jvm 1.8.0_181
2019-06-01 11:59:37
[ERROR]-[Thread: main]-[com.jfinal.proxy.ProxyCompiler.lambda$compile$0()]: /SelectService$$EnhancerByJFinal.java:9: 错误: 未报告的异常错误java.lang.Exception; 必须对其进行捕获或声明以便抛出
    return  SelectService$$EnhancerByJFinal.super.getBrand(
                                                          ^
java.lang.RuntimeException: java.lang.RuntimeException: java.lang.ClassNotFoundException: com.wms.common.service.SelectService$$EnhancerByJFinal
 at com.jfinal.aop.InterceptorManager.createInterceptor(InterceptorManager.java:172)
 at com.jfinal.aop.InterceptorManager.createInterceptor(InterceptorManager.java:150)
 at com.jfinal.aop.InterceptorManager.doBuild(InterceptorManager.java:82)
 at com.jfinal.aop.InterceptorManager.buildControllerActionInterceptor(InterceptorManager.java:74)
 at com.jfinal.core.ActionMapping.buildActionMapping(ActionMapping.java:81)
 at com.jfinal.core.JFinal.initActionMapping(JFinal.java:103)
 at com.jfinal.core.JFinal.init(JFinal.java:64)
 at com.jfinal.core.JFinalFilter.init(JFinalFilter.java:63)
 at io.undertow.servlet.core.LifecyleInterceptorInvocation.proceed(LifecyleInterceptorInvocation.java:111)
 at io.undertow.servlet.core.ManagedFilter.createFilter(ManagedFilter.java:80)
 at io.undertow.servlet.core.DeploymentManagerImpl$2.call(DeploymentManagerImpl.java:589)
 at io.undertow.servlet.core.DeploymentManagerImpl$2.call(DeploymentManagerImpl.java:554)
 at io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:42)
 at io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43)
 at io.undertow.servlet.core.DeploymentManagerImpl.start(DeploymentManagerImpl.java:596)
 at com.jfinal.server.undertow.UndertowServer.configHttp(UndertowServer.java:284)
 at com.jfinal.server.undertow.UndertowServer.doStart(UndertowServer.java:262)
 at com.jfinal.server.undertow.UndertowServer.start(UndertowServer.java:159)
 at com.wms.common.config.WmsConfig.main(WmsConfig.java:288)
Caused by: java.lang.RuntimeException: java.lang.ClassNotFoundException: com.wms.common.service.SelectService$$EnhancerByJFinal
 at com.jfinal.proxy.ProxyClassLoader.loadProxyClass(ProxyClassLoader.java:51)
 at com.jfinal.proxy.ProxyFactory.getProxyClass(ProxyFactory.java:70)
 at com.jfinal.proxy.ProxyFactory.get(ProxyFactory.java:41)
 at com.jfinal.proxy.Proxy.get(Proxy.java:32)
 at com.jfinal.aop.AopFactory.createObject(AopFactory.java:173)
 at com.jfinal.aop.AopFactory.doGetSingleton(AopFactory.java:87)
 at com.jfinal.aop.AopFactory.doGet(AopFactory.java:65)
 at com.jfinal.aop.AopFactory.doInject(AopFactory.java:157)
 at com.jfinal.aop.AopFactory.inject(AopFactory.java:125)
 at com.jfinal.aop.Aop.inject(Aop.java:105)
 at com.jfinal.aop.InterceptorManager.createInterceptor(InterceptorManager.java:165)
 ... 18 more
Caused by: java.lang.ClassNotFoundException: com.wms.common.service.SelectService$$EnhancerByJFinal
 at java.lang.ClassLoader.findClass(ClassLoader.java:530)
 at com.jfinal.proxy.ProxyClassLoader.findClass(ProxyClassLoader.java:64)
 at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
 at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
 at com.jfinal.proxy.ProxyClassLoader.loadProxyClass(ProxyClassLoader.java:49)
 ... 28 more

 

解决方法: 去掉getBrand的throws Exception ,可以正常启动

 /**
  *函数名称:getBrand
  *函数参数:
  *返 回 值:List<BasBrand>
  *函数功能:根椐用户编码所拥有的权限获取品牌权限列表信息
  ***/
 @Before(PolicesInterceptor.class)
 public List<BasBrand> getBrand(){
  String key = getUser().get("cloudwarehouse") + this.getUserCode();
  List<BasBrand> brandlist = CacheKit.get(brandCacheName, key);
     if(brandlist == null){
      String sql = "select b.brand_code,b.brand_name from bas_brand b order by b.brand_code";
      brandlist = BasBrand.dao.find(sql);     
   if(brandlist!=null && brandlist.size()>0){
    CacheKit.put(brandCacheName, key, brandlist);
   }
     }
     return brandlist;
 } 
 
 Starting JFinal 4.1 -> 
http://0.0.0.0:8080

Info: jfinal-undertow 1.6, undertow 2.0.19.Final, jvm 1.8.0_181

Starting Complete in 2.5 seconds. Welcome To The JFinal World (^_^)

为什么3.8正常,升4.1后就不能用throws Exception,看是那里使用不对造成的 需要怎么解决

 

评论区

JFinal

2019-06-01 14:04

稍等一会,下午解决这个问题

这个是忘了在子类中生成 throws 代码块了,为了彻底解决升级可能的问题, jfinal 会在 com.jfinal.ext 包下面提供一个扩展,当然,你碰到的这个问题会在 com.jfinal.proxy 里头解决。 扩展用于防患于未然

binke

2019-06-01 15:19

@JFinal 好的 谢谢波总

热门反馈

扫码入社