HAPI - Как разрешить обработку типа сообщения только с одним компонентом в MSH-9 - PullRequest
2 голосов
/ 27 мая 2019

Я создаю приложение, которое взаимодействует с системой, которая отправляет сообщения типа ZPM только для транзакций типа инвентаризации. Он также отправляет платежные транзакции типа DFT ^ P03, и моя система более чем рада их обработать. Однако, когда он получает сообщение ZPM, анализатор канала по умолчанию полностью взрывается и выдает следующее исключение:

ca.uhn.hl7v2.HL7Exception: Can't determine message structure from MSH-9: ZPM HINT: there are only 1 of 3 components present
at ca.uhn.hl7v2.parser.PipeParser.getStructure(PipeParser.java:186)
at ca.uhn.hl7v2.parser.PipeParser.doParse(PipeParser.java:223)
at ca.uhn.hl7v2.parser.GenericParser.doParse(GenericParser.java:245)
at ca.uhn.hl7v2.parser.Parser.parse(Parser.java:212)
at ca.uhn.hl7v2.parser.GenericParser.parse(GenericParser.java:253)
at ca.uhn.hl7v2.protocol.impl.ApplicationRouterImpl.processMessage(ApplicationRouterImpl.java:138)
at ca.uhn.hl7v2.protocol.impl.ApplicationRouterImpl.processMessage(ApplicationRouterImpl.java:105)
at ca.uhn.hl7v2.app.Responder.processMessage(Responder.java:91)
at ca.uhn.hl7v2.app.Receiver$Grunt.run(Receiver.java:127)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.base/java.lang.Thread.run(Thread.java:834)

Я могу обойти эту проблему, настроив отображение сообщений ZPM на DFT_P03, но это шаг развертывания, который я хотел бы устранить. Кроме того, сообщения инвентаризации НЕ являются финансовой транзакцией, так что это чрезвычайно хакерский. Вот как я инициализирую свой контекст HAPI:

ModelClassFactory cmf = new 
CustomModelClassFactory("com.something.some_lib.hl7.custommodel");

MinLowerLayerProtocol mllp = new MinLowerLayerProtocol();
mllp.setCharset(StandardCharsets.ISO_8859_1.name());

hapiContext = new DefaultHapiContext();
hapiContext.setValidationContext(ValidationContextFactory.noValidation());
hapiContext.getPipeParser()
    .getParserConfiguration()
    .setUnexpectedSegmentBehaviour(
        UnexpectedSegmentBehaviourEnum.ADD_INLINE);
hapiContext.setModelClassFactory(cmf);
hapiContext.setLowerLayerProtocol(mllp);

Есть ли способ пропустить эти сообщения?

...