如何使用Apache Camel,Hapi和Spring(Java配置)读取HL7文件并进行解析

卡蒂

我正在尝试读取包含以下消息的hl7文件

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

使用Apache骆驼,Hapi和Spring框架(Java配置)。我想解析以上消息并从中获取细分详细信息。我正在使用HL7 2.3版。以下是我的RouteBuilder类;

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/ 这是我在其中带有上述消息的名为hl7_message.hl7的文件的位置。

以下是Processor类;

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);
    }
}

从上面的代码,我得到原始消息为null。我正在关注Apache Camel http://camel.apache.org/hl7.html上此链接提供的文档。

以下是配置文件和主要应用程序:

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();
        }
    }   
}

我对HL7完全陌生,有人可以帮助我解析以上HL7消息并从中获取细分详细信息。

里卡多·扎尼尼(Ricardo Zanini)

我认为您在路线中缺少一些步骤。尝试String先将文件消息转换为,然后再将其解组为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");

那个推子,我试图处理您的输出,但是出现了这个错误:

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

我想我\r在行尾缺少角色。但是我通过以下消息验证测试

MSH|^~\&|HL7ABLAB|HNA500|HNAM|HNAM|20090911132151||ADT^A01|
Q30235031T29347435X328970|A|2.3|123
EVN|A01|20090911132100|||^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|||20090911132100

考试:

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

    assertMockEndpointsSatisfied();
}

结果:

Original message: MSH|^~\&|HL7ABLAB|HNA500|HNAM|HNAM|20090911132151||ADT^A01|Q30235031T29347435X328970|A|2.3|123
EVN|A01|20090911132100|||^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|||20090911132100

依存关系:

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

您可以在此仓库中访问完整的测试

干杯!

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用HL7侦听器配置Apache Camel并在Tomcat中部署

如何使用HAPI框架工作解析HL7多个段(ORC / OBR / OBX)?

如何使用Apache文件读取CSV文件?

使用Hapi Fhir创建高级HL7消息

如何使用Apache Beam读取Hadoop文件?

如何使用 Apache Camel 读取文件,使用 Spring 批处理处理文件,读取每一行并将其路由回 Apache Camel

如何使用python HL7Apy正确解析HL7消息?

如何使用Apache Camel聚合CSV行?

如何使用 Apache Camel 交换消息?

如何使用 Camel Apache Timer 组件

我如何使用apache解析django的默认apache页面

如何使用Apache Beam从RabbitMQ读取数据

如何使用Apache POI读取特定行?

如何使用 Intellij IDEA 配置 Apache tomcat?

如何使用 apache kafka 消息进行分页

如何使用Apache HttpPost上传文件

如何安装和使用apache daffodil?

如何配置Apache Camel Quartz端点以使用JDBCJobStore

使用Apache Camel进行编排时,如何返回API异常?

如何正确解析HL7消息字符串?

如何使用Apache Camel获取目录中的文件数?

如何使用Apache Camel从目录中删除文件

使用 Python 解析非标准 HL7 XML

如何使用XML Apache Commons配置读取属性

如何?-具有Spring Boot和XML配置的Apache Camel

如何使用 Apache POI 读取 MS excel 文件?

如何使用Apache POI读取和搜索excel数据

如何使用Apache Spark解析包含\ n数据的CSV文件?

Spring Batch:如何使用FlatFileItemReader读取CSV文件的页脚并进行验证