第149章 HL7 DataFormat
Camel バージョン 2.0 以降で利用可能
HL7 コンポーネントは、HAPI ライブラリー を使用して HL7 MLLP プロトコルおよび HL7 v2 メッセージ を操作するために使用されます。
このコンポーネントは以下をサポートします。
- Mina 用 HL7 MLLP コーデック
- Camel 2.15 以降の Netty4 用の HL7 MLLP コーデック
- HAPI および文字列との間の型コンバーター
- HAPI ライブラリーを使用した HL7 DataFormat
- camel-mina2 コンポーネントとうまく統合されているため、さらに使いやすくなっています。
			Maven ユーザーは、このコンポーネントの pom.xml に以下の依存関係を追加する必要があります。
		
149.1. HL7 MLLP プロトコル
				HL7 は、多くの場合、テキストベースの TCP ソケットベースのプロトコルである HL7 MLLP プロトコルと共に使用されます。このコンポーネントには、MLLP プロトコルに準拠する Mina および Netty4 コーデックが付属しているため、TCP トランスポート層を介して HL7 要求を受け入れる HL7 リスナーを簡単に公開できます。HL7 リスナーサービスを公開するには、camel-mina2 または camel-netty4 コンポーネントを HL7MLLPCodec (mina2) または HL7MLLPNettyDecoder/HL7MLLPNettyEncoder (Netty4) と共に使用します。
			
HL7 MLLP コーデックは、次のように設定できます。
| 名前 | デフォルト値 | 説明 | 
|---|---|---|
| 
								 | 
								 | HL7 ペイロードにまたがる開始バイト。 | 
| 
								 | 
								 | HL7 ペイロードにまたがる最初のエンドバイト。 | 
| 
								 | 
								 | HL7 ペイロードにまたがる 2 番目のエンドバイト。 | 
| 
								 | JVM デフォルト | コーデックに使用するエンコーディング (文字セット名)。指定しない場合、Camel は JVM のデフォルトの文字セット を使用します。 | 
| 
								 | 
								 | (Camel 2.14.1 以降) true の場合、コーデックは定義された文字セットを使用して文字列を作成します。false の場合、コーデックはプレーンバイト配列をルートに送信し、HL7 データ形式で HL7 メッセージコンテンツからの実際の文字セットを判別できるようにします。 | 
| 
								 | 
								 | 
								HL7 が  | 
149.1.1. Mina を使用した HL7 リスナーの公開
					Spring XML ファイルでは、ポート 8888 で TCP を使用して HL7 リクエストをリッスンするように mina2 エンドポイントを設定します。
				
<endpoint id="hl7MinaListener" uri="mina2:tcp://localhost:8888?sync=true&codec=#hl7codec"/>
<endpoint id="hl7MinaListener" uri="mina2:tcp://localhost:8888?sync=true&codec=#hl7codec"/>
					sync=true は、このリスナーが同期的であるため、HL7 応答を呼び出し元に返すことを示します。HL7 コーデックは、codec=#hl7codec で設定されます。hl7codec は単なる Spring Bean ID であるため、mygreatcodecforhl7 などの名前を指定できることに注意してください。コーデックは、Spring XML ファイルにも設定されています。
				
<bean id="hl7codec" class="org.apache.camel.component.hl7.HL7MLLPCodec">
    <property name="charset" value="iso-8859-1"/>
</bean>
<bean id="hl7codec" class="org.apache.camel.component.hl7.HL7MLLPCodec">
    <property name="charset" value="iso-8859-1"/>
</bean>以下の Java DSL の例が示すように、エンドポイント hl7MinaLlistener をルートで consumer として使用できます。
from("hl7MinaListener")
  .bean("patientLookupService");
from("hl7MinaListener")
  .bean("patientLookupService");これは、HL7 をリッスンし、patientLookupService という名前のサービスにルーティングする非常に単純なルートです。これは Spring Bean ID でもあり、Spring XML で次のように設定されます。
<bean id="patientLookupService" class="com.mycompany.healthcare.service.PatientLookupService"/>
<bean id="patientLookupService" class="com.mycompany.healthcare.service.PatientLookupService"/>次に示すように、Camel に依存しない POJO クラスでビジネスロジックを実装できます。
149.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"/>
<endpoint id="hl7NettyListener" uri="netty4:tcp://localhost:8888?sync=true&encoder=#hl7encoder&decoder=#hl7decoder"/>
					sync=true は、このリスナーが同期的であるため、HL7 応答を呼び出し元に返すことを示します。HL7 コーデックは、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"/>
<bean id="hl7decoder" class="org.apache.camel.component.hl7.HL7MLLPNettyDecoderFactory"/>
<bean id="hl7encoder" class="org.apache.camel.component.hl7.HL7MLLPNettyEncoderFactory"/>次の Java DSL の例が示すように、エンドポイント hl7NettyListener を consumer としてルートで使用できます。
from("hl7NettyListener")
  .bean("patientLookupService");
from("hl7NettyListener")
  .bean("patientLookupService");