Средство проверки HAPI HL7 не проверяет проанализированные сообщения.

Сценарий, когда я сразу анализирую и проверяю сообщение 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||||||||||||||||||||||");

Исключение (это допустимое поведение):

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)

Но когда я пытаюсь сначала проанализировать сообщение 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));

Мне нужно это для создания сообщений подтверждения в случае сбоя проверки с использованием метода message.generateACK().


person Yuriy    schedule 14.02.2018    source источник


Ответы (1)


Вы отключили проверку для синтаксического анализа следующим образом:

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

Но вы используете тот же контекст для проверки своего сообщения, при этом проверка по-прежнему отключена, что может быть основной причиной.

Кроме того, вы пробовали это? context.getParserConfiguration().setValidating(false); или правда

person Syl    schedule 22.02.2018
comment
1) когда я отключаю проверку, я снова включаю ее с помощью setValidationRuleBuilder. Внутри он вызывает setValidationContext, поэтому используется другой контекст. 2) setValidating(false) вместо setValidationContext(noValidation) отключает проверку, но когда я устанавливаю для него значение true в следующей строке и вызываю hapiContext.getMessageValidator().validate(message) - он все равно возвращает true, исключение проверки не выдается . - person Yuriy; 24.02.2018