在HAPI中使用本地自定义解析HL7 v2.3 REF消息

时间:2014-10-29 01:34:48

标签: hapi hl7-v2

我正在尝试使用本地自定义(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?

在任何一种情况下,是否有任何示例代码或教程示例文档?

1 个答案:

答案 0 :(得分: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");
}