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.app.Connection;
7 import ca.uhn.hl7v2.app.ConnectionHub;
8 import ca.uhn.hl7v2.app.HL7Service;
9 import ca.uhn.hl7v2.llp.ExtendedMinLowerLayerProtocol;
10 import ca.uhn.hl7v2.llp.MinLowerLayerProtocol;
11 import ca.uhn.hl7v2.llp.MllpConstants;
12
13 public class HandlingCharacterEncodings {
14
15 @SuppressWarnings("unused")
16 public static void main(String[] args) throws HL7Exception {
17
18 /*
19 * When you use ConnectionHub, SimpleServer, or other network related classes within HAPI to
20 * transmit and receive messages, you may need to consider character sets if you plan on
21 * dealing with messages that contain characters beyond basic ASCII.
22 */
23
24 /*
25 * Character sets are handled by the Lower Layer Protocol implementation, as shown in the
26 * two examples below. The most common implementation is MinLowerLayerProtocol.
27 *
28 * By default, MinLowerLayerProtocol uses the "US-ASCII" character set, which is not likely
29 * what you are looking for if you want to process accents or characters that don't appear
30 * in the English alphabet.
31 */
32 HapiContext ctx = new DefaultHapiContext();
33
34 /*
35 * Using MinLowerLayerProtocol, it is possible to set the use of a specific character set by
36 * specifying it to the MLLP. For example, if you wanted to receive Central and Eastern
37 * European characters, you probably need the ISO-8859-2 charset.
38 */
39 MinLowerLayerProtocol mllp = new MinLowerLayerProtocol();
40 mllp.setCharset("ISO-8859-2");
41 ctx.setLowerLayerProtocol(mllp);
42
43 /*
44 * It is also possible to set the charset globally using a system property. Setting the following
45 * system property before using MinLowerLayerProtocol tells the LLP that incoming messages
46 * should be received using this encoding. Note that you can not change this value after a
47 * connection is established. Also note that this setting does not override individual instances
48 * where the charset has been explicitly set (such as the lines above)
49 */
50 System.setProperty(MllpConstants.CHARSET_KEY, "ISO-8859-2");
51
52 // Create an HL7 Server
53 HL7Service s = ctx.newServer(123, false);
54
55 /*
56 * If you want to transmit using the same encoding all of the time, you may use default
57 * MinLowerLayerProtocol. In the example below, messages will be sent out using ISO-8859-2
58 */
59 ConnectionHub hub = ctx.getConnectionHub();
60 Connection c = hub.attach("localhost", 8888, false);
61
62 /*
63 * If the systems sending you messages are correctly populating MSH-18, as in the following
64 * message which specified "8859/1" (aka ISO-8859-1) encoding, you have another option.
65 *
66 MSH|^~\&|4265-ADT|4265|eReferral|eReferral|201004141020||ADT^A45^ADT_A45|102416|T^|2.5^^|||NE|AL|CAN|8859/1
67 EVN|A45|201004141020|
68 PID|1||7010226^^^4265^MR~0000000000^^^CANON^JHN^^^^^^GP~1736465^^^4265^VN||Park^Green^^^MS.^^L||19890812|F|||123 TestingLane^^TORONTO^CA-ON^M5G2C2^CAN^H^~^^^^^^^||^PRN^PH^^1^416^2525252^|^^^^^^^||||||||||||||||N
69 PV1|1|I||||^^^WP^1469^^^^^^^^|||||||||||^Derkach^Peter.^^^Dr.||20913000131|||||||||||||||||||||||||201004011340|201004141018
70 *
71 * The other possibility (only available in HAPI 2.0+) is to read the value from MSH-18 and
72 * use that to identify the character set. This can be advantageous if you want to be able
73 * to receive multiple CharSets. To do this, you need to use the
74 * ExtendedMinLowerLayerProtocol.
75 */
76 ctx.setLowerLayerProtocol(new ExtendedMinLowerLayerProtocol());
77 s = ctx.newServer(123, false);
78
79 /*
80 * Now the ExtendedMinLowerLayerProtocol is used to send out messages using the value you
81 * have placed in MSH-18.
82 */
83 c = hub.attach("localhost", 8888, false);
84
85 }
86
87 }