HAPI HL7 Validator不验证已解析的消息

Yur*_*riy 5 hl7 hapi

我一次解析并验证HL7消息的方案按预期工作:

HapiContext hapiContext = new DefaultHapiContext();
PipeParser parser = hapiContext.getPipeParser();
Message message = parser.parse("MSH|^~\\&|MedSeries|CAISI_1-2|PLS|3910|200903230934||ADT^A31^ADT_A05|75535037-1237815294895|P^T|2.5\r"
            + "EVN|A31|200903230934345345345345345\r"
            + "PID|1||29^^CAISI_1-2^PI~\"\"||Test300^Leticia^^^^^L||19770202|M||||||||||||||||||||||");
Run Code Online (Sandbox Code Playgroud)

异常(这是一种有效的行为):

Exception in thread "main" ca.uhn.hl7v2.model.DataTypeException: ca.uhn.hl7v2.validation.ValidationException: Validation failed: Primitive value '200903230934345345345345345' requires to be empty or a HL7 datetime string at EVN-2(0)
Run Code Online (Sandbox Code Playgroud)

但是当我首先尝试解析HL7消息然后验证时 - 验证方法返回true并且不抛出任何异常:

HapiContext hapiContext = new DefaultHapiContext();
hapiContext.setValidationContext((ValidationContext) ValidationContextFactory.noValidation());
PipeParser parser = hapiContext.getPipeParser();
Message message = parser.parse("MSH|^~\\&|MedSeries|CAISI_1-2|PLS|3910|200903230934||ADT^A31^ADT_A05|75535037-1237815294895|P^T|2.5\r"
            + "EVN|A31|200903230934345345345345345\r"
            + "PID|1||29^^CAISI_1-2^PI~\"\"||Test300^Leticia^^^^^L||19770202|M||||||||||||||||||||||");


hapiContext.setValidationRuleBuilder(new DefaultValidationBuilder());
System.out.println(hapiContext.getMessageValidator().validate(message));
Run Code Online (Sandbox Code Playgroud)

我需要这个以在使用message.generateACK()方法验证失败的情况下生成确认消息.

Syl*_*Syl 4

您禁用了解析验证:

hapiContext.setValidationContext((ValidationContext) ValidationContextFactory.noValidation());

但是您使用相同的上下文来验证您的消息,验证仍然禁用,这可能是根本原因。

另外,你尝试过这个吗?context.getParserConfiguration().setValidating(false);或真实