[[mllp-component]]
= MLLP Component
//THIS FILE IS COPIED: EDIT THE SOURCE FILE:
:page-source: components/camel-mllp/src/main/docs/mllp-component.adoc
:docTitle: MLLP
:artifactId: camel-mllp
:description: Communicate with external systems using the MLLP protocol.
:since: 2.17
:supportLevel: Stable
:component-header: Both producer and consumer are supported

*Since Camel {since}*

*{component-header}*

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:

[source,xml]
---------------------------------------------------------
<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



// component options: START
The MLLP component supports 6 options, which are listed below.



[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *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
| *lazyStartProducer* (producer) | Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fail during starting and cause the route to fail being started. By deferring this startup to be lazy then the startup failure can be handled during routing messages via Camel's routing error handlers. Beware that when the first message is processed then creating and starting the producer may take a little time and prolong the total processing time of the processing. | false | boolean
| *basicPropertyBinding* (advanced) | Whether the component should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | false | boolean
| *defaultCharset* (advanced) | Set the default character set to use for byte to/from String conversions. | ISO-8859-1 | Charset
| *logPhi* (advanced) | Set the component to log PHI data. | true | Boolean
| *logPhiMaxBytes* (advanced) | Set the maximum number of bytes of PHI that will be logged in a log entry. | 5120 | Integer
|===
// component options: END








// endpoint options: START
The MLLP endpoint is configured using URI syntax:

----
mllp:hostname:port
----

with the following path and query parameters:

=== Path Parameters (2 parameters):


[width="100%",cols="2,5,^1,2",options="header"]
|===
| 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 (29 parameters):


[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *autoAck* (common) | Enable/Disable the automatic generation of a MLLP Acknowledgement MLLP Consumers only | true | boolean
| *bufferWrites* (common) | *Deprecated* Enable/Disable the buffering of HL7 payloads before writing to the socket. | false | boolean
| *hl7Headers* (common) | Enable/Disable the automatic generation of message headers from the HL7 Message MLLP Consumers only | true | boolean
| *requireEndOfData* (common) | Enable/Disable strict compliance to the MLLP standard. The MLLP standard specifies START_OF_BLOCKhl7 payloadEND_OF_BLOCKEND_OF_DATA, however, some systems do not send the final END_OF_DATA byte. This setting controls whether or not the final END_OF_DATA byte is required or optional. | true | boolean
| *stringPayload* (common) | Enable/Disable converting the payload to a String. If enabled, HL7 Payloads received from external systems will be validated converted to a String. If the charsetName property is set, that character set will be used for the conversion. If the charsetName property is not set, the value of MSH-18 will be used to determine th appropriate character set. If MSH-18 is not set, then the default ISO-8859-1 character set will be use. | 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 receive incoming messages, or the likes, will now be processed as a message and handled by the routing Error Handler. If disabled, the consumer will use the org.apache.camel.spi.ExceptionHandler to deal with exceptions by logging them at WARN or ERROR level and ignored. | true | boolean
| *exceptionHandler* (consumer) | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this option 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. The value can be one of: InOnly, InOut, InOptionalOut | InOut | ExchangePattern
| *lazyStartProducer* (producer) | Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fail during starting and cause the route to fail being started. By deferring this startup to be lazy then the startup failure can be handled during routing messages via Camel's routing error handlers. Beware that when the first message is processed then creating and starting the producer may take a little time and prolong the total processing time of the processing. | false | boolean
| *basicPropertyBinding* (advanced) | Whether the endpoint should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | false | boolean
| *synchronous* (advanced) | Sets whether synchronous processing should be strictly used (this component only supports synchronous operations). | true | boolean
| *charsetName* (codec) | Set the CamelCharsetName property on the exchange |  | String
| *backlog* (tcp) | 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 | Integer
| *keepAlive* (tcp) | Enable/disable the SO_KEEPALIVE socket option. | true | Boolean
| *lenientBind* (tcp) | TCP Server Only - Allow the endpoint to start before the TCP ServerSocket is bound. In some environments, it may be desirable to allow the endpoint to start before the TCP ServerSocket is bound. | false | boolean
| *maxConcurrentConsumers* (tcp) | The maximum number of concurrent MLLP Consumer connections that will be allowed. If a new connection is received and the maximum is number are already established, the new connection will be reset immediately. | 5 | int
| *receiveBufferSize* (tcp) | Sets the SO_RCVBUF option to the specified value (in bytes) | 8192 | Integer
| *reuseAddress* (tcp) | Enable/disable the SO_REUSEADDR socket option. | false | Boolean
| *sendBufferSize* (tcp) | Sets the SO_SNDBUF option to the specified value (in bytes) | 8192 | Integer
| *tcpNoDelay* (tcp) | Enable/disable the TCP_NODELAY socket option. | true | Boolean
| *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
| *idleTimeout* (timeout) | The approximate idle time allowed before the Client TCP Connection will be reset. A null value or a value less than or equal to zero will disable the idle timeout. |  | Integer
| *maxReceiveTimeouts* (timeout) | *Deprecated* The maximum number of timeouts (specified by receiveTimeout) allowed before the TCP Connection will be reset. |  | Integer
| *readTimeout* (timeout) | The SO_TIMEOUT value (in milliseconds) used after the start of an MLLP frame has been received | 5000 | int
| *receiveTimeout* (timeout) | The SO_TIMEOUT value (in milliseconds) used when waiting for the start of an MLLP frame | 15000 | int
|===
// endpoint options: END








== 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:

[width="100%",cols="<34%,<33%,<33%",]
|===========================================
|*Key* |*Description* |
|CamelMllpLocalAddress | The local TCP Address of the Socket |
|CamelMllpRemoteAddress | The local TCP Address of the Socket |
|CamelMllpSendingApplication | MSH-3 value |
|CamelMllpSendingFacility | MSH-4 value |
|CamelMllpReceivingApplication | MSH-5 value |
|CamelMllpReceivingFacility | MSH-6 value |
|CamelMllpTimestamp | MSH-7 value |
|CamelMllpSecurity | MSH-8 value |
|CamelMllpMessageType | MSH-9 value |
|CamelMllpEventType | MSH-9-1 value |
|CamelMllpTriggerEvent | MSH-9-2 value |
|CamelMllpMessageControlId | MSH-10 value |
|CamelMllpProcessingId | MSH-11 value |
|CamelMllpVersionId | MSH-12 value |
|CamelMllpCharset | MSH-18 value |
|===========================================

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 and state of the TCP Socket can be controlled
by these properties on the Camel exchange:

[width="100%",cols="<34%,<33%,<33%",]
|====================================
|*Key* |*Type* |*Description*
|CamelMllpAcknowledgement | byte[] | If present, this property will we sent to client as the MLLP Acknowledgement
|CamelMllpAcknowledgementString | String | If present and CamelMllpAcknowledgement is not present, this property will we sent to client as the MLLP Acknowledgement
|CamelMllpAcknowledgementMsaText | String | If neither CamelMllpAcknowledgement or CamelMllpAcknowledgementString are present and autoAck is true, this property can be used to specify the contents of MSA-3 in the generated HL7 acknowledgement
|CamelMllpAcknowledgementType | String  | If neither CamelMllpAcknowledgement or CamelMllpAcknowledgementString are present and autoAck is true, this property can be used to specify the HL7 acknowledgement type (i.e. AA, AE, AR)
|CamelMllpAutoAcknowledge | Boolean | Overrides the autoAck query parameter

|CamelMllpCloseConnectionBeforeSend | Boolean | If true, the Socket will be closed before sending data
|CamelMllpResetConnectionBeforeSend | Boolean | If true, the Socket will be reset before sending data
|CamelMllpCloseConnectionAfterSend | Boolean | If true, the Socket will be closed immediately after sending data
|CamelMllpResetConnectionAfterSend | Boolean | If true, the Socket will be reset immediately after sending any data
|====================================

// REVISIT - Empty section is bad for AsciiDoc build
//=== 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:

[width="100%",cols="<34%,<33%,<33%",]
|===================================
|*Key* |*Description* |
|CamelMllpLocalAddress | The local TCP Address of the Socket | 
|CamelMllpRemoteAddress | The remote TCP Address of the Socket | 
|CamelMllpAcknowledgement | The HL7 Acknowledgment byte[] received | 
|CamelMllpAcknowledgementString | The HL7 Acknowledgment received, converted to a String | 
|CamelMllpAcknowledgementType | The HL7 acknowledgement type (AA, AE, AR, etc)
|===================================

== *Exchange Properties*

The state of the TCP Socket can be controlled by these properties on the Camel exchange:

[width="100%",cols="<34%,<33%,<33%",]
|====================================
|*Key* |*Type* |*Description*
|CamelMllpCloseConnectionBeforeSend | Boolean | If true, the Socket will be closed before sending data
|CamelMllpResetConnectionBeforeSend | Boolean | If true, the Socket will be reset before sending data
|CamelMllpCloseConnectionAfterSend | Boolean | If true, the Socket will be closed immediately after sending data
|CamelMllpResetConnectionAfterSend | Boolean | If true, the Socket will be reset immediately after sending any data
|====================================

include::camel-spring-boot::page$mllp-starter.adoc[]
