HL7 DataFormat
The HL7 component ships with a HL7 data format that can be used to format between String
and marshal or unmarshal HL7 model objects.
marshal
= from Message to byte stream (can be used when
...
- responding using the HL7 MLLP codec)
unmarshal
= from byte stream to Message (can be used when receiving streamed data from the HL7 MLLP
To use the data format, simply instantiate an instance and invoke the marhsal marshal or unmarshl unmarshal operation in the route builder:
Code Block | ||||
---|---|---|---|---|
| ||||
DataFormat hl7 = new HL7DataFormat();
...
from("direct:hl7in").marshal(hl7).to("jms:queue:hl7out");
|
In the sample above, the HL7 is marshalled from a HAPI Message object to a byte stream and put on a JMS queue.
The next example is the opposite:
Code Block | ||||
---|---|---|---|---|
| ||||
DataFormat hl7 = new HL7DataFormat();
...
from("jms:queue:hl7out").unmarshal(hl7).to("patientLookupService");
|
Here we unmarshal the byte stream into a HAPI Message object that is passed to our patient lookup service.
Tip | ||
---|---|---|
| ||
As of HAPI 2.0 (used by Camel 2.11), the HL7v2 model classes are fully serializable. So you can put HL7v2 messages directly into a JMS queue (i.e. without calling |
Note | ||
---|---|---|
| ||
As of Camel 2.11, |
Note | ||
---|---|---|
| ||
As of Camel 2.14.1, both |
There Notice there is a shorthand syntax in Camel for well-known data formats that is are commonly used.
Then you don't need to create an instance of the HL7DataFormat
object:
Code Block | ||||
---|---|---|---|---|
| ||||
from("direct:hl7in").marshal().hl7().to("jms:queue:hl7out");
from("jms:queue:hl7out").unmarshal().hl7().to("patientLookupService");
|
Message Headers
The unmarshal operation adds these MSH fields as headers on the Camel message:
Camel 1.x
Key | MSH field | Example |
---|---|---|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
Camel 2.0
Key | MSH field | Example |
---|---|---|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
All headers are String
types. If a header value is missing, its value is null
.
Options
The HL7 Data Format supports the following options:
Option | Default | Description |
---|---|---|
validate | true | Camel 2.0: Whether the HAPI Parser should validate. |
Dependencies
To use HL7 in your camel routes you need to add a dependency on camel-hl7, which implements this data format.
If you use Maven, you could just add the following to your pom.xml
, substituting the version number for the latest & greatest release (see the download page for the latest versions).
Code Block |
---|
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-hl7</artifactId>
<version>1.6.0</version>
</dependency>
|
Camel 2.3: The HAPI library version 0.6 has been split into a base library and several structures libraries, one for each HL7v2 message version:
- v2.1 structures library
- v2.2 structures library
- v2.3 structures library
- v2.3.1 structures library
- v2.4 structures library
- v2.5 structures library
- v2.5.1 structures library
By default camel-hl7
only references the HAPI base library. Applications are responsible for including structures libraries themselves. For example, if a application works with HL7v2 message versions 2.4 and 2.5 then the following dependencies must be added:
Code Block |
---|
<dependency>
<groupId>ca.uhn.hapi</groupId>
<artifactId>hapi-structures-v24</artifactId>
<version>0.6</version>
</dependency>
<dependency>
<groupId>ca.uhn.hapi</groupId>
<artifactId>hapi-structures-v25</artifactId>
<version>0.6</version>
</dependency>
|
OSGi
When running camel-hl7
on an OSGi platform it is recommended to use this hapi-0.6 OSGi bundle from the Camel Maven repository. This bundle contains the HAPI base library and all structure libraries on the bundle classpath.