140.10. HapiContext を使用した HL7 検証述語 (Camel 2.14)
HAPI コンテキストは常に ValidationContext (または ValidationRuleBuilder) で設定されるため、検証ルールに間接的にアクセスできます。さらに、HL7DataFormat をアンマーシャリングすると、設定された HAPI コンテキストが CamelHL7Context ヘッダーに転送され、このコンテキストの検証ルールを簡単に再利用できます。
import static org.apache.camel.component.hl7.HL7.messageConformsTo;
import static org.apache.camel.component.hl7.HL7.messageConforms
HapiContext hapiContext = new DefaultHapiContext();
hapiContext.getParserConfiguration().setValidating(false); // don't validate during parsing
// customize HapiContext some more ... e.g. enforce that PID-8 in ADT_A01 messages of version 2.4 is not empty
ValidationRuleBuilder builder = new ValidationRuleBuilder() {
@Override
protected void configure() {
forVersion(Version.V24)
.message("ADT", "A01")
.terser("PID-8", not(empty()));
}
};
hapiContext.setValidationRuleBuilder(builder);
HL7DataFormat hl7 = new HL7DataFormat();
hl7.setHapiContext(hapiContext);
from("direct:test1")
.unmarshal(hl7) // uses the GenericParser returned from the HapiContext
.validate(messageConforms()) // uses the validation rules returned from the HapiContext
// equivalent with .validate(messageConformsTo(hapiContext))
// route continues from here
import static org.apache.camel.component.hl7.HL7.messageConformsTo;
import static org.apache.camel.component.hl7.HL7.messageConforms
HapiContext hapiContext = new DefaultHapiContext();
hapiContext.getParserConfiguration().setValidating(false); // don't validate during parsing
// customize HapiContext some more ... e.g. enforce that PID-8 in ADT_A01 messages of version 2.4 is not empty
ValidationRuleBuilder builder = new ValidationRuleBuilder() {
@Override
protected void configure() {
forVersion(Version.V24)
.message("ADT", "A01")
.terser("PID-8", not(empty()));
}
};
hapiContext.setValidationRuleBuilder(builder);
HL7DataFormat hl7 = new HL7DataFormat();
hl7.setHapiContext(hapiContext);
from("direct:test1")
.unmarshal(hl7) // uses the GenericParser returned from the HapiContext
.validate(messageConforms()) // uses the validation rules returned from the HapiContext
// equivalent with .validate(messageConformsTo(hapiContext))
// route continues from here