SORMAS-Project
SORMAS-Project copied to clipboard
Sharing a case back to the original sender fails due to failed deletion in surveillance tool
Bug Description
Split from #9836.
A rough summary: A shares a case with B and hands over ownership, and then B shares the received case back with A, again handing over ownership. Then the deletion from SurvNet fails.
Stack trace is the following (trimmed) on instance B:
failed to delete shared entities in external surveillance tool (de.symeda.sormas.backend.sormastosormas.SormasToSormasFacadeEjb.java:246)
de.symeda.sormas.api.externalsurveillancetool.ExternalSurveillanceToolException: Fehler beim Löschen des Eintrags
at de.symeda.sormas.backend.externalsurveillancetool.ExternalSurveillanceToolGatewayFacadeEjb.sendDeleteRequest(ExternalSurveillanceToolGatewayFacadeEjb.java:179)
at de.symeda.sormas.backend.externalsurveillancetool.ExternalSurveillanceToolGatewayFacadeEjb.deleteCases(ExternalSurveillanceToolGatewayFacadeEjb.java:140)
de.symeda.sormas.backend.externalsurveillancetool.__EJB31_Generated__ExternalSurveillanceToolGatewayFacadeEjb$ExternalSurveillanceToolGatewayFacadeEjbLocal__Intf____Bean__.deleteCases(Unknown Source)
at de.symeda.sormas.backend.sormastosormas.share.shareinfo.SormasToSormasShareInfoService.handleOwnershipChangeInExternalSurvTool(SormasToSormasShareInfoService.java:261)
at de.symeda.sormas.backend.sormastosormas.share.shareinfo.SormasToSormasShareInfoService.handleOwnershipChangeInExternalSurvTool(SormasToSormasShareInfoService.java:238) de.symeda.sormas.backend.sormastosormas.share.shareinfo.__EJB31_Generated__SormasToSormasShareInfoService__Intf____Bean__.handleOwnershipChangeInExternalSurvTool(Unknown Source)
at de.symeda.sormas.backend.sormastosormas.SormasToSormasFacadeEjb.requestAccepted(SormasToSormasFacadeEjb.java:244)
at de.symeda.sormas.api.sormastosormas.__SormasToSormasFacade_Remote_DynamicStub.requestAccepted(de/symeda/sormas/api/sormastosormas/__SormasToSormasFacade_Remote_DynamicStub.java)
at de.symeda.sormas.api.sormastosormas._SormasToSormasFacade_Wrapper.requestAccepted(de/symeda/sormas/api/sormastosormas/_SormasToSormasFacade_Wrapper.java)
at de.symeda.sormas.rest.SormasToSormasResource.lambda$acceptedShareRequests$15(SormasToSormasResource.java:149)
at de.symeda.sormas.rest.SormasToSormasResource.handleVoidRequest(SormasToSormasResource.java:186)
at de.symeda.sormas.rest.SormasToSormasResource.acceptedShareRequests(SormasToSormasResource.java:149)
at de.symeda.sormas.rest.SormasToSormasResource$Proxy$_$$_WeldSubclass.acceptedShareRequests$$super(Unknown Source)
Please note that stack trace contains requestAccepted from S2S but I'm quite certain from looking at the code that this can be reproduced with share/accept feature disabled which should make the reproduction shorter.
Please note that the converter errors, not SORMAS directly. Maybe its worth to be a little bit more resilient here in SORMAS.
Steps to Reproduce
- SORMAS A: Create a case on SORMAS A and add an external ID, external token, internal token and general comment + external ID of pathogen result
- SORMAS A: Send the case to SORMAS B with hand over the ownership
- SORMAS B: Change the external token, internal token and general comment on SORMAS B
- SORMAS B: Save the case
- SORMAS B: Open the case on SORMAS B and send the case back to SORMAS A with hand over the ownership
- SORMAS B: Errors with stack trace above
- SORMAS A: case not shared back
Expected Behavior
No error with external surveillance tool and SORMAS A receives the case back in the last step of the reproduction.
Additional Information
IMPORTANT: As a first step, make sure that you can reproduce the issue if not, reach out to @JonasCir and @SahaLinaPrueger .
Properties are:
sormas2sormas.ignoreProperty.additionalDetails=false
sormas2sormas.ignoreProperty.externalId=false
sormas2sormas.ignoreProperty.externalToken=false
sormas2sormas.ignoreProperty.internalToken=false
@markusmann-vg @SahaLinaPrueger @JonasCir
The question is how tight should the SurvNet and SORMAS be coupled. Is it a problem if the case doesn't get deleted in SurvNet after the ownership is lost?
after the ownership is lost = after a case is shared with hand over the ownership ? If a case is shared with hand over the ownership it is mandatory that the case will be deleted in the SurvNet of the sending organisation (source system). Otherwise the case may also be sent to survnet in the target system. This would lead to the case being reported twice, in the source and target system, and this would distort the statistics. So whenever a case is shared with hand over the ownership, the case in the associated survnet of the instance must be deleted.
after the ownership is lost = after a case is shared with hand over the ownership ?
Yes
So whenever a case is shared with hand over the ownership, the case in the associated survnet of the instance must be deleted.
Then in SORMAS we just have adjust the message that it couldn't be sent due to an error when deleting for SurvNet.
And we need another ticket for the SurvNet converter with more details about the issue, maybe a stack trace or a few lines from the log.
If the converter is not running for SORMAS B, then someone responsible for the infrastructure should be notified.
@leventegal-she agreed :) showing an error and aborting the share operation is enough here
I filed another issue w.r.t. better error messages happening on the remote instance: https://github.com/hzi-braunschweig/SORMAS-Project/issues/9956
@SahaLinaPrueger Can you try to get the Converter logs?
So I'm still waiting for the correct converter logs, once I have them, I'm going to close this and open one ticket in the converter repo @AndyBakcsy-she
2022-07-29 10:26:07.333 ERROR 1 --- [nio-8080-exec-1] o.a.c.c.C.[.[.[.[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [/survnet] threw exception [Request processing failed; nested exception is de.symeda.sormas.exception.TransformationException: Ungültige GUID: External ID] with root cause
de.symeda.sormas.exception.TransformationException: Ungültige GUID: External ID
at de.symeda.sormas.transformer.converter.GuidConverter.externalIdToGuid(GuidConverter.java:27) ~[classes!/:13.0.1]
at de.symeda.sormas.transformer.converter.GuidConverter.convert(GuidConverter.java:18) ~[classes!/:13.0.1]
at de.symeda.sormas.service.AdminService.lambda$delete$23(AdminService.java:296) ~[classes!/:13.0.1]
at java.base/java.util.stream.ReferencePipeline$3$1.accept(Unknown Source) ~[na:na]
at java.base/java.util.stream.ReferencePipeline$2$1.accept(Unknown Source) ~[na:na]
at java.base/java.util.stream.ReferencePipeline$3$1.accept(Unknown Source) ~[na:na]
at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(Unknown Source) ~[na:na]
at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source) ~[na:na]
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source) ~[na:na]
at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(Unknown Source) ~[na:na]
at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Unknown Source) ~[na:na]
at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source) ~[na:na]
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source) ~[na:na]
at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(Unknown Source) ~[na:na]
at java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source) ~[na:na]
at java.base/java.util.stream.ReferencePipeline.collect(Unknown Source) ~[na:na]
at de.symeda.sormas.service.AdminService.delete(AdminService.java:297) ~[classes!/:13.0.1]
at de.symeda.sormas.service.AdminService$$FastClassBySpringCGLIB$$7a72fc7e.invoke(<generated>) ~[classes!/:13.0.1]
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) ~[spring-core-5.3.15.jar!/:5.3.15]
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:783) ~[spring-aop-5.3.15.jar!/:5.3.15]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) ~[spring-aop-5.3.15.jar!/:5.3.15]
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:753) ~[spring-aop-5.3.15.jar!/:5.3.15]
at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:123) ~[spring-tx-5.3.15.jar!/:5.3.15]
at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:388) ~[spring-tx-5.3.15.jar!/:5.3.15]
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119) ~[spring-tx-5.3.15.jar!/:5.3.15]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.15.jar!/:5.3.15]
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:753) ~[spring-aop-5.3.15.jar!/:5.3.15]
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:698) ~[spring-aop-5.3.15.jar!/:5.3.15]
at de.symeda.sormas.service.AdminService$$EnhancerBySpringCGLIB$$f66b3ee8.delete(<generated>) ~[classes!/:13.0.1]
at de.symeda.sormas.controller.AdminController.delete(AdminController.java:125) ~[classes!/:13.0.1]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Unknown Source) ~[na:na]
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) ~[spring-web-5.3.15.jar!/:5.3.15]
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) ~[spring-web-5.3.15.jar!/:5.3.15]
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) ~[spring-webmvc-5.3.15.jar!/:5.3.15]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) ~[spring-webmvc-5.3.15.jar!/:5.3.15]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) ~[spring-webmvc-5.3.15.jar!/:5.3.15]
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.3.15.jar!/:5.3.15]
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1067) ~[spring-webmvc-5.3.15.jar!/:5.3.15]
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963) ~[spring-webmvc-5.3.15.jar!/:5.3.15]
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.3.15.jar!/:5.3.15]
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909) ~[spring-webmvc-5.3.15.jar!/:5.3.15]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:681) ~[tomcat-embed-core-9.0.56.jar!/:na]
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.3.15.jar!/:5.3.15]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:764) ~[tomcat-embed-core-9.0.56.jar!/:na]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227) ~[tomcat-embed-core-9.0.56.jar!/:na]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.56.jar!/:na]
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) ~[tomcat-embed-websocket-9.0.56.jar!/:na]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.56.jar!/:na]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.56.jar!/:na]
at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.3.15.jar!/:5.3.15]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.15.jar!/:5.3.15]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.56.jar!/:na]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.56.jar!/:na]
at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.3.15.jar!/:5.3.15]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.15.jar!/:5.3.15]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.56.jar!/:na]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.56.jar!/:na]
at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96) ~[spring-boot-actuator-2.6.3.jar!/:2.6.3]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.15.jar!/:5.3.15]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.56.jar!/:na]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.56.jar!/:na]
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.3.15.jar!/:5.3.15]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.15.jar!/:5.3.15]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.56.jar!/:na]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.56.jar!/:na]
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197) ~[tomcat-embed-core-9.0.56.jar!/:na]
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) ~[tomcat-embed-core-9.0.56.jar!/:na]
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:540) ~[tomcat-embed-core-9.0.56.jar!/:na]
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135) ~[tomcat-embed-core-9.0.56.jar!/:na]
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) ~[tomcat-embed-core-9.0.56.jar!/:na]
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) ~[tomcat-embed-core-9.0.56.jar!/:na]
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357) ~[tomcat-embed-core-9.0.56.jar!/:na]
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:382) ~[tomcat-embed-core-9.0.56.jar!/:na]
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) ~[tomcat-embed-core-9.0.56.jar!/:na]
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:895) ~[tomcat-embed-core-9.0.56.jar!/:na]
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1732) ~[tomcat-embed-core-9.0.56.jar!/:na]
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) ~[tomcat-embed-core-9.0.56.jar!/:na]
at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) ~[tomcat-embed-core-9.0.56.jar!/:na]
at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) ~[tomcat-embed-core-9.0.56.jar!/:na]
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-9.0.56.jar!/:na]
at java.base/java.lang.Thread.run(Unknown Source) ~[na:na]
2022-07-29 10:26:47.853 ERROR 1 --- [nio-8080-exec-2] o.a.c.c.C.[.[.[.[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [/survnet] threw exception [Request processing failed; nested exception is de.symeda.sormas.exception.TransformationException: Ungültige GUID: External ID] with root cause
de.symeda.sormas.exception.TransformationException: Ungültige GUID: External ID
at de.symeda.sormas.transformer.converter.GuidConverter.externalIdToGuid(GuidConverter.java:27) ~[classes!/:13.0.1]
at de.symeda.sormas.transformer.converter.GuidConverter.convert(GuidConverter.java:18) ~[classes!/:13.0.1]
at de.symeda.sormas.service.AdminService.lambda$delete$23(AdminService.java:296) ~[classes!/:13.0.1]
at java.base/java.util.stream.ReferencePipeline$3$1.accept(Unknown Source) ~[na:na]
at java.base/java.util.stream.ReferencePipeline$2$1.accept(Unknown Source) ~[na:na]
at java.base/java.util.stream.ReferencePipeline$3$1.accept(Unknown Source) ~[na:na]
at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(Unknown Source) ~[na:na]
at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source) ~[na:na]
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source) ~[na:na]
at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(Unknown Source) ~[na:na]
at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Unknown Source) ~[na:na]
at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source) ~[na:na]
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source) ~[na:na]
at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(Unknown Source) ~[na:na]
at java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source) ~[na:na]
at java.base/java.util.stream.ReferencePipeline.collect(Unknown Source) ~[na:na]
at de.symeda.sormas.service.AdminService.delete(AdminService.java:297) ~[classes!/:13.0.1]
at de.symeda.sormas.service.AdminService$$FastClassBySpringCGLIB$$7a72fc7e.invoke(<generated>) ~[classes!/:13.0.1]
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) ~[spring-core-5.3.15.jar!/:5.3.15]
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:783) ~[spring-aop-5.3.15.jar!/:5.3.15]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) ~[spring-aop-5.3.15.jar!/:5.3.15]
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:753) ~[spring-aop-5.3.15.jar!/:5.3.15]
at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:123) ~[spring-tx-5.3.15.jar!/:5.3.15]
at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:388) ~[spring-tx-5.3.15.jar!/:5.3.15]
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119) ~[spring-tx-5.3.15.jar!/:5.3.15]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.15.jar!/:5.3.15]
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:753) ~[spring-aop-5.3.15.jar!/:5.3.15]
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:698) ~[spring-aop-5.3.15.jar!/:5.3.15]
at de.symeda.sormas.service.AdminService$$EnhancerBySpringCGLIB$$f66b3ee8.delete(<generated>) ~[classes!/:13.0.1]
at de.symeda.sormas.controller.AdminController.delete(AdminController.java:125) ~[classes!/:13.0.1]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Unknown Source) ~[na:na]
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) ~[spring-web-5.3.15.jar!/:5.3.15]
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) ~[spring-web-5.3.15.jar!/:5.3.15]
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) ~[spring-webmvc-5.3.15.jar!/:5.3.15]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) ~[spring-webmvc-5.3.15.jar!/:5.3.15]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) ~[spring-webmvc-5.3.15.jar!/:5.3.15]
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.3.15.jar!/:5.3.15]
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1067) ~[spring-webmvc-5.3.15.jar!/:5.3.15]
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963) ~[spring-webmvc-5.3.15.jar!/:5.3.15]
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.3.15.jar!/:5.3.15]
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909) ~[spring-webmvc-5.3.15.jar!/:5.3.15]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:681) ~[tomcat-embed-core-9.0.56.jar!/:na]
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.3.15.jar!/:5.3.15]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:764) ~[tomcat-embed-core-9.0.56.jar!/:na]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227) ~[tomcat-embed-core-9.0.56.jar!/:na]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.56.jar!/:na]
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) ~[tomcat-embed-websocket-9.0.56.jar!/:na]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.56.jar!/:na]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.56.jar!/:na]
at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.3.15.jar!/:5.3.15]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.15.jar!/:5.3.15]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.56.jar!/:na]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.56.jar!/:na]
at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.3.15.jar!/:5.3.15]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.15.jar!/:5.3.15]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.56.jar!/:na]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.56.jar!/:na]
at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96) ~[spring-boot-actuator-2.6.3.jar!/:2.6.3]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.15.jar!/:5.3.15]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.56.jar!/:na]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.56.jar!/:na]
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.3.15.jar!/:5.3.15]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.15.jar!/:5.3.15]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.56.jar!/:na]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.56.jar!/:na]
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197) ~[tomcat-embed-core-9.0.56.jar!/:na]
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) ~[tomcat-embed-core-9.0.56.jar!/:na]
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:540) ~[tomcat-embed-core-9.0.56.jar!/:na]
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135) ~[tomcat-embed-core-9.0.56.jar!/:na]
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) ~[tomcat-embed-core-9.0.56.jar!/:na]
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) ~[tomcat-embed-core-9.0.56.jar!/:na]
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357) ~[tomcat-embed-core-9.0.56.jar!/:na]
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:382) ~[tomcat-embed-core-9.0.56.jar!/:na]
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) ~[tomcat-embed-core-9.0.56.jar!/:na]
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:895) ~[tomcat-embed-core-9.0.56.jar!/:na]
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1732) ~[tomcat-embed-core-9.0.56.jar!/:na]
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) ~[tomcat-embed-core-9.0.56.jar!/:na]
at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) ~[tomcat-embed-core-9.0.56.jar!/:na]
at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) ~[tomcat-embed-core-9.0.56.jar!/:na]
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-9.0.56.jar!/:na]
at java.base/java.lang.Thread.run(Unknown Source) ~[na:na]
@SahaLinaPrueger When sharing a case from A -> B and then back from B -> A, do you still encounter an error in the SurvNet converter?
@leventegal-she @HolgerReiseVSys
The following scenario was reproduced on the following environments: test1402 & release-x
-
Health Department B sends back a case that was sent from Health Department A with ownership as they do not consider to be responsible. Sending a case back should delete the case in the System of B and trigger automatically the survnet Converter, so that SurvNet of Health Department B is informed that this case is deleted. This seems not to work. Sending a case with ownership to another health department, which is not A, triggers the deletion update information for SurvNet.
-
When Health Department A gets the formerly sent case back, they should be able to send that case again, but not as a new case but as an updated case. This means with sending to survnet, the case should be updated in SurvNet (no longer deleted).
Case 1 looks to me like a SORMAS Issue, Case 2 might be checked in the SurvNet Converter (and mabye SORMAS)
Please comment as this has to be solved within 1.76 and converter 15.
The stack trace of SurvNet converter indicates that the value of the external id of the case does not satisfy the following regexp:
\{[a-z0-9]{8}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{12}\}
So went through the reproduction and it seems to work as intended:

So this is from A. I reported it, handed over ownership, changed the ID on the other side, shared back with ownership and above picture is the result.
Also I was not able to change the external ID to something not matching the regex at any point in time b/c it is always grayed out.
So I argue that everything works fine with deletion and sharing. The question is more how @SahaLinaPrueger was able to set the external ID to something invalid :smile:
@markusmann-vg Is it ok to reassign this ticket to 1.77? This doesn't seem like a blocker issue and should not block 1.76. As per Jonas's last comment this isn't reproducible.
This Issue can be closed if:
The following properties are set on both test-systems: #sormas2sormas.ignoreProperty.additionalDetails=false #sormas2sormas.ignoreProperty.externalId=false #sormas2sormas.ignoreProperty.externalToken=false #sormas2sormas.ignoreProperty.internalToken=false
And the following is working:
- Health Department B sends back a case that was sent from Health Department A with ownership as they do not consider to be responsible. Sending a case back should delete the case in the System of B and trigger automatically the survnet Converter, so that SurvNet of Health Department B is informed that this case is deleted.
- When Health Department A gets the formerly sent case back, they should be able to send that case again, but not as a new case but as an updated case. This means with sending to survnet, the case should be updated in SurvNet (no longer deleted).
Of course this should also work if the properties are set on = true. I wanted to test this, but on 1402 SurvNet is currently broken. So i have no option to verify this right now.
If this works with the properties set on = true the issue can be moved to 1.77. If this works with the properties set on = true AND on = false the issue can be closed.
We close this ticket as it's partially not reproducable. Point 2 of the last comment will result in a new ticket, that needs to be specified => https://github.com/hzi-braunschweig/SORMAS-Project/issues/10619