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

发现一个jet2的bug

阅读更多

最近在做一个代码生成的项目,使用的是jet2,感觉比较容易学习和上手。今天发现在使用自己的schema来限定input xml model时(通过xsi:noNamespaceSchemaLocation="test.xsd" 来限定schema),总是报NullPointer exception。经过一番调查发现,jet在input xml model没有schema定义时,所有input xml model中的element用AnyType来表示,如果input xml model有schema定义,jet就将所有的element加载成EObject。在jet将xpath变量转换为EObject对象时,对null的检查不够仔细。看EObjectInspector中方法:

private Object[] getFeatureValue(EObject eObject, EStructuralFeature feature)
{
  (1)Object objResult = eObject.eGet(feature);
  if(feature instanceof EReference) {
    if(feature.isMany()) {
      return ((List)objResult).toArray();
    } else {
      (2)return new Object[] {objResult};
    }
  } else {
    // its an EAttribute, wrap...
    final Setting setting = ((InternalEObject)eObject).eSetting(feature);
    if(feature.isMany())
    {
      Object[] result = new Object[((List)objResult).size()];
      for(int j = 0; j < result.length; j++ ) {
        result[j] = new EMFEAttrAsElementWrapper(setting, j);
      }
      return result;
    }
    else
    {
      return new Object[] {new EMFEAttrAsElementWrapper(setting)};
    }
  }
}

我觉得问题出在粗斜体两行,在标有(1)的一行,返回eObject对象中的EStructurealFeature feature,对于eObjects所属的类是可以包含feature的,可是在eObject类实例里面就不一定包含feature,所以这行可以返回null,在标有(2)那行,jet没有判断objResult是否为null就返回了,也就是说返回的是new Object[]{null},这就不对了,返回之后就有可能出问题。再举个例子,比如


 

判断datasource下是否有connection标签如果有将它存在变量connection里面在console里面打印标签名,如果datasource里没有connection标签,if tag里面的内容将不被处理。在IfTag类的public boolean doEvalCondition()方法里,有一句

boolean processContents = XPathUtil.xpathBoolean(rawObject);

这行代码判断rawObject的size是否大于0,如果大于0返回true,processContents就为true这样if tag里面的内容就被处理,如果在前面所列的代码中返回new Object[]{null},这是一个size为1的数组,唯一的成员为null,这个满足size大于0,于是processContents为true,if tag的内容被执行,所以在执行时,就会报connection为空,NullPointer就出来了。

分享到:
评论

相关推荐

    Python库 | django-jet-0.1.0.tar.gz

    Django Jet 是一个高级的、美观的 Django 管理界面,它提供了丰富的自定义选项和增强的功能,使得开发人员能够为他们的 Django 项目创建更加用户友好和视觉吸引人的后台管理界面。在 `django-jet-0.1.0.tar.gz` 这个...

    开源项目-CloudyKit-jet.zip

    CloudyKit-jet.zip是一个开源项目,主要包含了一个名为Jet的新模板引擎,它是为Go编程语言设计的。Jet模板引擎以其高效性能而引人注目,它无需预编译或使用不安全的代码就能实现快速运行。这个压缩包里的内容是jet-...

    Castle.ActiveRecord 升级NHibernate到3.4.0GA

    Castle.ActiveRecord官方已经停止更新了,官方最高支持到NHibernate 3.1.0.4000,这个版本还有不少问题(例如:[NH-2213] - CLONE -Wrong parameters order in IQuery with SetParameterList and Filter)。...

    JetGreenAirlines:Jet Green 项目

    "JetGreenAirlines:Jet Green 项目"是一个可能涉及航空运输管理系统的软件开发项目。从标题来看,它可能是为了提升捷绿航空公司的运营效率,通过数字化手段优化其业务流程。项目可能涵盖了航班管理、乘客服务、票务...

    封装ADO的一个查询程序

    3. **连接Access数据库**:创建一个`Connection`对象,设置数据库连接字符串,例如:"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\path\\to\\database.mdb",然后调用`Open`方法建立连接。 4. **执行SQL查询...

    400个DreamWeaver插件

    mxp/响应一个键盘按钮,然后使浏览器跳转到另一个地址 mxp/在file菜单下增加一个新的命令,可以列出最近编辑的几个文件。就好象Windows开始菜单中的“文档” mxp/现在的插件真是不得了!我恨不的给每个插件都打上5分...

    All-in-One:适用于Jet 12.8及更高版本的多合一模组

    一体适用于Jet 12.8及更高版本的多合一模组2021年2月28日更新2.1.0-重写所有功能以使用12.9-现在所有设置都立即生效2020年12月7日更新2.0.9 -fixed raid timer bug2020年12月3日更新2.0.8: -updated all modules ...

    Windows Repair v1.9.18 老朽痴拙汉化版(系统修复)

    windows是一个脆弱的操作系统,安装软件,过度优化等操作都会让其运行不稳定,或者崩溃。所以当你发现系统有小问题的时候,你就应该想办法修复它,从而避免错误的扩散。这次介绍的Windows Repair就是一个有针对性的...

    测试工具集合测试工具集合

    "测试工具集合测试工具集合"这个标题可能指的是一个包含多种测试工具的资源包,用于全面的软件测试工作。下面将详细介绍一些常见的测试工具及其重要性,并结合"jetbrain"这个标签,推测可能包含的工具如JetBrains的...

    燕赵宽频点播系统aspx

    2、修复了后台按照ID搜索的bug 21:46 2011/2/7 1、解决中文环境下中文乱码的问题 2、增加了Utility类,前台采用继承Pagebase类方式进行调用 14:01 2010/9/25 1、使Access数据库支持英文操作系统 较上一版本主要...

    燕赵宽频点播系统V1.1源码

    2、修复了后台按照ID搜索的bug 21:46 2011/2/7 1、解决中文环境下中文乱码的问题 2、增加了Utility类,前台采用继承Pagebase类方式进行调用 14:01 2010/9/25 1、使Access数据库支持英文操作系统 较上一版本主要改进...

    SQLServer的链接服务器技术小结[参考].pdf

    1. 首先,需要安装MySQL的ODBC驱动,如MyODBC,并配置一个ODBC数据源,例如myDSN,指定连接到的MySQL数据库(test)。 2. 使用`sp_addlinkedserver`系统存储过程添加链接服务器,指定服务器名(MySQLTest)、提供...

    SQL Server的链接服务器技术小结

    1. 首先,你需要在MySQL服务器上安装ODBC驱动,如MyODBC,并创建一个ODBC数据源(如myDSN),指定连接的数据库(如test)。 2. 在SQL Server中,使用`sp_addlinkedserver`存储过程添加链接服务器,指定服务器名称...

    ASP+ACCESS学籍信息管理系统DA版(源代码+论文+答辩PPT).zip

    ACCESS是微软Office套件中的一个关系型数据库管理系统,使用Jet引擎作为其数据存储后端。它的优点包括: 1. 用户友好:提供图形化界面,方便用户创建、编辑和管理数据库。 2. 数据类型丰富:支持各种常用的数据类型...

    asoft签到管理系统tykq3.5_build20110125

    优化请假模块在进行剔除工作时间的请假时间计算逻辑并修复一个因跨天签到设置导致计算不准确的BUG。 [2010-09-13] V3.4 正式版 build 20100913 1、增加开关左侧导航的功能,现在你可以有更大的视觉空间来查看...

    Servicepack6

    在Perotel的背景下,我们可以推断这可能是该公司产品的一个重要更新,旨在改善其在中国地区的使用体验,尤其是对于中文环境的支持。 在IT行业中,Service Pack是一种常见的软件更新形式,它通常包含了自软件发布...

    Excel导入导出算法(C#)

    - 在执行大量数据导入或导出时,提供一个可视化的进度条可以让用户更直观地了解当前的操作进度。 - 这种可视化设计对于提高用户体验至关重要。 3. **本地DataSet中的数据类型转换为对应的OleDB的数据类型:** - ...

    vs2008平台下ADO操作ACEESS数据库编程实例

    在读取数据时,OleDbDataReader对象会提供一个迭代器,用于逐行访问结果集。可以使用reader的GetValues方法或单独的GetXXX方法(如GetInt32、GetString)来获取列值。 4. **插入、更新和删除数据**: 除了查询,...

    Microsoft Press-Programming Microsoft Outlook And Exchange 2003 (2 of 2)

    Using DASL and JET Syntax 36 Summary 38 Chapter 3: Outlook Development 39 The Application Object 39 New Methods, Properties, and Events 44 Other Important Collections, Methods, Properties, and Events ...

    ASP+ACCESS铁观音销售网站设计与实现(源代码+论文).rar

    对于一个ASP毕业设计项目,通常需要经历以下几个步骤: 1. 需求分析:明确网站的目标用户、功能需求和预期效果。 2. 设计阶段:制定系统架构,设计数据库表结构,规划界面布局。 3. 编码实现:利用ASP编写服务器端...

Global site tag (gtag.js) - Google Analytics