View Javadoc
1   package ca.uhn.hl7v2.examples;
2   
3   import ca.uhn.hl7v2.DefaultHapiContext;
4   import ca.uhn.hl7v2.HL7Exception;
5   import ca.uhn.hl7v2.HapiContext;
6   import ca.uhn.hl7v2.model.v23.message.ORU_R01;
7   import ca.uhn.hl7v2.parser.Parser;
8   
9   /**
10   * Example code which illustrates how to handle OBX segments
11   * with an invalid or missing OBX-2 value.
12   */
13  public class ParseInvalidObx2Values {
14  
15  	
16  	public static void main(String[] args) throws HL7Exception {
17  
18  		/*
19  		 * OBX is a special segment in HL7. The value in OBX-2
20  		 * determines the data type of OBX-5. For example, in the
21  		 * following segment the DT in OBX 2 tells the parser that
22  		 * the value in OBX5 is a date (DT datatype):
23  		 * OBX|1|DT|||20111231
24  		 * 
25  		 * For whatever reason, this is often implemented incorrectly
26  		 * by systems that you will need to exchange data with. This
27  		 * module demonstrates strategies for doing so.
28  		 * 
29  		 * The following is a message in which the OBX segment is missing the
30  		 * mandatory OBX-2 value
31  		 */
32  		String string = "MSH|^~\\&|ULTRA|TML|OLIS|OLIS|200905011130||ORU^R01|20169838|T|2.3\r"
33  			+ "PID|||7005728\r"
34  			+ "OBR|1\r"
35  			+ "OBX|||||Sample Value\r";
36  
37  		HapiContext context = new DefaultHapiContext();
38  		Parser parser = context.getPipeParser();
39  		
40  		ORU_R01 msg;
41  		try {
42  			// This throws an exception
43  			msg = (ORU_R01) parser.parse(string);
44  		} catch (Exception e) {
45  			e.printStackTrace();
46  			/*
47  			 * Prints:
48  			 * ca.uhn.hl7v2.HL7Exception: OBX-5 is valued, but OBX-2 is not.  A datatype for OBX-5 must be specified using OBX-2. See JavaDoc for Varies#fixOBX5(Segment, ModelClassFactory)
49  			 * at ca.uhn.hl7v2.model.Varies.fixOBX5(Varies.java:189)
50  			 * at ca.uhn.hl7v2.parser.PipeParser.parse(PipeParser.java:377)
51  			 * at ca.uhn.hl7v2.parser.PipeParser.parse(PipeParser.java:1009)
52  			 * at ca.uhn.hl7v2.model.AbstractMessage.parse(AbstractMessage.java:189)
53  			 * at ca.uhn.hl7v2.examples.ParseInvalidObx2Values.main(ParseInvalidObx2Values.java:28)
54  			 */
55  		}
56  		
57  		
58  		/* 
59  		 * Setting the following property allows you to specify a default
60  		 * value to assume if OBX-2 is missing. 
61  		 */
62  		context.getParserConfiguration().setDefaultObx2Type("ST");
63  
64  		// Parsing now succeeds
65  		msg = (ORU_R01) parser.parse(string);
66  		System.out.println(msg.encode());
67  		
68  		/* Prints:
69  		 * MSH|^~\\&|ULTRA|TML|OLIS|OLIS|200905011130||ORU^R01|20169838|T|2.3
70  		 * PID|||7005728
71  		 * OBR|1
72  		 * OBX||ST|||Sample Value\r";
73  		 */
74  		
75  		/*
76  		 * The following message has an invalid value in OBX-2 
77  		 */
78  		string = "MSH|^~\\&|ULTRA|TML|OLIS|OLIS|200905011130||ORU^R01|20169838|T|2.3\r"
79  			+ "PID|||7005728\r"
80  			+ "OBR|1\r"
81  			+ "OBX||BAD|||Sample Value\r";
82  		
83  		try {
84  			// This throws an exception
85  			msg = (ORU_R01) parser.parse(string);
86  		} catch (Exception e) {
87  			e.printStackTrace();
88  			/*
89  			 * Prints:
90  			 * ca.uhn.hl7v2.HL7Exception: 'BAD' in record null is invalid for version 2.6. See JavaDoc for Varies#fixOBX5(Segment, ModelClassFactory): Segment: OBX Field #2
91  			 * at ca.uhn.hl7v2.model.Varies.fixOBX5(Varies.java:212)
92  			 * at ca.uhn.hl7v2.parser.PipeParser.parse(PipeParser.java:377)
93  			 * at ca.uhn.hl7v2.parser.PipeParser.parse(PipeParser.java:1009)
94  			 * at ca.uhn.hl7v2.model.AbstractMessage.parse(AbstractMessage.java:189)
95  			 * at ca.uhn.hl7v2.examples.ParseInvalidObx2Values.main(ParseInvalidObx2Values.java:62)
96  			 */
97  		}
98  		
99  		/* 
100 		 * Setting the following system property allows you to specify a default
101 		 * value to assume if OBX-2 is missing. 
102 		 */		
103 		context.getParserConfiguration().setInvalidObx2Type("ST");
104 
105 		// Parsing now succeeds
106 		msg = (ORU_R01) parser.parse(string);
107 
108 	}
109 
110 }