使用HAPI库针对https://www.hl7.org/fhir/validation.html上列出的不同方面对FHIR资源进行验证

时间:2019-12-06 11:08:56

标签: hl7-fhir hapi-fhir

在运行代码时获得以下异常:

     FhirContext ctx = FhirContext.forR4();

    // Create a FhirInstanceValidator and register it to a validator
    FhirValidator validator = ctx.newValidator();
    FhirInstanceValidator instanceValidator = new FhirInstanceValidator();
    validator.registerValidatorModule(instanceValidator);

    /*
     * If you want, you can configure settings on the validator to adjust
     * its behaviour during validation
     */
    instanceValidator.setAnyExtensionsAllowed(true);
    // input is Patient resource in String https://www.hl7.org/fhir/patient-example.json.html 
    ValidationResult result = validator.validateWithResult(input); 

我正在使用Hapi库来验证资源(如果我没有记错的话,这是患者资源https://www.hl7.org/fhir/patient-example.json.html)。我已经将此患者Json存储在字符串中 并尝试验证其:

1:结构->我认为使用Parse Validation可以实现,而且我做到了。 2:基数->我创建了两个“ active:true” Json键值对,认为它将引发基数错误,但SchemxxxValidator / ParseValidator / InstanceValidator都不起作用。 ...

如何根据此处https://www.hl7.org/fhir/validation.html(结构,基数,ValueDomains ...)列出的属性来验证资源,我是否必须使用所有三种方法 那就是解析器,FhirInstanceValidator和SchemaBaseValidator / SchematronBaseValidator。

由于我是FHIR的新手,请为我的la脚问题提供帮助。

15:58| INFO | VersionUtil.java 72 | HAPI FHIR version 4.1.0 - Rev 03163c2cf5
15:58| INFO | FhirContext.java 174 | Creating new FHIR context for FHIR version [R4]
15:58| INFO | DefaultProfileValidationSupport.java 227 | Loading structure definitions from classpath: /org/hl7/fhir/r4/model/profile/profiles-resources.xml
15:58| INFO | DependencyLogImpl.java 75 | FHIR XML procesing will use StAX implementation 'Woodstox' version '5.1.0'
15:58| INFO | DefaultProfileValidationSupport.java 227 | Loading structure definitions from classpath: /org/hl7/fhir/r4/model/profile/profiles-types.xml
15:58| INFO | DefaultProfileValidationSupport.java 227 | Loading structure definitions from classpath: /org/hl7/fhir/r4/model/profile/profiles-others.xml
15:58| INFO | DefaultProfileValidationSupport.java 227 | Loading structure definitions from classpath: /org/hl7/fhir/r4/model/extension/extension-definitions.xml
15:58| ERROR | FhirInstanceValidator.java 222 | Failure during validation
java.lang.UnsupportedOperationException
    at org.hl7.fhir.r4.hapi.ctx.HapiWorkerContext.generateSnapshot(HapiWorkerContext.java:242)
    at org.hl7.fhir.r4.elementmodel.ParserBase.getDefinition(ParserBase.java:122)
    at org.hl7.fhir.r4.elementmodel.JsonParser.parse(JsonParser.java:123)
    at org.hl7.fhir.r4.validation.InstanceValidator.validate(InstanceValidator.java:539)
    at org.hl7.fhir.r4.validation.InstanceValidator.validate(InstanceValidator.java:531)
    at org.hl7.fhir.r4.hapi.validation.FhirInstanceValidator.validate(FhirInstanceValidator.java:220)
    at org.hl7.fhir.r4.hapi.validation.FhirInstanceValidator.validate(FhirInstanceValidator.java:242)
    at org.hl7.fhir.r4.hapi.validation.BaseValidatorBridge.doValidate(BaseValidatorBridge.java:20)
    at org.hl7.fhir.r4.hapi.validation.BaseValidatorBridge.validateResource(BaseValidatorBridge.java:43)
    at org.hl7.fhir.r4.hapi.validation.FhirInstanceValidator.validateResource(FhirInstanceValidator.java:33)
    at ca.uhn.fhir.validation.FhirValidator.validateWithResult(FhirValidator.java:243)
    at ca.uhn.fhir.validation.FhirValidator.validateWithResult(FhirValidator.java:198)
    at com.json.schema.validator.InstanceValidatorEx.instanceValidator(InstanceValidatorEx.java:223)
    at com.json.schema.validator.InstanceValidatorEx.main(InstanceValidatorEx.java:191)
Exception in thread "main" ca.uhn.fhir.rest.server.exceptions.InternalErrorException: Unexpected failure while validating resource
    at org.hl7.fhir.r4.hapi.validation.FhirInstanceValidator.validate(FhirInstanceValidator.java:223)
    at org.hl7.fhir.r4.hapi.validation.FhirInstanceValidator.validate(FhirInstanceValidator.java:242)
    at org.hl7.fhir.r4.hapi.validation.BaseValidatorBridge.doValidate(BaseValidatorBridge.java:20)
    at org.hl7.fhir.r4.hapi.validation.BaseValidatorBridge.validateResource(BaseValidatorBridge.java:43)
    at org.hl7.fhir.r4.hapi.validation.FhirInstanceValidator.validateResource(FhirInstanceValidator.java:33)
    at ca.uhn.fhir.validation.FhirValidator.validateWithResult(FhirValidator.java:243)
    at ca.uhn.fhir.validation.FhirValidator.validateWithResult(FhirValidator.java:198)
    at com.json.schema.validator.InstanceValidatorEx.instanceValidator(InstanceValidatorEx.java:223)
    at com.json.schema.validator.InstanceValidatorEx.main(InstanceValidatorEx.java:191)
Caused by: java.lang.UnsupportedOperationException
    at org.hl7.fhir.r4.hapi.ctx.HapiWorkerContext.generateSnapshot(HapiWorkerContext.java:242)
    at org.hl7.fhir.r4.elementmodel.ParserBase.getDefinition(ParserBase.java:122)
    at org.hl7.fhir.r4.elementmodel.JsonParser.parse(JsonParser.java:123)
    at org.hl7.fhir.r4.validation.InstanceValidator.validate(InstanceValidator.java:539)
    at org.hl7.fhir.r4.validation.InstanceValidator.validate(InstanceValidator.java:531)
    at org.hl7.fhir.r4.hapi.validation.FhirInstanceValidator.validate(FhirInstanceValidator.java:220)

1 个答案:

答案 0 :(得分:1)

  

基数->我创建了两个“ active:true” Json键值对,以为它将引发基数错误,但SchemxxxValidator / ParseValidator / InstanceValidator都不起作用。 ...

这是HAPI中的问题-它会验证从JSON加载的对象,并且JSON解析器会静默删除重复的属性键。如果直接使用验证器,则不会发生。我相信这将在某个阶段得到解决

  

generateSnapshot失败

这是一个真实的问题-我不确定为什么未设置它,但是如果未生成快照,验证器将无法工作