第140章 HL7 DataFormat
Camel バージョン 2.0 で利用可能
HL7 コンポーネントは、HAPI ライブラリー を使用した HL7 MLLP プロトコルおよび HL7 v2 メッセージ の使用に使用されます。
このコンポーネントは以下をサポートします。
- Minaの HL7 MLLP コーデック
- Camel 2.15 以降の Netty4 の HL7 MLLP コーデック
- Type Converter from/to HAPI and String
- HAPI ライブラリーを使用した HL7 DataFormat
- camel-mina2 コンポーネントと統合されるため、より簡単に使用できます。
Maven ユーザーは、このコンポーネントの pom.xml
に以下の依存関係を追加する必要があります。
<dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-hl7</artifactId> <version>x.x.x</version> <!-- use the same version as your Camel core version --> </dependency>
140.1. HL7 MLLP プロトコル
HL7 は、テキストベースの TCP ソケットベースのプロトコルである HL7 MLLP プロトコルでよく使用されます。このコンポーネントには、MLLP プロトコルに準拠する Mina および Netty4 Codec が同梱されています。そのため、TCP トランスポート層で HL7 リクエストを受け入れる HL7 リスナーを簡単に公開できます。HL7 リスナーサービスを公開するには、camel-mina2 または camel-netty4 コンポーネントは HL7MLLPCodec
(mina2)または HL7MLLPNettyDecoder/HL7MLLPNettyEncoder
(Netty4)で使用されます。
HL7 MLLP コーデックは、以下のように設定できます。
Name | デフォルト値 | 説明 |
---|---|---|
|
| HL7 ペイロード全体の開始バイト。 |
|
| HL7 ペイロードにまたがる最初の終了バイト。 |
|
| HL7 ペイロードにまたがる 2 番目の終了バイト。 |
| JVM のデフォルト | codec に使用するエンコーディング( 文字セット名)です。指定され ていない場合、Camel は JVM デフォルトの Charset を使用します。 |
|
| (Camel 2.14.1)true の場合、コーデックは定義された文字セットを使用して 文字列を作成します。false の場合、コーデックはプレーンなバイトアレイをルートに送信し、HL7 Data Format が HL7 メッセージコンテンツから実際の文字セットを判断できるようにします。 |
|
|
|
140.1.1. Mina を使用した HL7 リスナーの公開
Spring XML ファイルでは、ポート 8888
で TCP を使用して HL7 要求をリッスンするように mina2 エンドポイントを設定します。
<endpoint id="hl7MinaListener" uri="mina2:tcp://localhost:8888?sync=true&codec=#hl7codec"/>
sync=true は、このリスナーが同期されているため、呼び出し元に HL7 応答を返すことを示します。HL7 コーデックは codec=#hl7codec で設定されます。hl7codec
は Spring Bean ID であるため、mygreatcodecforhl7
などの名前を付けることができます。codec も Spring XML ファイルに設定されます。
<bean id="hl7codec" class="org.apache.camel.component.hl7.HL7MLLPCodec"> <property name="charset" value="iso-8859-1"/> </bean>
エンドポイント hl7MinaLlistener はコンシューマーとしてルートで使用できます。これは Java DSL の例になります。
from("hl7MinaListener") .bean("patientLookupService");
これは HL7 をリッスンし、Snational LookupService という名前のサービスにルーティングする非常にシンプルなルートです。これは Spring XML で以下のとおりに設定された Spring Bean ID でもあります。
<bean id="patientLookupService" class="com.mycompany.healthcare.service.PatientLookupService"/>
ビジネスロジックは、Camel に依存しない POJO クラスに実装できます。以下に例を示します。
import ca.uhn.hl7v2.HL7Exception; import ca.uhn.hl7v2.model.Message; import ca.uhn.hl7v2.model.v24.segment.QRD; public class PatientLookupService { public Message lookupPatient(Message input) throws HL7Exception { QRD qrd = (QRD)input.get("QRD"); String patientId = qrd.getWhoSubjectFilter(0).getIDNumber().getValue(); // find patient data based on the patient id and create a HL7 model object with the response Message response = ... create and set response data return response }
140.1.2. Netty を使用した HL7 リスナーの公開(Camel 2.15 以降で利用可能)
Spring XML ファイルでは、ポート 8888
で TCP を使用して HL7 要求をリッスンするように netty4 エンドポイントを設定します。
<endpoint id="hl7NettyListener" uri="netty4:tcp://localhost:8888?sync=true&encoder=#hl7encoder&decoder=#hl7decoder"/>
sync=true は、このリスナーが同期されているため、呼び出し元に HL7 応答を返すことを示します。HL7 codec は encoder=#hl7encoder*and*decoder=#hl7decoder で設定されます。hl7encoder
および hl7decoder
は単に Bean ID であるため、異なる名前を付けることができます。Bean は Spring XML ファイルで設定できます。
<bean id="hl7decoder" class="org.apache.camel.component.hl7.HL7MLLPNettyDecoderFactory"/> <bean id="hl7encoder" class="org.apache.camel.component.hl7.HL7MLLPNettyEncoderFactory"/>
エンドポイント hl7NettyListener は、以下の Java DSL の例になります。
from("hl7NettyListener") .bean("patientLookupService");