/* * Created on Mar 23, 2009 */ package ca.uhn.hl7v2.examples; import java.io.IOException; import ca.uhn.hl7v2.HL7Exception; import ca.uhn.hl7v2.conf.ProfileException; import ca.uhn.hl7v2.conf.check.DefaultValidator; import ca.uhn.hl7v2.conf.parser.ProfileParser; import ca.uhn.hl7v2.conf.spec.RuntimeProfile; import ca.uhn.hl7v2.model.Message; import ca.uhn.hl7v2.parser.EncodingNotSupportedException; import ca.uhn.hl7v2.parser.PipeParser; import ca.uhn.hl7v2.validation.impl.DefaultValidation; import ca.uhn.hl7v2.validation.impl.NoValidation; import ca.uhn.hl7v2.validation.impl.ValidationContextImpl; /** * TODO: add! * * @author James Agnew * @version $Revision: 1.2 $ updated on $Date: 2009/03/28 17:18:02 $ by $Author: * jamesagnew $ */ public class MessageValidationUsingConformanceProfile { /** * @param args * @throws HL7Exception * @throws IOException * @throws ProfileException * @throws HL7Exception */ public static void main(String[] args) throws ProfileException, IOException, HL7Exception { /* * In this example, we are looking at a few aspects of message * validation using HAPI. * * The following message will be used in the examples: * * MSH|^~\&|MedSeries|CAISI_1-2|PLS|3910|200903230934||ADT^A31^ADT_A05|75535037-1237815294895|P^T|2.4 * EVN|A31|200903230934 * PID|1||29^^CAISI_1-2^PI~""||Test300^Leticia^^^^^L||19770202|M|||||||||||||||||||||| */ String validMessageString = "MSH|^~\\&|MedSeries|CAISI_1-2|PLS|3910|200903230934||ADT^A31^ADT_A05|75535037-1237815294895|P^T|2.4\r\n" + "EVN|A31|200903230934\r\n" + "PID|1||29^^CAISI_1-2^PI~\"\"||Test300^Leticia^^^^^L||19770202|M||||||||||||||||||||||"; Message validMessage = new PipeParser().parse(validMessageString); // Load a conformance profile ProfileParser profileParser = new ProfileParser(false); RuntimeProfile profile = profileParser.parseClasspath("ca/uhn/hl7v2/examples/profiles/ADT_A31.xml"); // Create a conformance validator, and validate DefaultValidator validator = new DefaultValidator(); HL7Exception[] exceptions = validator.validate(validMessage, profile.getMessage()); System.out.println("Found " + exceptions.length + " problems"); for (int i = 0; i < exceptions.length; i++) { HL7Exception exception = exceptions[i]; System.out.println(" * " + exception.getClass().getSimpleName() + " - " + exception.getMessage()); } /* * Prints: * * Found 10 problems * ProfileNotHL7CompliantException - HL7 datatype ST doesn't match profile datatype NM: Segment: MSH Field #7 * ProfileNotHL7CompliantException - HL7 datatype MSG doesn't match profile datatype CM_MSG: Segment: MSH Field #9 * ProfileNotHL7CompliantException - HL7 datatype ST doesn't match profile datatype NM: Segment: EVN Field #2 * XElementPresentException - Field 1 in EVN appears in the message but not in the profile: Segment: EVN * XElementPresentException - Element code identifying the check digit scheme employed is present but specified as not used (X): Segment: PID Field #3 * ProfileNotFollowedException - Required element identifier type code (ID) is missing: Segment: PID Field #3 * ProfileNotFollowedException - Required element assigning authority is missing: Segment: PID Field #3 * ProfileNotFollowedException - Required element identifier type code (ID) is missing: Segment: PID Field #3 * ProfileNotHL7CompliantException - HL7 datatype ST doesn't match profile datatype NM: Segment: PID Field #7 * XElementPresentException - Field 1 in PID appears in the message but not in the profile: Segment: PID */ } }