HL7Exception: Can‘t XML-encode a GenericMessage. Message must have a recognized struct

目录

一、示例代码

二、发现报错的地方

三、为什么会进入报错判断呢?

四、总结

原因:

解决方法:


今天使用Hapi解析一个hl7v2并尝试转为xml格式时碰到了这样的错误

Exception in thread "main" ca.uhn.hl7v2.HL7Exception: Can't XML-encode a GenericMessage.  Message must have a recognized structure.
    at ca.uhn.hl7v2.parser.XMLParser.doEncode(XMLParser.java:237)
    at ca.uhn.hl7v2.parser.Parser.encode(Parser.java:276)
    at com.cr.hesb.hl7v2.HL7Helper.hl72xml(HL7Helper.java:164)
    at com.cr.hesb.hl7v2.HL7Helper.main(HL7Helper.java:25)

百度了个半天,毫无收获,只能跑去看源码了。

一、示例代码

public static String hl72xml() throws HL7Exception {
        String message = "MSH|^~\\&|UMC||ZZJ||20220105101052||ADT^A01^ADT^A01|a8f662b8-6e7a|P|2.6^^&&&&D56D2C42401AAC6F36&&V1.0|||NE|AL||utf-8\n" +
                "EVN|REG|20220121235249|||01970836\n" +
                "PID||201532012|6521011986122213xx^^^^01||马x明^^^MA ZHI MING||19861222000000|1|||&华容文化路 179 号^华容^岳阳^湖南|||||^^2|||652101198612221332|||^汉族^1||||||86^中国\n" +
                "PV1||1|311403^126^^&H002^^^^^^儿科急诊\\T\\急诊科\\T\\专科代码||123||08311056\\S\\朱X峰|||2||||2|2|3|1056\\S\\朱熙峰||1||||||||||||||||||||H0002|0||||20220105100100||||||03-01970836-100^123456^124512^1&4513&2412^^&9:00\\R\\12:00|0|0^1123&20220105100100&245\\S\\张小^^^^\n" +
                "IN1|1|A|自费";
        HapiContext context = new DefaultHapiContext();
        GenericParser normalParse =  new GenericParser();
        normalParse.getParserConfiguration().setValidating(false);

        Message hapiMessage = normalParse.parse(message);

        Parser xmlParser = context.getXMLParser();
        return xmlParser.encode(hapiMessage);
    }

二、发现报错的地方

三、为什么会进入报错判断呢?

直接来到 ca.uhn.hl7v2.parser.PipeParser 下的getStructure(String message)方法

1.如下图所示,先获取hl7v2到实现类的那一栏数据。
2.根据获取的数据分割成数组
  2.1.若数组长度大于或等于3则直接使用数组的下标为2的数据
  2.2.若数组长度小于或等于0&&或为ACK,则直接赋值为ACK
  2.3.若数组长度等于2则将两个数据用“_”进行拼接

3.最后根据变量messageStructure的值去找寻对应的Message实现类,若为空则使用GenericMessage类进行实现

四、总结

原因:

        所以报错是因为XMLParser.doEncode(Message source)方法不可将实现类为 GenericMessage的转化为xml格式

解决方法:

1.更改数据的messageStructure值(hl7v2实现类的那一栏数据),使其找到对应的实体。

2.继承抽象类AbstractMessage,重写一个对应的实体!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值