如何在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 "codetemplateName": 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请求仅负责更新或创建库本身,不会自动导入库内嵌套的代码模板。正确操作方式:
- 确认XML文件中同时包含
codeTemplateLibrary节点和嵌套的codeTemplate子节点 - 拆分导入流程:
- 先调用
/api/codeTemplateLibraries接口导入模板库 - 遍历XML中的每个
codeTemplate,单独调用/api/codeTemplates接口完成导入
- 先调用
针对问题2:脚本中curl导入模板报JavaScript语法错误
核心原因是Shell环境下curl传输时,XML内的JavaScript代码被意外解析或转义,导致Mirth收到的代码语法不完整。解决步骤:
- 验证XML内容:确认
codeTemplateName.xml中<code>节点内的JavaScript语法完全正确,重点检查第2行的闭合}是否存在(Postman可行说明原始内容无语法问题) - 修改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
- 使用
- 检查XML转义:确保XML中的JavaScript代码已完成XML实体转义(如
&转义为&),避免传输过程中格式损坏
内容的提问来源于stack exchange,提问作者Levi K
相关产品推荐
相关产品推荐

