Валидация HAPI HL7 создает исключения - PullRequest
0 голосов
/ 04 июня 2018

Я работаю на конечной точке Java, которую намереваюсь использовать для проверки сообщений HL7.У меня запущено базовое приложение, которое использует вариант стандартного примера проверки HAPI HL7.Если я передаю правильное сообщение, я получаю ответ «Успех».Если я передаю недопустимое сообщение, я все равно получаю ответ «Успешно».

Единственный способ получить ответ об ошибке - это если HL7 плохо отформатирован и PipeParser выдает исключение.В этом случае он попадает в блок catch.

Что я хочу увидеть, так это если я передам недопустимое сообщение о том, что оно действительно проверяется и возвращает все ошибки проверки.Но я никогда не вижу подтверждения.Он либо разбирает, либо вылетает при попытке разбора.

Что мне здесь не хватает?

    HapiContext context = new DefaultHapiContext();

    ValidationContext validationContext =  ValidationContextFactory.defaultValidation();
    context.setValidationContext(validationContext);


    try
    {
        context.getParserConfiguration().setUnexpectedSegmentBehaviour(UnexpectedSegmentBehaviourEnum.THROW_HL7_EXCEPTION);

        Message messageValidationResults = context.getPipeParser().parse(hl7Message);

        SimpleValidationExceptionHandler handler = new SimpleValidationExceptionHandler(context);
        handler.setMinimumSeverityToCollect(Severity.INFO);

        Validator<Boolean> validator = context.getMessageValidator();

        if (!validator.validate(messageValidationResults, handler))
        {
            if (handler.getExceptions().size() == 0)
            {
                hl7ValidationResult = "SUCCESS - Message Validated Successfully";
            }
            else
            {
                hl7ValidationResult = "ERROR - Found " + handler.getExceptions().size() + " problems\n\n";
                for (Exception e : handler.getExceptions())
                {
                    hl7ValidationResult += (e.getClass().getSimpleName() + " - " + e.getMessage()) + "\n";
                }
            }

        }
    }
    catch (Exception e)
    {
        hl7ValidationResult = "ERROR - " + e.getMessage();

        StringWriter sw = new StringWriter();
        PrintWriter pw = new PrintWriter(sw);
        e.printStackTrace(pw);
        String sStackTrace = sw.toString();

        hl7ValidationResult += "\n\n" + sStackTrace;
    }

1 Ответ

0 голосов
/ 05 июня 2018

Пожалуйста, проигнорируйте ответ, если, по вашему мнению, это не правильно, я перестал работать с HL7, но, глядя на свой старый проект, я нашел это и, возможно, он может помочь вам найти решение вашей проблемы:

{

    DefaultValidationBuilder builder = new DefaultValidationBuilder() {

        private static final long serialVersionUID = 1L;

        @Override
        protected void configure() {
            super.configure();
            forVersion(Version.V26);
        }

    };

    HapiContext context = new DefaultHapiContext();
    context.setValidationRuleBuilder(builder);
    PipeParser hapiParser = context.getPipeParser();

    try {

        hapiParser.parse(hl7Message);

    } catch (ca.uhn.hl7v2.HL7Exception e) {

        // String error, String language, String requisitionNumber, String controlId, String processinId, String senderApplication, String senderFacility
        errors.add(new HL7ValidationError(
            "HAPI Validator error found: " + e.getMessage(), 
            extractor.accessPatientDirectly().getLanguage(), 
            extractor.accessPatientDirectly().getRequisitionNumber(), 
            extractor.accessPatientDirectly().getControlID(), 
            "", 
            extractor.accessPatientDirectly().getSenderApplication(), 
            extractor.accessPatientDirectly().getSenderFacility())
        );  
        log.debug("HAPI Validator error found: " + e.getMessage()); 
    }

    try {
        context.close();
    }
    catch (Exception ex) {
        log.debug("Unable to close HapiContext(): " + ex.getMessage());
    }

}

В основном я использовал hapiParser.parse (hl7Message); и ловил HL7Exception

...