Maximo7.5 Python自动化脚本调用带参沟通模板遇类型转换错误
解决Maximo 7.5中Python脚本调用MessageFormat的类型转换异常
我之前在Maximo 7.5里写Jython脚本时也踩过这个坑,你的报错java.lang.ClassCastException: org.python.core.PyList cannot be cast to [Ljava.lang.Object;根源很清晰:Python的列表(PyList)不能直接被Java的MessageFormat.format()方法识别为原生的Object[]数组。Java定制里能正常运行,是因为Java本身用的就是数组类型,而Jython的列表是Python层面的容器,和Java数组不是同一类型。
解决方案:将Python列表转为Java Object数组
你只需要把Python的args列表转换成Java原生的Object[]数组,就能让MessageFormat.format()正确识别参数。具体修改如下:
from psdi.server import MXServer from psdi.mbo import SqlFormat from java.text import MessageFormat """ 获取邮件所需的三个参数及primaryEmail的值 """ whereclause="templateid='WMSPWUSER'"; csr =mbo.getMboSet("$commtemp","COMMTEMPLATE",whereclause); csr.setQbeExactMatch("true"); if csr.count() > 0 : print("Inside commtemplate"); ctr = csr.getMbo(0); sqf =SqlFormat(ctr.getString("message").replace("'", "''")); sqf.setIgnoreUnresolved(1); message = sqf.resolveContent(); args = [ pwd, login,url ]; # 关键修改:将Python列表转为Java Object数组 args_array = java.lang.Object[len(args)] for i in range(len(args)): args_array[i] = args[i] fmt = MessageFormat(message); message = fmt.format(args_array); # 使用转换后的Java数组 MXServer.sendEMail( primaryEmail , ctr.getString("sendfrom"), ctr.getString("subject"), message);
额外说明
- 如果你觉得循环赋值太繁琐,也可以用Jython的内置转换方式:
args_array = (java.lang.Object[])(args),效果是一样的,不过循环赋值的方式更直观,便于调试参数。 - 确保
pwd、login、url都是字符串类型(Jython会自动转成Java的String),避免其他类型的转换问题。
内容的提问来源于stack exchange,提问作者stackuser11
相关产品推荐
相关产品推荐

