水壶步骤中的ClassCastException

阿比舍克·戴伊·达斯

我有一个Kettle步骤,该步骤使用称为Geometry的自定义数据类型。我有以下几行代码从第一行获取元信息:

geometryInterface = data.prevRowMeta.getValueMeta(meta.getGeomSelectedCol());

然后执行以下操作获得Geometry值:

geometry = ((ValueMetaGeometry)geometryInterface).getGeometry(r[meta.getGeomSelectedCol()]);

运行该步骤时,出现以下异常:

 java.lang.ClassCastException: org.pentaho.di.core.row.value.ValueMetaGeometry cannot be cast to org.pentaho.di.core.row.value.ValueMetaGeometry

其中ValueMetaGeometry是自定义数据类型。我猜它是一个类加载器问题。您的输入相同,将不胜感激。

马蒂卜

是的,这是一个类加载器问题。当两个不同的插件尝试加载并使用相同的类(即重复的JAR,每个插件中的一个)然后尝试相互交谈,或者两个类正在从不同的类加载器解析ValueMetaGeometry类时,可能会发生这种情况。如果将类加载到父类加载器中(例如,如果JAR位于数据集成/ lib中),并且也通过插件类加载(如果JAR位于插件的lib /文件夹中),则可能发生后一种情况。插件类将在插件的类加载器中找到它,其他使用者将在父类加载器中找到ValueMetaGeometry类。

我需要更多地了解您的转换和步骤以帮助解决问题,但是一种可能的解决方案是使用PluginRegistry来获取ValueMetaGeometry类,并将线程上下文类加载器设置为ValueMetaGeometry.class.getClassLoader()。您也可以使用反射来调用ValueMetaGeometry对象上的方法。

请注意,通常是脚本步骤引入了此类问题。我的建议是创建在内部使用ValueMetaGeometry方法的步骤插件,但会生成其他核心Kettle数据类型(例如String,Integer等)。例如,我具有ValueMetaMap类型以及用于“要映射的字段”和“映射到字段”的步骤插件:

https://github.com/mattyb149/pdi-valuemeta-map

这些步骤将ValueMetaMap类的使用黑框化为可以“讲”它的插件。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Pentaho水壶的“桌子存在”步骤

来自分类Dev

处理多个输入到水壶步骤

来自分类Dev

如何从Java设置水壶MongoDB输入步骤的变量?

来自分类Dev

使用Web Service步骤将水壶挂在帖子数据上

来自分类Dev

在pentaho水壶转换中合并2行

来自分类Dev

在水壶pentaho中的concat组的反向

来自分类Dev

水壶-从文件夹中读取多个文件

来自分类Dev

循环遍历子作业(水壶作业)中的文件名

来自分类Dev

水壶勺-文件名输入中的变量

来自分类Dev

循环子作业(水壶作业)中的文件名

来自分类Dev

在步骤实施中跳过行为步骤

来自分类Dev

尝试禁用步骤中的未来步骤

来自分类Dev

matplotlib中的关闭步骤

来自分类Dev

python中“ for循环”的步骤

来自分类Dev

步骤中的ImageView动画

来自分类Dev

Excel中的步骤图

来自分类Dev

PowerQuery中的复制步骤

来自分类Dev

重复specflow中的步骤

来自分类Dev

pascal 中的函数步骤

来自分类Dev

RecyclerView的onBindViewHolder中的ClassCastException

来自分类Dev

片段中的SimpleCursorAdapter ClassCastException

来自分类Dev

findViewById中的奇怪的ClassCastException

来自分类Dev

Lambda流中的ClassCastException

来自分类Dev

ClassCastException异常JavaFX中

来自分类Dev

Karaf中PersistenceProviderImpl的ClassCastException

来自分类Dev

Android RecyclerAdapter中的ClassCastException

来自分类Dev

Android TypeHolder中的ClassCastException

来自分类Dev

MainActivityBinding 中的 ClassCastException

来自分类Dev

如何在水壶的用户定义的Java类中获取字段值?