0

Mirth 正在从 ActiveMQ JMS Topic 接收 java 对象。我已将源连接器入站数据类型设置为Mirth Channel中的Delimited Text ,连接器类型为JMS Reader。现在在preprocessor阶段我想把这个java对象编组到XML中。我已经把记录器像这样

logger.info("incoming data "+message);

它正在打印OrderDetails@240aaf81

现在我正在调用自定义 java 类来将 java 对象编组为 XML。但是这个传入的消息被 Mirth 转换为字符串。预处理器脚本中的代码如下所示:

// Modify the message variable below to pre process data
logger.info("incoming data "+message);
var object = new Packages.coms.controller.JAXBMarshalling();
object.marshallJavaObjectToXml(message);
return message;

在将传入消息传递给方法时,它显示方法不存在的错误,因为方法需要自定义 java 对象作为方法参数,但它作为字符串。方法如下所示:

public  void marshallJavaObjectToXml(OrderDetails orderDetails) {
        JAXBContext jaxbContext;
        try {
            File file = new File(
                    "C:\\Program Files (x86)\\Mirth Connect\\conf\\xml\\xmlrepresentation.xml");
            jaxbContext = JAXBContext.newInstance(OrderDetails.class);
            Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
            // output pretty printed
            jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
            jaxbMarshaller.marshal(orderDetails, file);
            jaxbMarshaller.marshal(orderDetails, System.out);
        } catch (JAXBException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

传递对象的类如下所示:

 @XmlRootElement
    public class OrderDetails implements Serializable{

        private static final long serialVersionUID = -4617153110762983450L;
        private Long mrn;
        private Long orderNo;
        private Long patientId;
        private Long orderId;**strong text**
        private Long encounterId;
    }

我已经用这两个类创建了 jar 文件并将其放入 Mirth 的custom-lib文件夹中。如何在 Mirth 的脚本中获取实际的 java 对象preprocessor?我正在使用 Mirth 版本 2.2.1.5861

4

1 回答 1

0

这样的结果可以使用摘要选项卡上的附件脚本来实现。在那里,您处理原始格式的消息。您可以在那里提取您的对象并将其存储到全局通道映射,该映射也允许传递对象,这与其他两个映射相反。预处理器脚本也处理原始消息。这两者之间的区别在于,消息在到达附件处理程序时不会存储在数据库中,而是在之后存储。

作为进一步阅读,我会推荐“非官方 Mirth Connect 开发者指南”。(免责声明:我是这本书的作者。)

于 2013-11-08T23:11:15.977 回答