黑马程序员技术交流社区

标题: 【石家庄校区】异常处理笔记 [打印本页]

作者: 荷曳清池    时间: 2017-12-9 14:45
标题: 【石家庄校区】异常处理笔记
本帖最后由 小石姐姐 于 2017-12-11 15:11 编辑

【切点表达式类--spring开启事务配置中出现的异常】
Java.lang.IllegalArgumentException: Pointcut is not well-formed: expecting '(' at character position0   类异常
解决方案:
        错误前:
                <aop:advisor advice-ref="txAdvice" pointcut="txPointcut"/>
        修正后:
                <aop:advisor advice-ref="txAdvice" pointcut-ref="txPointcut"/>            
【在ssh框架整合的时候出现异常:找不到setter和getter的问题】
        重点留意:
                属性的变量名与applicationContext.xml中<bean>下<property name="">中的name值是否对应,否则很有可能报错               
【在ssh框架整合的时候出现异常:空指针异常】
        重点留意:   
                在struts.xml文件中,action的class的值是否为在applicationContext.xml文件中aciton对应的bean的id名
                                        <action name="user_*" class="userAction" method={1}>
                                                <result name="success">/success.jsp</result>
                                        </action>
【ssh整合action中找不到方法】
        java.lang.NoSuchMethodException: com.cpstory.web.UserAction.login()
        重点留意:
                1.方法不能被private修饰
                2.检查大小写是否正确
                3.方法名是否写错              
【ssh整合之路径填写正确,注解配置正确,还是报找不到路径】
        重点留意:
                aciton所在的包中,该包包名或者父类包名是否为action actions struts struts2
【ssh在整合hibernate出现no session的解决办法】
        在web.xml中配置:
        [注意]:以下配置需要配置在struts2核心过滤器前面
                <!-- 解决hibernate延迟加载问题 -->
                <filter>
                        <filter-name>openSessionInView</filter-name>
                        <filter-class>org.springframework.orm.hibernate5.support.OpenSessionInViewFilter</filter-class>
                </filter>
               
                <filter-mapping>
                        <filter-name>openSessionInView</filter-name>
                        <url-pattern>/*</url-pattern>
                </filter-mapping>   
【ssd在整合spring data 中出现no session的解决办法】
        [注意]:以下配置需要配置在struts2核心过滤器前面      
                <!-- 配置jpa解决no session问题过滤器 -->
                <filter>   
                        <filter-name>Spring OpenEntityManagerInViewFilter</filter-name>   
                        <filter-class>org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter</filter-class>   
                        <init-param>   
                        <!-- 指定org.springframework.orm.jpa.LocalEntityManagerFactoryBean在spring配置文件中的名称,默认值为entityManagerFactory   
                        如果LocalEntityManagerFactoryBean在spring中的名称不是entityManagerFactory,该参数一定要指定,否则会出现找不到entityManagerFactory的例外 -->   
                                <param-name>entityManagerFactoryBeanName</param-name>   
                                <param-value>entityManagerFactory</param-value>   
                        </init-param>     
                </filter>   
                <filter-mapping>   
                        <filter-name>Spring OpenEntityManagerInViewFilter</filter-name>   
                        <url-pattern>/*</url-pattern>   
                </filter-mapping>     
【关于使用easyui 在做修改回显的对象出现违反唯一约束的异常】
        需要在form表单添加一个:
                        <!--提供隐藏域 装载id,这是必须的,否则在修改的时候会报违反唯一约束的错误 -->
                        <input type="hidden" name="id"/>
【设置vscode 默认字符集编码】
        将文件-->首选项-->设置中的"files.autoGuessEncoding"项的值改为true即可。
【spring data jpa 和webservice问题】
        今天在使用webservice rs犯了一个常识性错误
        1在使用client 在发送get请求 的时候 service接口中误使用put方式进行接收
         同时,没有添加产出者注解@Produces,导致查询结果一直出现返回数据异常(405)
        2在使用spring data jpa的时候没有注意到在使用查询方法findByTelephone()的时候返回结果不是唯一,出现了查询结果异常,
        这里一定要注意,在使用jpa的默认方法的时候一定要        再次确认返回的数据类型        
【使用kindeditor插件注意事项】
        //KindEditor 工作原理,隐藏原来 textarea 文本框,生成 iframe,在 iframe 里面进行编辑,需要加上这条:
        window.editor.sync();
【struts2拦截器interceptor问题之一】
        问题描述:
                在使用WebService技术调第三方接口的时候,经过检查web.xml中servlet配置正确,applicationContext.xml中配置正确。接口连接拼接正确              
                发现以下错误信息:
                经过反复检查,发现在serviceImpl中没有进行注入repository......  @Autowired  
                记录下来,铭记于心。
               
        09:44:39,372  INFO LoggingInInterceptor:250 - Inbound Message
----------------------------
ID: 1
Address: http://localhost:9001/bos_management/services/promotionService/findpromotionbypage?page=1&rows=2
Http-Method: GET
Content-Type:
Headers: {Accept=[text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8], accept-encoding=[gzip, deflate, sdch, br], accept-language=[zh-CN,zh;q=0.8], cache-control=[max-age=0], connection=[keep-alive], Content-Type=[null], cookie=[tale_remember_author=cpstory; tale_remember_mail=278369091%40qq.com; tale_remember_url=http%3A%2F%2Fwww.baidu.com; S_L_ID=UVpo//LeR+sFt0AIDPg5JQ==], host=[localhost:9001], upgrade-insecure-requests=[1], user-agent=[Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36]}
--------------------------------------
09:44:39,397  WARN PhaseInterceptorChain:452 - Application {http://impl.outputservice.service.bos.cpstory.com/}OutputPromotionServiceImpl has thrown exception, unwinding now
org.apache.cxf.interceptor.Fault
        
Caused by: java.lang.NullPointerException
        at com.cpstory.bos.service.outputservice.impl.OutputPromotionServiceImpl.findPromotionByPage(OutputPromotionServiceImpl.java:23)

09:44:39,403  WARN PhaseInterceptorChain:482 - Exception in handleFault on interceptor org.apache.cxf.jaxrs.interceptor.JAXRSDefaultFaultOutInterceptor@24a5bb3
org.apache.cxf.interceptor.Fault

Caused by: java.lang.NullPointerException
        at com.cpstory.bos.service.outputservice.impl.OutputPromotionServiceImpl.findPromotionByPage(OutputPromotionServiceImpl.java:23)        
【quartz与spring进行整合的时候出现bean无法注入的问题】:
        【解决方案一】:
                【applicationContext.xml配置文件中】:
                        <?xml version="1.0" encoding="UTF-8"?>
                        <beans xmlns="http://www.springframework.org/schema/beans"
                                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                                xmlns:context="http://www.springframework.org/schema/context"
                                xsi:schemaLocation="
                                        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
                                        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd ">
                                
                                <!-- 扫描@Controller、@Service、@Repository、@Component等 -->
                                <context:component-scan base-package="com.cpstory.quartz.service" />               
                                
                                <bean id="helloJob" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
                                        <property name="targetObject" ref="helloService" />
                                        <property name="targetMethod" value="sayHi" />
                                </bean>
                                
                                <!-- SimpleTriggerFactoryBean,由spring提供 -->
                                <bean id="simpleTrigger"
                                        class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
                                        <property name="jobDetail" ref="helloJob" />
                                        <!-- 3秒后第一次执行 -->
                                        <property name="startDelay" value="3000" />
                                        <!-- 之后每5秒重复执行一次 -->
                                        <property name="repeatInterval" value="5000" />
                                </bean>
                                
                                <!-- scheduler,scheduler关联trigger,trigger关联job  -->
                                <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
                                        <!-- <property name="jobFactory" ref="jobFactory" /> -->
                                        <property name="triggers">
                                                <list>
                                                        <ref bean="simpleTrigger"/>
                                                </list>
                                        </property>
                                </bean>
                                
                        </beans>

        【Job类中。。。。。】

                import org.quartz.Job;
                import org.quartz.JobExecutionContext;
                import org.quartz.JobExecutionException;
                import org.springframework.beans.factory.annotation.Autowired;
                import org.springframework.stereotype.Component;

                import com.cpstory.quartz.service.service.HelloService;

                @Component   //需要将jobbean交给spring来管理
                public class HelloJob implements Job{
                                       
                        @Autowired
                        private HelloService helloService;
                        
                        public void execute(JobExecutionContext context) throws JobExecutionException {
                                helloService.sayHi();
                        }
                }

     【service类中】:
                 import org.springframework.stereotype.Service;

                @Service
                public class HelloService {
                        public void sayHi(){
                                System.out.println("我是HelloService.....");
                        }
               
                }

【解决方案二:自定义的jobFactory】:
        【applicationContext.xml配置文件中】:
                【注意!】:这种方式的Job不能直接注入,否则会报错!!!!!!!
                <?xml version="1.0" encoding="UTF-8"?>
                <beans xmlns="http://www.springframework.org/schema/beans"
                        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                        xmlns:context="http://www.springframework.org/schema/context"
                        xsi:schemaLocation="
                                http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
                                http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd ">
                        
                        <!-- 扫描@Controller、@Service、@Repository、@Component  -->
                        <context:component-scan base-package="com.cpstory.quartz.service" />
                        
                        <!-- 配置执行流程说明:
                                        1.注入由spring提供的JobDetailFactoryBean,传入参数(自定义的job)来获得一个JobDetail执行任务
                                        2.注入由spring提供的SimpleTriggerFactoryBean,传入参数
                                                        (由1产生的JobDetail、第一次执行时间、执行间隔时间),来获得一个Trigger触发器
                                        3.注入由spring提供的SchedulerFactoryBean,传入参数
                                                        (自定义的jobFactory[需要添加注解将该类交给spring进行管理]、
                                                        由2产生的所有trigger )
                        -->
                        <bean id="helloJob"
                                class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
                                <property name="jobClass" value="com.cpstory.quartz.service.job.HelloJob" />
                        </bean>
                        
                        <!-- SimpleTriggerFactoryBean,由spring提供 -->
                        <bean id="simpleTrigger"
                                class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
                                <property name="jobDetail" ref="helloJob" />
                                <!-- 3秒后第一次执行 -->
                                <property name="startDelay" value="3000" />
                                <!-- 之后每5秒重复执行一次 -->
                                <property name="repeatInterval" value="5000" />
                        </bean>
                        
                        <!-- scheduler,scheduler关联trigger,trigger关联job  -->
                        <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
                                <property name="jobFactory" ref="jobFactory" />
                                <property name="triggers">
                                        <list>
                                                <ref bean="simpleTrigger"/>
                                        </list>
                                </property>
                        </bean>
                        
                </beans>

        【Job类中】:

                import org.quartz.Job;
                import org.quartz.JobExecutionContext;
                import org.quartz.JobExecutionException;
                import org.springframework.beans.factory.annotation.Autowired;

                import com.cpstory.quartz.service.service.HelloService;


                public class HelloJob implements Job{
                        
                        /**
                        *  在这里通过自定义jobFactory来解决helloService无法被自动注入的问题
                        *  因为service是通过自动注入来获得的,但是HelloJob并不是被spring所管理的
                        *  因此需要在配置文件中配置了:
                        *          <property name="jobFactory" ref="jobFactory" />
                        *          来引入我们自定义的jobFactory(参见jobFactory的注释)
                        *                  这样就最终实现了让HelloJob被spring所管理
                        */
                        @Autowired
                        private HelloService helloService;
                        
                        public void execute(JobExecutionContext context) throws JobExecutionException {
                                helloService.sayHi();
                        }
                }
        【service类中】:
               
                import org.springframework.stereotype.Service;

                @Service
                public class HelloService {
                        public void sayHi(){
                                System.out.println("我是HelloService.....");
                        }
                }
        
        【自定义JobFactory类中】:

                import org.quartz.spi.TriggerFiredBundle;
                import org.springframework.beans.factory.annotation.Autowired;
                import org.springframework.beans.factory.config.AutowireCapableBeanFactory;
                import org.springframework.scheduling.quartz.AdaptableJobFactory;
                import org.springframework.stereotype.Service;

                /**
                *        说明: jobFactory通过注解@service被spring所管理
                *                   同时注入了一个AutowireCapableBeanFactory
                *                  在createJobInstance()方法中,通过传入的bundle或得到一个job的实例,
                *                        再将这个job实例注入到spring容器中
                */

                @Service("jobFactory")
                public class JobFactory extends AdaptableJobFactory {
                        
                        @Autowired
                        private AutowireCapableBeanFactory capableBeanFactory;
                        
                        protected Object createJobInstance(TriggerFiredBundle bundle)
                                        throws Exception {
                                Object jobInstance = super.createJobInstance(bundle);
                                capableBeanFactory.autowireBean(jobInstance);
                                return jobInstance;
                        }

                }

        【hibernate瞬时态对象转为持久态出现的异常Transient】
                [异常信息]:
                                 org.hibernate.TransientPropertyValueException:
                                 object references an unsaved transient instance - save the transient instance before flushing :
                                 com.cpstory.bos.domain.take_delivery.Order.recArea -> com.cpstory.bos.domain.base.Area;
                                  nested exception is java.lang.IllegalStateException:
                                   org.hibernate.TransientPropertyValueException:
                                    object references an unsaved transient instance - save the transient instance before flushing :
                                         com.cpstory.bos.domain.take_delivery.Order.recArea -> com.cpstory.bos.domain.base.Area

                [解决办法]:
                        对象是从数据库中查出来的,而不是new出来的,先去数据库中查询        

        【关于quartz调度框架的问题】
                如果不同的action调用quartz框架所调用的service服务的时候,会出现异常,因此需要另外创建service进行调用

        【在处理shiro权限框架的时候遇到一个问题】
                Caused by: org.springframework.data.mapping.PropertyReferenceException: No property login found for type com.wzx.bean.User

                经过检查,发现问题出在repository导包处,错误的导入elasticsearch的Query包,因此报错

                在处理类似问题的时候,一定要注意检查1.是否是使用了jpa的默认查询规范,如果是使用@Query注解进行自定义查询,一定要记得检查导包是否正确
        
        【在配置spring + ehcache + shiro  进行整合的时候出现了一个问题】
                Caused by: java.lang.IllegalStateException: Cannot convert value of
                        type [java.lang.String] to required type [org.apache.shiro.cache.CacheManager]
                                 for property 'cacheManager': no matching editors or conversion strategy found

                出现问题位置:
                                <!-- 安全管理器  -->
                                <bean id="securityManager"
                                        class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
                                        <property name="realm" ref="bosRealm" />
                                        <property name="cacheManager" value="shiroCacheManager" />
                                </bean>
                原因: 错误的将ref写成了value

        【在整合ehcach的时候出现循环应用问题】
                返回了一个125MB的json串,问题在一个po类中两个集合出现了相互引用的情况

                解决办法:在其中一个上面加上注解@JSON(serialize = true)

        【elasticsearch 出现栈内存溢出】
                在实体类上没有配置注解@JsonIgnore   
作者: 小石姐姐    时间: 2017-12-11 15:25
加油




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2