MLLP Component

Available as of Camel version 2.17

The 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 MLLP component  provides a simple configuration URI, automated HL7 acknowledgment generation and automatic acknowledgement interrogation.

The MLLP protocol does not typically use a large number of concurrent TCP connections - a single active TCP connection is the normal case.  Therefore, the MLLP component uses a simple thread-per-connection model based an standard Java Sockets. This keeps the implementation simple and eliminates the dependencies other than Camel itself.

The component supports the following:

  • A Camel consumer using a TCP Server

  • A Camel producer using a TCP Client

The MLLP component uses byte[] payloads, and relies on Camel Type Conversion to convert byte[] to other types.  

Maven users will need to add the following dependency to their pom.xml for this component:

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-mllp</artifactId>
    <version>x.x.x</version>
    <!-- use the same version as your Camel core version -->
</dependency>

MLLP Options

The MLLP component has no options.

The MLLP endpoint is configured using URI syntax:

mllp:hostname:port

with the following path and query parameters:

Path Parameters (2 parameters):

Name Description Default Type

hostname

Required Hostname or IP for connection for the TCP connection. The default value is null which means any local IP address

String

port

Required Port number for the TCP connection

int

Query Parameters (22 parameters):

Name Description Default Type

autoAck (common)

Enable/Disable the automatic generation of a MLLP Acknowledgement MLLP Consumers only

true

boolean

bufferWrites (common)

Enable/Disable the validation of HL7 Payloads If enabled MLLP Payloads are buffered and written to the external system in a single write(byte) operation. If disabled the MLLP payload will not be buffered and three write operations will be used. The first operation will write the MLLP start-of-block character 0x0b (ASCII VT) the second operation will write the HL7 payload and the third operation will writh the MLLP end-of-block character and the MLLP end-of-data character 0x1c 0x0d (ASCII FS CR).

true

boolean

hl7Headers (common)

Enable/Disable the automatic generation of message headers from the HL7 Message MLLP Consumers only

true

boolean

keepAlive (common)

Enable/disable the SO_KEEPALIVE socket option.

true

boolean

reuseAddress (common)

Enable/disable the SO_REUSEADDR socket option.

false

boolean

tcpNoDelay (common)

Enable/disable the TCP_NODELAY socket option.

true

boolean

validatePayload (common)

Enable/Disable the validation of HL7 Payloads If enabled HL7 Payloads received from external systems will be validated (see Hl7Util.generateInvalidPayloadExceptionMessage for details on the validation). If and invalid payload is detected a MllpInvalidMessageException (for consumers) or a MllpInvalidAcknowledgementException will be thrown.

false

boolean

bridgeErrorHandler (consumer)

Allows for bridging the consumer to the Camel routing Error Handler which mean any exceptions occurred while the consumer is trying to pickup incoming messages or the likes will now be processed as a message and handled by the routing Error Handler. By default the consumer will use the org.apache.camel.spi.ExceptionHandler to deal with exceptions that will be logged at WARN or ERROR level and ignored.

false

boolean

exceptionHandler (consumer)

To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN or ERROR level and ignored.

ExceptionHandler

exchangePattern (consumer)

Sets the exchange pattern when the consumer creates an exchange.

ExchangePattern

backlog (advanced)

The maximum queue length for incoming connection indications (a request to connect) is set to the backlog parameter. If a connection indication arrives when the queue is full the connection is refused.

5

int

receiveBufferSize (advanced)

Sets the SO_RCVBUF option to the specified value (in bytes)

Integer

sendBufferSize (advanced)

Sets the SO_SNDBUF option to the specified value (in bytes)

Integer

synchronous (advanced)

Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).

false

boolean

charsetName (codec)

Set the CamelCharsetName property on the exchange

String

acceptTimeout (timeout)

Timeout (in milliseconds) while waiting for a TCP connection TCP Server Only

60000

int

bindRetryInterval (timeout)

TCP Server Only - The number of milliseconds to wait between bind attempts

5000

int

bindTimeout (timeout)

TCP Server Only - The number of milliseconds to retry binding to a server port

30000

int

connectTimeout (timeout)

Timeout (in milliseconds) for establishing for a TCP connection TCP Client only

30000

int

maxReceiveTimeouts (timeout)

The maximum number of timeouts (specified by receiveTimeout) allowed before the TCP Connection will be reset.

-1

int

readTimeout (timeout)

The SO_TIMEOUT value (in milliseconds) used after the start of an MLLP frame has been received

500

int

receiveTimeout (timeout)

The SO_TIMEOUT value (in milliseconds) used when waiting for the start of an MLLP frame

10000

int

MLLP Consumer

The MLLP Consumer supports receiving MLLP-framed messages and sending HL7 Acknowledgements.  The MLLP Consumer can automatically generate the HL7 Acknowledgement (HL7 Application Acknowledgements only - AA, AE and AR), or the acknowledgement can be specified using the CamelMllpAcknowledgement exchange property.  Additionally, the type of acknowledgement that will be generated can be controlled by setting the CamelMllpAcknowledgementType exchange property.

Message Headers

The MLLP Consumer adds these headers on the Camel message:

Key

MSH field

Example

CamelMllpLocalAddress

 

CamelMllpRemoteAddress

 

CamelMllpSendingApplication

MSH-3

APPA

CamelMllpSendingFacility

MSH-4

FACA

CamelMllpReceivingApplication

MSH-5

CAMEL

CamelMllpReceivingFacility

MSH-6

FACB

CamelMllpTimestamp

MSH-7

20150106235900

CamelMllpSecurity

MSH-8

 

CamelMllpMessageType

MSH-9

ADT^A04

CamelMllpEventType

MSH-9-1

AD4

CamelMllpTriggerEvent

MSH-9-2

A04

CamelMllpMessageControlId

MSH-10

12345

CamelMllpProcessingId

MSH-11

P

CamelMllpVersionId

MSH-12

2.3.1

CamelMllpCharset

MSH-18

 

All headers are String types. If a header value is missing, its value is null.

Exchange Properties

The type of acknowledgment the MLLP Consumer generates can be controlled by these properties on the Camel exchange:

Key

Example

CamelMllpAcknowledgement

 

CamelMllpAcknowledgementType

 AR

All headers are String types. If a header value is missing, its value is null.

Consumer Configuration

MLLP Producer

The MLLP Producer supports sending MLLP-framed messages and receiving HL7 Acknowledgements.  The MLLP Producer interrogates the HL7 Acknowledgments and raises exceptions if a negative acknowledgement is received.  The received acknowledgement is interrogated and an exception is raised in the event of a negative acknowledgement.

Message Headers

The MLLP Producer adds these headers on the Camel message:

Key

MSH field

Example

CamelMllpLocalAddress

 

CamelMllpRemoteAddress

 

CamelMllpAcknowledgement

 

CamelMllpAcknowledgementType

AA

All headers are String types. If a header value is missing, its value is null.