`
j夫子
  • 浏览: 92552 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

apache-beanutils 记录一个很诡异的问题(已解决)

    博客分类:
  • java
 
阅读更多
public class MyBeanUtils
    extends org.apache.commons.beanutils.BeanUtils {

public static void copyBeanNotNull2Bean(Object databean,Object tobean)throws Exception
  {
	  PropertyDescriptor origDescriptors[] =
          PropertyUtils.getPropertyDescriptors(databean);
      for (int i = 0; i < origDescriptors.length; i++) {
          String name = origDescriptors[i].getName();
//          String type = origDescriptors[i].getPropertyType().toString();
          if ("class".equals(name)) {
              continue; // No point in trying to set an object's class
          }
          if (PropertyUtils.isReadable(databean, name) &&
              PropertyUtils.isWriteable(tobean, name)) {
              try {
                  Object value = PropertyUtils.getSimpleProperty(databean, name);
                  if(value!=null){
                	    copyProperty(tobean, name, value);
                  }
              }
              catch (java.lang.IllegalArgumentException ie) {
                  logger.error(ie,ie); // Should not happen
              }
              catch (Exception e) {
                  logger.error(e,e); // Should not happen
              }

          }
      }
  }
}

 

使用这段代码进行javabean的复制,并且srcBean为null的字段,不进行复制。

 

这段代码测试环境是正常的,在生产环境下,运行一段时间后(大概有1个月的样子),就会出现很诡异的问题,javaBean里面Integer,Long等类型的 复制后字段变成null了(源javaBean和目标javaBean该字段都不不为空的情况下)。

 

正在持续监测中...

 

注:copyProperty 方法是继承于org.apache.commons.beanutils.BeanUtils

 ===================================================================

 

2014/04/27

问题终于解决了!

原因是项目引用的另一个第三方jar包里,对BeanUtils注册了全局的转换器

 

ConvertUtils.register(new xxx.DateConverter(), Date.class);
ConvertUtils.register(new xxx.BigDecimalConverter(), BigDecimal.class);
ConvertUtils.register(new xxx.IntegerConverter(), Integer.class);

 

而这三个转换器里面因为某种原因,存在这样的逻辑:

即srcBean和targetBean中类型相同的字段,返回null

 

这个第三方jar也使用了apache beanUtils,不过用途并不是复制bean,所以使用了这种逻辑的转换。

结果就是造成了我的项目中 一旦使用了这个第三方jar的功能之后,转换器被注册,之后便出现了文中开头的问题,也就是所谓的“运行一段时间后,便出现bean复制null的情况”。

分享到:
评论

相关推荐

    commons-beanutils-1.9.3jar包source包及相关jar包

    Apache Commons BeanUtils是Java开发中的一个非常重要的工具库,它为开发者提供了便利的方式来操作JavaBeans。这个库的主要目标是简化JavaBean属性的访问,通过提供一套简单易用的API,使得开发者无需直接调用getter...

    commons-beanutils-1.9.1.jar<---&gt;commons-logging-1.1.3.jar

    Commons BeanUtils库是Apache软件基金会开发的一个Java工具包,它为Java编程提供了一种便捷的方式来操作JavaBeans。这个库的核心是它的BeanUtils类,它提供了一系列的方法,使得开发者可以通过属性名称来读取和设置...

    commons-beanutils-1.9.3

    Apache Commons BeanUtils是Java开发中的一个实用库,它提供了对JavaBeans对象的便捷操作。这个库简化了属性的获取和设置,以及类型转换等任务,极大地提高了开发效率。标题"commons-beanutils-1.9.3"指的是该库的一...

    commons-beanutils-core-1.8.0-BETA.zip

    总之,Apache Commons BeanUtils Core 1.8.0-BETA是一个强大的工具,它简化了Java Bean操作,提高了开发效率,同时也为开发者提供了灵活的解决方案。理解和掌握这个库的使用,能够帮助我们在Java开发中更好地管理和...

    commons-beanutils-1.8.0.jar、commons-logging-1.1.1.jar

    Apache Commons BeanUtils是Java开发中的一个实用工具库,它提供了对JavaBeans操作的强大支持。这个库简化了在Java应用程序中处理Java对象的属性的工作。在本篇中,我们将深入探讨`commons-beanutils-1.8.0.jar`和`...

    commons-beanutils-1.8.0

    首先,`commons-beanutils-1.8.0.jar`是Apache Commons项目的一个子项目,其核心目标是提供一套用于操作JavaBean属性的工具类。这个版本的BeanUtils库包含了对JavaBeans的全面支持,包括属性的获取、设置、复制以及...

    commons-beanutils-1.8.3-bin.zip VS commons-logging-1.1.1-src.zip

    Apache Commons BeanUtils是一个Java库,提供了方便的工具类来简化对象属性的操作。它允许开发者通过简单的字符串命名规则来访问和修改对象的属性,而无需直接调用getter和setter方法。在`commons-beanutils-1.8.3-...

    commons-beanutils.jar带commons-logging.jar

    在Java开发中,Apache Commons BeanUtils是一个非常实用的工具库,它极大地简化了JavaBean对象之间的属性操作,使得开发者能够更高效地处理对象属性的设置、获取和复制。而Apache Commons Logging则是一个轻量级的...

    beanutils jar包

    Apache Commons BeanUtils是Apache软件基金会提供的一个开源项目,它提供了一组方便的工具类,用于简化JavaBean操作。BeanUtils库的核心功能包括:属性的动态读写、对象间的属性复制、类型转换等。在给定的“commons...

    commons-beanutils-1.8.3+commons-logging-1.1.1+itcast-tools-1.4.2

    标题中的"commons-beanutils-1.8.3+commons-logging-1.1.1+itcast-tools-1.4.2"提及了三个Java库:Apache Commons BeanUtils 1.8.3版本,Apache Commons Logging 1.1.1版本,以及一个名为itcast-tools的工具集1.4.2...

    多个版本commons-beanutils.jar和commons-logging-1.2.1..jar1

    Apache Commons BeanUtils是一个实用工具库,专门用于处理JavaBeans。它简化了JavaBean属性的访问,提供了对Java反射API的简单封装,使得开发者可以方便地操作对象的属性,而无需直接调用getter和setter方法。例如,...

    beanutils-logging.zip

    Apache Commons BeanUtils是Apache软件基金会的一个开源项目,它提供了一套便捷的JavaBean操作API,使得开发者可以方便地进行JavaBean属性的读写操作,无需手动编写getter和setter方法。BeanUtils的核心功能包括: ...

    beanutils 有两个 包 一个日志包一个bean包

    在Java开发领域,Apache BeanUtils库是一个非常实用的工具包,它为开发者提供了方便的Java Bean操作。这个库主要由两个部分组成:日志包和Bean包,它们各自扮演着不同的角色,帮助开发者更高效地处理Java对象。 ...

    beanutils所需三个jar包.zip

    最后,`commons-logging-1.2.jar`是Apache Commons Logging库,它提供了一个API,允许程序代码以一种统一的方式记录日志,而无需关心实际使用的日志实现(如Log4j或Java内置的日志框架)。在BeanUtils中,这个库用于...

    beanutils JAR包下载

    1. **属性复制(Property Copying)**:BeanUtils提供了一个`copyProperties()`方法,可以将一个JavaBean对象的属性值复制到另一个对象,极大地简化了对象间的属性同步。 2. **动态属性访问(Dynamic Property ...

    BeanUtils开发包

    BeanUtils是Apache Commons项目中的一个核心工具包,主要用于JavaBean对象的属性操作。这个开发包提供了许多方便的方法,使得在处理Java对象的属性时能够更加简单和便捷。它基于Java反射机制,允许开发者以一种相对...

    BeanUtils工具类的Jar包

    它提供了一个统一的接口,简化了日志记录的代码,并且可以根据部署环境选择最适合的日志框架,提高了代码的可移植性和灵活性。 BeanUtils的主要知识点包括: 1. **属性复制**:`copyProperties()`方法可以将源对象...

    beanutils的jar包

    这个"beanutils的jar包"是1.93版本,它包含了对bean操作的各种方法,同时也集成了log包,方便开发者进行日志记录,这对于在不同JDK版本环境中调试和解决问题特别有帮助。 首先,BeanUtils库的核心功能在于提供了一...

    BeanUtils依赖Jar包与源码.rar

    例如,BeanUtils.copyProperties()方法能够方便地将一个Bean的所有属性值复制到另一个Bean,这对于数据迁移或对象复制场景非常有用。同时,BeanUtils.getProperty()和BeanUtils.setProperty()允许开发者通过字符串...

Global site tag (gtag.js) - Google Analytics