Open
Description
Describe the bug
ClassCastException throws when searching resource if the resource has "contained" resources. This issue only happens when partitioning is enabled and it's a SEARCH action. Service handle request successfully if using READ action like "fhir/DEFAULT/ServiceRequest/2"
error stack:
java.lang.ClassCastException: class org.hl7.fhir.r5.model.Specimen cannot be cast to class org.hl7.fhir.r4b.model.Resource (org.hl7.fhir.r5.model.Specimen and org.hl7.fhir.r4b.model.Resource are in unnamed module of loader org.springframework.boot.loader.LaunchedURLClassLoader @5e9f23b4)
at org.hl7.fhir.r4b.hapi.rest.server.R4BBundleFactory.addResourcesToBundle(R4BBundleFactory.java:83)
at ca.uhn.fhir.rest.server.method.BaseResourceReturningMethodBinding.createBundleFromBundleProvider(BaseResourceReturningMethodBinding.java:306)
at ca.uhn.fhir.rest.server.method.BaseResourceReturningMethodBinding.doInvokeServer(BaseResourceReturningMethodBinding.java:386)
at ca.uhn.fhir.rest.server.method.BaseResourceReturningMethodBinding.invokeServer(BaseResourceReturningMethodBinding.java:430)
at ca.uhn.fhir.rest.server.RestfulServer.handleRequest(RestfulServer.java:1167)
at ca.uhn.fhir.rest.server.RestfulServer.doGet(RestfulServer.java:416)
at ca.uhn.fhir.rest.server.RestfulServer.service(RestfulServer.java:1870)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:750)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.springframework.web.servlet.resource.ResourceUrlEncodingFilter.doFilter(ResourceUrlEncodingFilter.java:67)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:360)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:890)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1789)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.base/java.lang.Thread.run(Thread.java:833)
2023-02-14 11:51:20.019 [http-nio-8080-exec-4] INFO fhirtest.access [LoggingInterceptor.java:160] ERROR - GET http://192.168.209.130:19999/fhir/DEFAULT/ServiceRequest
To Reproduce
Steps to reproduce the behavior:
- enable partitioning
partitioning:
enabled: true
allow_references_across_partitions: true
partitioning_include_in_search_hashes: false
- create a resource with contained resources on DEFAULT partition
POST localhost:8080/fhir/DEFAULT
{
"resourceType": "Bundle",
"id": "100",
"type": "transaction",
"entry": [
{
"resource": {
"resourceType": "Patient",
"id": "101",
"active": true,
"name": [
{
"use": "official",
"text": "Li Si",
"family": "Li",
"given": [
"Si"
]
}
],
"gender": "male",
"birthDate": "1999-01-01"
},
"request": {
"method": "POST",
"url": "Patient"
}
},
{
"resource": {
"resourceType": "ServiceRequest",
"status": "active",
"intent": "order",
"contained": [
{
"resourceType": "Specimen",
"id": "1",
"identifier": [
{
"system": "http://example.org/specimen/org1",
"value": "BarNo-123"
}
],
"type": {
"coding": [
{
"system": "http://example.org/specimen-type/org1",
"code": "01",
"display": "Serum"
}
]
},
"collection": {
"collectedDateTime": "2015-08-16T06:40:17Z"
}
},
{
"resourceType": "Organization",
"id": "2",
"identifier": [
{
"system": "http://example.org/orgs",
"value": "org2"
}
],
"name": "agency-org2"
}
],
"identifier": [
{
"system": "http://example.org/order/org1",
"value": "order-123"
}
],
"code": {
"coding": [
{
"system": "http://example.org/panels/org1",
"code": "LYYP-0094"
}
],
"text": "CBC auto"
},
"subject": {
"reference": "Patient/101"
},
"specimen": [
{
"reference": "#1"
}
],
"performer": [
{
"reference": "#2"
}
]
},
"request": {
"method": "POST",
"url": "ServiceRequest"
}
}
]
}
- search resource that created before
GET localhost:8080/fhir/DEFAULT/ServiceRequest - See error
Expected behavior
return resource like "partitioning-disable" does
Screenshots
Environment (please complete the following information):
- HAPI FHIR Version: v6.2.5
- OS: Docker Image
- Postman
Additional context
Metadata
Metadata
Assignees
Labels
No labels