You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Mirth Connect中调用可执行Jar方法时找不到方法的问题

问题:Mirth Connect 3.12调用带依赖Jar时提示找不到方法

环境与正常场景

  • 使用Mirth Connect 3.12版本
  • 将无依赖、仅含简单打印功能的Jar上传至custom-lib文件夹并重启Mirth后,通过以下脚本可正常调用Jar内方法:
var obj = new Packages.packagename.classname.method_name;
logger.info(res);

异常场景

上传IntelliJ编译的带插件依赖的可执行Jar到custom-lib并重启Mirth后,执行调用脚本时抛出错误,错误日志如下:

[2022-07-22 03:26:15,176] ERROR (com.mirth.connect.server.util.javascript.JavaScriptUtil:522): Error executing Preprocessor script from channel: 15388747-57e4-46f7-bb0e-7da2d2c0ccbd
com.mirth.connect.server.MirthJavascriptTransformerException: SOURCE CODE:

207: logger.info('Ended this -' + myCRC);208: 209: try{

         210: 211: /*212: var xyz = new java.io.File('\\\\WVMQTMCEDIAP01').getAbsolutePath();213: logger.info('Started -'+xyz);214: if(new java.io.File(xyz).exists()){215:

         logger.info('I am xyz available');216: }LINE NUMBER:

         212DETAILS:

         TypeError: Cannot find function fileTransfer in object com.alpha.Smb@797b980d.

         at 15388747-57e4-46f7-bb0e-7da2d2c0ccbd_Preprocessor:212 (doScript)
         at 15388747-57e4-46f7-bb0e-7da2d2c0ccbd_Preprocessor:310
         at com.mirth.connect.server.util.javascript.JavaScriptUtil.executeScript(JavaScriptUtil.java:547)
         at com.mirth.connect.server.util.javascript.JavaScriptUtil.executePreprocessorScripts(JavaScriptUtil.java:216)
         at com.mirth.connect.server.transformers.JavaScriptPreprocessor$JavaScriptPreProcessorTask.doCall(JavaScriptPreprocessor.java:103)
         at com.mirth.connect.server.util.javascript.JavaScriptTask.call(JavaScriptTask.java:113)
         at java.util.concurrent.FutureTask.run(FutureTask.java:266)
         at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
         at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
         at java.lang.Thread.run(Thread.java:748)

解决方案

1. 修正Jar打包方式

IntelliJ默认生成的可执行Jar常采用依赖重命名或内部封装的方式,导致Mirth类加载器无法识别依赖类。需调整打包策略:

  • 构建包含所有依赖的标准胖Jar(Fat Jar),保留依赖类的原始包路径,避免IntelliJ的自动重命名处理;
  • 若依赖为独立Jar,将所有依赖Jar一同上传至custom-lib文件夹,与业务Jar放在同一目录后重启Mirth。

2. 验证类加载路径

  • 检查业务Jar的MANIFEST.MF文件,确认Class-Path属性已正确声明所有依赖Jar的名称(若依赖为独立Jar);
  • 排查依赖Jar与Mirth自带库的版本冲突,比如避免与Mirth内置的Commons IO、Log4j等库版本不一致。

3. 修正脚本调用逻辑

错误提示显示com.alpha.Smb实例中找不到fileTransfer方法,需确认调用方式正确性:

  • 若为实例方法,需先创建类实例再调用:
    var smbObj = new Packages.com.alpha.Smb();
    var result = smbObj.fileTransfer(); // 按需传入方法参数
    logger.info(result);
    
  • 若为静态方法,直接通过类调用:
    var result = Packages.com.alpha.Smb.fileTransfer(); // 按需传入方法参数
    logger.info(result);
    
  • 检查方法参数签名是否匹配,确保传入参数的类型、数量与方法定义一致。

4. 调试类加载状态

可在Mirth脚本中加入调试代码,确认类及方法是否被正确加载:

try {
    var smbClass = Packages.com.alpha.Smb;
    logger.info("类加载成功: " + smbClass);
    // 打印类的所有公开方法
    var methods = smbClass.getMethods();
    for(var i=0; i<methods.length; i++){
        logger.info("可用方法: " + methods[i].getName());
    }
} catch(e) {
    logger.error("类加载失败: " + e);
}

内容的提问来源于stack exchange,提问作者user16379742

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 20:46:04