1

我正在尝试使用本地自定义(NZ)解析 HL7 REF I12 消息。

当我尝试使用 GenericParser 时,我不断收到验证异常。例如对于下面的部分,我不断得到输出

ca.uhn.hl7v2.validation.ValidationException:验证失败:原始值“(08)569-7555”需要为空或美国电话号码

PRD|PP|See T Tan^""^""^^""|""^^^^""^New Zealand||(08)569-7555||14134^NZMC

我的问题是:

  • 有没有办法通过使用一致性类生成器来避免验证
  • 是否可以使用 CustomModelClasses 创建自己的验证类?

无论哪种情况,是否有任何示例代码或教程示例文档?

4

1 回答 1

1

如果完全禁用验证是您的应用程序的一个选项,那么您可以将验证上下文设置为使用NoValidation.

请参阅 hapi 开发人员邮件列表中的此线程: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 的实例来完成。

有关如何在 NoValidationBuilder 的子类中实现 configure 方法的示例,请参阅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");
}
于 2014-10-31T21:09:58.650 回答