我正在尝试使用本地自定义(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
我的问题是:
在任何一种情况下,是否有任何示例代码或教程示例文档?
答案 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");
}