2017-12-06 5 views
1

Ich versuche, eine HL7-Datei zu lesen, die enthält die folgende MeldungWie HL7-Datei und analysieren sie mit Apache Camel, Hapi & Spring (Java config)

MSH|^~\\&|MYSENDER|MYRECEIVER|MYAPPLICATION||200612211200||QRY^A19|1234|P|2.3 
QRD|200612211200|R|I|GetPatient|||1^RD|01017|DEM|| 

mit Apache Camel, Hapi & Frühling lesen Framework (Java-Konfiguration). Ich möchte die obige Nachricht parsen und Segmentdetails daraus erhalten. Ich benutze HL7 Version 2.3. Folgendes ist meine RouteBuilder-Klasse;

import org.apache.camel.builder.RouteBuilder; 
import org.springframework.stereotype.Component; 
import example.springcamel.processors.Hl7MessageProcessor; 

@Component 
public class SimpleRouteBuilder extends RouteBuilder { 
    @Override 
    public void configure() throws Exception { 
     from("file://E:/projects/hl7/file_to_read/input/") 
      .process(new Hl7MessageProcessor()) 
      .end(); 
     } 
    } 

E:/projects/hl7/file_to_read/input/ Dies ist der Ort, an dem ich mit obiger Nachricht eine Datei mit dem Namen hl7_message.hl7 habe.

Folgendes ist die Prozessorklasse;

import org.apache.camel.Exchange; 
import org.apache.camel.Processor; 
import ca.uhn.hl7v2.model.Message; 

public class Hl7MessageProcessor implements Processor { 
    @Override 
    public void process(Exchange exchange) throws Exception { 
     Message message = exchange.getIn().getBody(Message.class); 
     System.out.println("Original message: " + message); 
    } 
} 

Von oben genannten Code, ich bekomme die ursprüngliche Nachricht als null. Ich folge in der Dokumentation zu diesem Link von Apache Camel gegeben http://camel.apache.org/hl7.html

Im Folgenden werden die Konfigurationsdateien und Hauptanwendung:

SpringConfiguration.java

import org.springframework.context.annotation.ComponentScan; 
import org.springframework.context.annotation.Configuration; 

@Configuration 
@ComponentScan(basePackages = "example.springcamel") 
public class SpringConfiguration { 

} 

RoutesConfiguration.java

import org.apache.camel.spring.javaconfig.CamelConfiguration; 
import org.springframework.context.annotation.ComponentScan; 
import org.springframework.context.annotation.Configuration; 

@Configuration 
@ComponentScan(basePackages = "example.springcamel.routes") 
public class RoutesConfiguration extends CamelConfiguration { 

} 

MainApplication.java

import org.apache.camel.CamelContext; 
import org.apache.camel.spring.SpringCamelContext; 
import org.springframework.context.annotation.AnnotationConfigApplicationContext; 
import org.springframework.context.support.AbstractApplicationContext; 
import example.springcamel.configuration.SpringConfiguration; 

public class MainApplication { 
    @SuppressWarnings("deprecation") 
    public static void main(String[] args) throws Exception { 
     AbstractApplicationContext springContext = new 
       AnnotationConfigApplicationContext(SpringConfiguration.class); 
     CamelContext camelContext = SpringCamelContext.springCamelContext(springContext, false); 
     try { 
      camelContext.start(); 
      Thread.sleep(3000); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } finally { 
      camelContext.stop(); 
      springContext.close(); 
     } 
    } 
} 

Ich bin zu HL7 völlig neu, jemand hilft mir freundlich auf die obige HL7 Nachricht Parsen und von ihm bekommt Segment Details.

+0

Haben Sie diese Komponente noch nie benutzt, aber haben Sie versucht, 'HL7DataFormat' zu verwenden, wie im folgenden JUnit-Test gezeigt? [HL7ValidateTest.java] (https://github.com/apache/camel/blob/master/components/camel-hl7/src/test/java/org/apache/camel/component/hl7/HL7ValidateTest.java) – Bedla

+0

kann Sie sagen mir, wo ich das im obigen Code verwenden soll und was es tut? – karthi

+0

Wirklich habe ich das nie benutzt, also ist das nur raten: In Ihrem 'SimpleRouteBuilder' instanziieren Sie' HL7DataFormat' mit 'DataFormat hl7 = new HL7DataFormat();'. Dann benutze es in deiner Route und füge '.unmarshal (hl7)' vor 'process()' Methode hinzu. Siehe [HL7 DataFormat] (http://camel.apache.org/hl7-dataformat.html) – Bedla

Antwort

3

Ich denke, dass Sie einige Schritte in Ihrer Route fehlen. Versuchen Sie, Ihre Datei Nachricht an String zuerst zu konvertieren und dann unmarshall es zu HL7:

from("file:src/test/resources/hl7?noop=true") 
    .convertBodyTo(String.class) 
    .unmarshal() 
    .hl7(false) 
    .log("The Message body is: ${body}") 
    .process(new Processor() { 
     public void process(Exchange exchange) throws Exception { 
      final Message message = exchange.getIn().getBody(Message.class); 
      System.out.println("Original message: " + message); 
     } 
    }) 
    .to("mock:result"); 

Das gesagt, habe ich versucht, die Ausgabe zu verarbeiten, aber ich habe diesen Fehler:

ca.uhn.hl7v2.HL7Exception: The HL7 version 2.3 QRD is not recognized 

Ich glaube, ich fehlte das Zeichen \r am Ende der Zeile. Aber ich bestätigen den Test mit this message:

MSH|^~\&|HL7ABLAB|HNA500|HNAM|HNAM|20090911132151||ADT^A01| 
Q30235031T29347435X328970|A|2.3|123 
EVN|A01|0|||^DRONE_PM1^DRONE_PM^^^^^^^Personnel 
PID|1||1357920591||IntFace1101A^WinTask^^^^^Current||19801117|M|||||||||| 
10000476524^^^FIN^FIN NBR|100000451||||||0 
PV1|1|Inpatient|CD:16067689^CD:16067691^CD:16067741^Uniontown Hospit^^Bed(s) 
^Uniontown Hospit||||||||||||||501455^Orr^Maggi^^^^^^External ID^Personnel^^^ 
External 
Identifier~25584^Orr^Maggi^^^^^^PERSONNEL PRIMARY 
IDENTIFIER^Personnel^^^Personnel Primary Identifier|Inpatient||||||||||||||||||| 
|| 
Uniontown Hospit||Active|||0 

Der Test:

@Test 
public void test() throws InterruptedException { 
    MockEndpoint mock = getMockEndpoint("mock:result"); 
    mock.expectedMessageCount(1); 
    mock.expectedBodyReceived().body(Message.class); 

    assertMockEndpointsSatisfied(); 
} 

Das Ergebnis:

Original message: MSH|^~\&|HL7ABLAB|HNA500|HNAM|HNAM|20090911132151||ADT^A01|Q30235031T29347435X328970|A|2.3|123 
EVN|A01|0|||^DRONE_PM1^DRONE_PM^^^^^^^Personnel 
PID|1||1357920591||IntFace1101A^WinTask^^^^^Current||19801117|M|||||||||| 
10000476524^^^FIN^FIN NBR|100000451||||||0 
PV1|1|Inpatient|CD:16067689^CD:16067691^CD:16067741^Uniontown Hospit^^Bed(s) 
^Uniontown Hospit||||||||||||||501455^Orr^Maggi^^^^^^External ID^Personnel^^^ 
External 
Identifier~25584^Orr^Maggi^^^^^^PERSONNEL PRIMARY 
IDENTIFIER^Personnel^^^Personnel Primary Identifier|Inpatient||||||||||||||||||| 
|| 
Uniontown Hospit||Active|||0 

Abhängigkeiten:

<dependency> 
    <groupId>ca.uhn.hapi</groupId> 
    <artifactId>hapi-structures-v23</artifactId> 
</dependency> 
<dependency> 
    <groupId>org.apache.camel</groupId> 
    <artifactId>camel-hl7</artifactId> 
</dependency> 

Sie die complet zugreifen e Test in this repo.

Prost!

+0

Es funktioniert jetzt, Vielen Dank. – karthi