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

如何在Mirth Docker容器中导入代码模板?报错求助

Mirth Connect Docker自动部署中代码模板导入失败问题

问题背景

通过Docker自动部署Mirth,已成功通过curl调用Mirth Client API导入configuration map和channels,但代码模板导入遇到两个问题:

问题1:导入完整代码模板库XML后,库内模板为空

执行以下curl命令导入包含所有代码模板的XML文件:

curl --retry 3 --retry-connrefused --retry-delay 2 --insecure -u admin:admin -X PUT -H  "accept: application/xml" -H  "Content-Type: application/xml" -H  "X-Requested-With: OpenAPI" https://$HOST:$PORT/api/codeTemplateLibraries -d "@$filename"

结果仅导入了code template libraries,库内的代码模板为空。

问题2:单独导入代码模板时脚本执行报错(Postman可行)

尝试单独导入代码模板,该方法在Postman中正常工作,但启动脚本中执行以下命令时报错:

curl --retry 3 --retry-connrefused --retry-delay 2 --insecure -u admin:admin -X PUT -H  "accept: application/xml" -H  "Content-Type: application/xml" -H  "X-Requested-With: OpenAPI" https://$HOST:$PORT/api/codeTemplates/{code-template-id}?override=true -d @${DIR}/code-templates/codeTemplateName.xml

报错信息:

<detailMessage>Unable to save code template &quot;codetemplateName&quot;: Error on line 2: missing } after function body (id-removed#2).</detailMessage>
mirth_1          |   <cause class="org.mozilla.javascript.EvaluatorException">
mirth_1          |     <detailMessage>missing } after function body</detailMessage>
mirth_1          |     <stackTrace>
mirth_1          |       <trace>org.mozilla.javascript.DefaultErrorReporter.runtimeError(DefaultErrorReporter.java:79)</trace>
mirth_1          |       <trace>org.mozilla.javascript.DefaultErrorReporter.error(DefaultErrorReporter.java:66)</trace>
mirth_1          |       <trace>org.mozilla.javascript.Parser.addError(Parser.java:258)</trace>
mirth_1          |       <trace>org.mozilla.javascript.Parser.reportError(Parser.java:326)</trace>
mirth_1          |       <trace>org.mozilla.javascript.Parser.reportError(Parser.java:320)</trace>
mirth_1          |       <trace>org.mozilla.javascript.Parser.mustMatchToken(Parser.java:480)</trace>
mirth_1          |       <trace>org.mozilla.javascript.Parser.mustMatchToken(Parser.java:470)</trace>
mirth_1          |       <trace>org.mozilla.javascript.Parser.parseFunctionBody(Parser.java:771)</trace>
mirth_1          |       <trace>org.mozilla.javascript.Parser.function(Parser.java:926)</trace>
mirth_1          |       <trace>org.mozilla.javascript.Parser.function(Parser.java:858)</trace>
mirth_1          |       <trace>org.mozilla.javascript.Parser.parse(Parser.java:630)</trace>
mirth_1          |       <trace>org.mozilla.javascript.Parser.parse(Parser.java:570)</trace>
mirth_1          |       <trace>org.mozilla.javascript.Context.parse(Context.java:2533)</trace>
mirth_1          |       <trace>org.mozilla.javascript.Context.compileImpl(Context.java:2482)</trace>
mirth_1          |       <trace>org.mozilla.javascript.Context.compileString(Context.java:1486)</trace>
mirth_1          |       <trace>org.mozilla.javascript.Context.compileString(Context.java:1475)</trace>
mirth_1          |       <trace>com.mirth.connect.server.controllers.DefaultCodeTemplateController.updateCodeTemplate(DefaultCodeTemplateController.java:465)</trace>
mirth_1          |       <trace>com.mirth.connect.server.api.servlets.CodeTemplateServlet.updateCodeTemplate(CodeTemplateServlet.java:132)</trace>
mirth_1          |       
mirth_1          |       <trace>java.base/java.lang.Thread.run(Thread.java:833)</trace>
mirth_1          |     </stackTrace>
mirth_1          |     <suppressedExceptions class="empty-list"/>
mirth_1          |     <sourceName>id-removed</sourceName>
mirth_1          |     <lineNumber>2</lineNumber>
mirth_1          |     <lineSource>}</lineSource>
mirth_1          |     <columnNumber>1</columnNumber>
mirth_1          |   </cause>

解决方案

针对问题1:完整代码模板库导入后模板为空

Mirth的/api/codeTemplateLibraries接口PUT请求仅负责更新或创建库本身,不会自动导入库内嵌套的代码模板。正确操作方式:

  1. 确认XML文件中同时包含codeTemplateLibrary节点和嵌套的codeTemplate子节点
  2. 拆分导入流程:
    • 先调用/api/codeTemplateLibraries接口导入模板库
    • 遍历XML中的每个codeTemplate,单独调用/api/codeTemplates接口完成导入

针对问题2:脚本中curl导入模板报JavaScript语法错误

核心原因是Shell环境下curl传输时,XML内的JavaScript代码被意外解析或转义,导致Mirth收到的代码语法不完整。解决步骤:

  1. 验证XML内容:确认codeTemplateName.xml中<code>节点内的JavaScript语法完全正确,重点检查第2行的闭合}是否存在(Postman可行说明原始内容无语法问题)
  2. 修改curl参数传递方式:
    • 使用--data-binary替代-d,避免Shell对文件内容的换行、空格进行解析:
      curl --retry 3 --retry-connrefused --retry-delay 2 --insecure -u admin:admin -X PUT \
        -H "accept: application/xml" \
        -H "Content-Type: application/xml" \
        -H "X-Requested-With: OpenAPI" \
        https://$HOST:$PORT/api/codeTemplates/{code-template-id}?override=true \
        --data-binary @${DIR}/code-templates/codeTemplateName.xml
      
    • 若在Bash脚本中,确保模板ID变量正确替换,避免Shell解析{}:
      curl --retry 3 --retry-connrefused --retry-delay 2 --insecure -u admin:admin -X PUT \
        -H "accept: application/xml" \
        -H "Content-Type: application/xml" \
        -H "X-Requested-With: OpenAPI" \
        'https://'"$HOST"':'"$PORT"'/api/codeTemplates/'"$CODE_TEMPLATE_ID"'?override=true' \
        --data-binary @${DIR}/code-templates/codeTemplateName.xml
      
  3. 检查XML转义:确保XML中的JavaScript代码已完成XML实体转义(如&转义为&amp;),避免传输过程中格式损坏

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 18:05:03