The camel-mllp component is specifically designed to handle the nuances of the MLLP protocol and provide the functionality required by Healthcare providers to communicate with other systems using the MLLP protocol.
The component is capable of handling both byte and String payloads which allows using other HL7 Libraries (i.e. HAPI) to parse the messages. When String payloads are specified, the component will use the systems default Charset for encoding/decoding, but this can be overridden.
The component provides a simple URI for configuring MLLP endpoints: MLLP-Producers: to( "mllp://:" ) MLLP-Consumers: from("mllp:// to listen on a specific address from("mllp://port") to listen on all local addresses
MLLP-Producers also interrogate the HL7 Acknowledgment received from the external system and if a negative acknowledgment is received, the producer sets an exception on the exchange indicating the type of negative acknowledgement that was received (i.e. a HL7 Application Reject Acknowledgement or a HL7 Application Error Acknowledgement). This enables the use of Camel Redelivery Policies to configure redelivery attempts and routing erroneous messages to alternate endpoints for analysis.
MLLP-Consumers will, by default, automatically generate an acknowledgement (a HL7 Application Accept Acknowledgment for successfully processed messages, or a HL7 Application Error Acknowledgement for messages where an exception is generated). This behaviour can be disabled with the autoAck=false URI parameter, which allows the user to generated their own HL7 Acknowledgment.
The component also provides a Camel Processor that is capable of generating HL7 Acknowledgements. Therefore, the HAPI is not required to generate HL7 Acknowledgements - however, it can be used if desired.
By default, the processor will generate a HL7 Application Accept Acknowledgement if there is not an exception on the Camel Exchange - otherwise it will generate a HL7 Application Error Acknowledgement. The generated acknowledgement is placed in the "Out" Message of the Exchange by default in order to preserve the original HL7 message for later processing (i.e. log the HL7 message and the acknowledgment together).
Since the MLLP protocol does not typically use a large number of concurrent connections, the camel-mllp component uses a simple thread-per-connection model based an standard Java Sockets. This keeps the implementation simple, and also eliminates the dependencies on other camel components.
An initial code base has been developed here: