Разбор сообщения REF HL7 v2.3 с локальными настройками в HAPI
Я пытаюсь разобрать сообщение HL7 REF I12 с локальной настройкой (NZ).
Когда я пытался использовать GenericParser, я продолжал получать исключения Validation. Например, для сегмента ниже, я продолжаю получать вывод
ca.uhn.hl7v2.validation.ValidationException: проверка не удалась: примитивное значение '(08)569-7555' должно быть пустым или номер телефона США
PRD|PP|See T Tan^""^""^^""|""^^^^""^New Zealand||(08)569-7555||14134^NZMC
Мой вопрос:
- Есть ли способ избежать проверки с помощью генератора классов соответствия
- Можно ли создать собственные классы проверки с использованием CustomModelClasses?
В любом случае, есть ли пример кода для этого или учебная пример документации?
1 ответ
Если отключение проверки в целом является опцией для вашего приложения, вы можете установить контекст проверки для использования NoValidation
,
Смотрите эту ветку в списке рассылки разработчиков хапи: http://sourceforge.net/p/hl7api/mailman/message/31244500/
Вот пример того, как отключить проверку:
HapiContext context = new DefaultHapiContext();
context.setValidationContext(new NoValidation());
GenericParser parser = context.getGenericParser();
String message = ...
try {
parser.parse(message);
} catch (Exception e) {
e.printStackTrace();
}
Если вам все еще требуется валидация, но вы просто хотите изменить валидатор для определенных правил, вам придется создать собственную реализацию ValidationContext. Это будет сделано путем подклассификации ca.uhn.hl7v2.validation.builder.support.NoValidationBuilder
и переопределяя configure
метод и использовать его для создания экземпляра ValidationContextImpl.
Для примера того, как реализовать метод configure в вашем подклассе NoValidationBuilder, см. Исходный код для ca.uhn.hl7v2.validation.builder.support.DefaultValidationBuilder
, Это контекст проверки по умолчанию, который генерирует сообщение об ошибке, которое вы видите. Чтобы вам было легче, я включил список классов здесь:
public class DefaultValidationBuilder extends DefaultValidationWithoutTNBuilder {
@Override
protected void configure() {
super.configure();
forAllVersions()
.primitive("TN")
.refersToSection("Version 2.4 Section 2.9.45")
.is(emptyOr(usPhoneNumber()));
}
}
Обратите внимание, что это реализация usPhoneNumber
метод, определенный в BuilderSupport
:
public Predicate usPhoneNumber() {
return matches("(\\d{1,2} )?(\\(\\d{3}\\))?\\d{3}-\\d{4}(X\\d{1,5})?(B\\d{1,5})?(C.*)?",
"a US phone number");
}