`
147175882
  • 浏览: 133878 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

解决struts2,hibernate与jsonpulugin集成时的一个异常

阅读更多
最近用struts2,hibernate集成jsonpulugin时遇到一个异常,在baidu和google上查了很久,很多人遇到了类似的问题,但都没有满意的答案.看了两天源码,终于知道怎么解决这个问题,和大家分享下,

异常描述如下:

com.googlecode.jsonplugin.JSONException: java.lang.IllegalAccessException: Class com.googlecode.jsonplugin.JSONWriter can not access a member of class org.apache.commons.dbcp.PoolingDataSource$PoolGuardConnectionWrapper with modifiers "public"
com.googlecode.jsonplugin.JSONWriter.bean(JSONWriter.java:241)
com.googlecode.jsonplugin.JSONWriter.process(JSONWriter.java:161)
com.googlecode.jsonplugin.JSONWriter.value(JSONWriter.java:127)
com.googlecode.jsonplugin.JSONWriter.write(JSONWriter.java:95)
com.googlecode.jsonplugin.JSONUtil.serialize(JSONUtil.java:98)
com.googlecode.jsonplugin.JSONResult.execute(JSONResult.java:177)
com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:361)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:265)
com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:163)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:249)
org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:122)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:148)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:93)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:235)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:89)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:128)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
org.apache.struts2.interceptor.ProfilingActivationInterceptor.intercept(ProfilingActivationInterceptor.java:104)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:267)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:126)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:138)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:148)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:128)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:176)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:163)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:249)
org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:122)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:148)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:93)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:235)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:89)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:126)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:138)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:148)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:128)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:176)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52)
org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:468)
org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:76)
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:96)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)



分析原因,是因为jsonplugin用的是java的内审机制.hibernate会给被管理的pojo加入一个hibernateLazyInitializer属性,jsonplugin会把hibernateLazyInitializer也拿出来操作,并读取里面一个不能被反射操作的属性就产生了这个异常.

所以解决方案很简单,只要在result里面配置params的excludeProperties属性就可以啦.
如下,我用的是struts2Coc配置
pojo类的配置如下
@JSON(name="gen" )
    public GenTable getGenTable() {
return genTable;
}
@Action(results={@Result(type="json", name="", params={"excludeProperties", "gen.hibernateLazyInitializer"})})
很明显,只要在jsonplugin操作时,加入把genTable(别名gen)的属性hibernateLazyInitializer排除就可以了.想通用点的话,就把gen.hibernateLazyInitializer改为.*hibernateLazyInitializer

分享到:
评论
3 楼 147175882 2009-07-20  


<action name="findPressById" class="pressAction" method="findPressById"> 
            <result type="json"> 
                <param name="includeProperties">press.*,success</param> 
            </result> 
<result type="json"> 
                <param name="excludeProperties">press.hibernateLazyInitializer</param> 
            </result>
        </action>
2 楼 yourgame 2009-07-19  
对了.我出现的是
com.googlecode.jsonplugin.JSONException: java.lang.reflect.InvocationTargetException
这个异常
1 楼 yourgame 2009-07-19  
//这个是我的action
public class PressAction extends BaseAction {

	private IPressService pressService;

	private Press press;

	private boolean success;

	private Page page;

	private Map<String, Object> infos;

        public String findPressById() {
		Press p = pressService.getPressById(press.getPid());
		if (p != null) {
			this.press = p;
			this.success = true;
		}
		return SUCCESS;
	}
//settter getter
}

//这个是要json的javabean
public class Press implements Serializable {

	private String pid;

	private String year; // 年

	private String month; // 月

	private String pressCode; // 报刊代号

	private String pressName; // 报刊名称

	private String pressCycle; // 刊期

	private String publicationLocation;// 出版地

	private String categories;// 分类
	
	private String publicationDate;// 出版日期

	private Double price; // 单价

	private Double priceMonth;// 月价

	private Double priceYear;// 年价

	private String remark;// 备注

	private String pressType;// 报刊种类

	private String shortCode;// 简拼代码

	private String issn;// 刊号
//stter getter
}


struts2中这样配置他
<action name="findPressById" class="pressAction" method="findPressById">
			<result type="json">
				<param name="includeProperties">press.*,success</param>
			</result>
		</action>


总是报你说的那种异常,我要怎么解决呢?请求你的帮助

相关推荐

    struts2与Hibernate整合

    通过以上步骤,我们可以实现一个基本的登录与注册功能,利用Struts2处理前端请求,Hibernate处理后台数据操作,整个流程既清晰又高效。实际项目中,这只是一个起点,随着需求的增加,我们还会涉及到更多的功能和更...

    eclipse_struts_hibernate_spring集成开发宝典 StrutsInterface.rar

    《Eclipse、Struts、Hibernate、Spring 集成开发宝典》是针对Java企业级应用开发的一套经典教程,涵盖了四个核心的技术框架:Eclipse作为开发环境,Struts作为表现层框架,Hibernate作为持久层框架,Spring作为全面...

    Struts2与Hibernate3的集成开发案例——网上书店

    Struts2作为MVC(模型-视图-控制器)架构的实现,主要用于处理Web应用中的业务逻辑和控制流程,而Hibernate3则是一个对象关系映射(ORM)工具,简化了数据库操作,将Java对象与数据库表进行映射,实现了数据的持久化...

    eclipse_struts_hibernate_spring集成开发宝典 blog.rar

    《Eclipse、Struts、Hibernate、Spring 集成开发宝典》是针对Java企业级应用开发的一套经典教程,其核心在于讲解如何在Eclipse环境下整合Struts、Hibernate和Spring这三个主流框架,构建高效、灵活的企业级应用程序...

    Struts2Hibernate整合jar包

    Struts2Hibernate整合jar包,直接放进工程里用就可以了,不少东西

    struts+hibernate 项目

    这个“Struts+Hibernate项目”旨在为开发者提供一个学习和实践的平台,帮助他们快速理解这两种框架的集成使用,并应用于实际项目开发。 Struts是一个基于MVC(Model-View-Controller)设计模式的开源框架,主要用于...

    Struts,Hibernate,Spring集成开发宝典.pdf

    《Struts Hibernate Spring集成开发宝典》以Struts,Hibernate,Spring为核心详细地讲解了这三个组件的基础知识和基本使用方法,并通过一系列集成开发实例讲解了这三个组件在J2EE项目中的应用。《Struts Hibernate ...

    struts2 spring hibernate集成

    集成Struts2、Spring和Hibernate时,需要注意配置文件的正确设置,包括Action配置、Spring Bean的定义、Hibernate的数据库连接和实体映射。同时,理解这三个框架的工作原理和相互作用,对于解决问题和优化代码至关...

    struts+hibernate整合jar包

    这些库文件包含了运行一个基于Struts 2和Hibernate的Web应用所需的所有核心组件,例如Struts 2的动作调度、视图渲染、拦截器实现,以及Hibernate的对象持久化、查询工具等。在导入项目时,只需将这些jar包添加到项目...

    struts2 hibernate spring j集成

    将这三个框架集成,主要目标是构建一个完整的MVC应用,其中Struts2负责控制层,Hibernate负责数据访问层,Spring作为胶水框架,整合各层并提供事务管理、AOP等功能。集成步骤通常包括: 1. **配置Struts2**:添加...

    图书管理系统spring+struts+hibernate

    library_ssh2可能是一个包含系统源代码的压缩文件,"ssh2"可能表示系统使用了Struts2、Spring2和Hibernate2这三个框架的早期版本。这个文件中应包含所有必要的Java源代码、配置文件、Web应用相关的资源(如JSP页面、...

    C:\Struts,Hibernate,Spring集成开发宝典\Struts,Hibernate,Spring集成开发宝典光盘资料12.rar

    《Struts,Hibernate,Spring集成开发宝典》是一本深入探讨Java企业级应用开发的权威指南,主要聚焦于三大主流框架——Struts、Hibernate和Spring的整合应用。这些框架是Java EE(以前的J2EE)开发中的核心组件,极...

    C:\Struts,Hibernate,Spring集成开发宝典\Struts,Hibernate,Spring集成开发宝典光盘资料10.rar

    《Struts,Hibernate,Spring集成开发宝典》是一本深入探讨Java企业级应用开发的权威指南,主要聚焦于三大主流框架——Struts、Hibernate和Spring的整合应用。这本书的光盘资料10.rar包含了丰富的学习资源,对于想要...

    论坛系统项目(Struts 2+Hibernate+Spring实现)

    论坛系统项目(Struts 2+Hibernate+Spring实现)论坛系统项目(Struts 2+Hibernate+Spring实现)论坛系统项目(Struts 2+Hibernate+Spring实现)论坛系统项目(Struts 2+Hibernate+Spring实现)论坛系统项目(Struts...

    C:\Struts,Hibernate,Spring集成开发宝典\Struts,Hibernate,Spring集成开发宝典光盘资料3.rar

    在《Struts,Hibernate,Spring集成开发宝典》的光盘资料3中,可能包含的子文件“strutsext”可能是指Struts的扩展,例如Struts2的一个插件或扩展库。Struts2相较于Struts1,引入了更多特性和改进,如更灵活的动作...

    C:\Struts,Hibernate,Spring集成开发宝典\Struts,Hibernate,Spring集成开发宝典光盘资料6.rar

    《Struts,Hibernate,Spring集成开发宝典》是一本深入探讨Java企业级应用开发的经典教程,专注于这三大框架的整合与应用。光盘资料6包含了该书中的实践案例和相关资源,对于学习和掌握这些技术提供了宝贵的实战素材...

    C:\Struts,Hibernate,Spring集成开发宝典\Struts,Hibernate,Spring集成开发宝典光盘资料2.rar

    在光盘资料2的"springapp"子目录中,很可能包含了一个完整的Spring驱动的Struts和Hibernate集成示例应用。这个应用可能包括了配置文件(如struts-config.xml、hibernate.cfg.xml、applicationContext.xml等)、实体...

    SSH集成 Struts+spring+hibernate集成

    SSH集成是Java开发Web应用程序时常用的一种框架整合方式,它结合了Struts、Spring和Hibernate三个开源框架的优势,提供了一种高效、灵活且易于管理的解决方案。以下将详细阐述这三个框架以及它们集成后的主要特点和...

    C:\Struts,Hibernate,Spring集成开发宝典\Struts,Hibernate,Spring集成开发宝典光盘资料8.rar

    《Struts,Hibernate,Spring集成开发宝典》是一本深入探讨Java企业级应用开发的权威指南,主要聚焦于三大主流框架——Struts、Hibernate和Spring的整合应用。这本书的光盘资料8.rar包含了作者精心准备的示例代码和...

    spring_struts_hibernate整合开发书籍

    《Spring+Struts+Hibernate整合开发》是一本深入讲解企业级Java应用开发的书籍,它主要聚焦于三大著名开源框架——Spring、Struts和Hibernate的集成与应用。这些框架是Java Web开发中的基石,广泛应用于各种复杂的...

Global site tag (gtag.js) - Google Analytics