Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

BUG - Submit payload deserialization issue #551

Closed
rosibaj opened this issue Dec 4, 2019 · 0 comments
Closed

BUG - Submit payload deserialization issue #551

rosibaj opened this issue Dec 4, 2019 · 0 comments
Assignees
Labels
bug Something isn't working Scope Change Scope change from the initial sprint commitment SP:1

Comments

@rosibaj
Copy link
Contributor

rosibaj commented Dec 4, 2019

Description

When i don't label arrays correctly in a payload, i get a 500 INTERNAL_SERVER_ERROR instead of a schema violation.

This is the error:

{
  "errorId" : "unknown.error",
  "httpStatusCode" : 500,
  "httpStatusName" : "INTERNAL_SERVER_ERROR",
  "requestUrl" : "http://song.qa.argo.cancercollaboratory.org/upload/PACA-CA",
  "datetime" : "2019-12-04T19:40:05.848Z[Etc/UTC]",
  "timestamp" : 1575488405848,
  "message" : "Request processing failed; nested exception is java.lang.IllegalArgumentException: Cannot deserialize instance of `java.util.ArrayList` out of START_OBJECT token\n at [Source: UNKNOWN; line: -1, column: -1] (through reference chain: bio.overture.song.server.model.dto.Payload[\"sample\"])",
  "debugMessage" : "[ROOT_CAUSE] -> com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of `java.util.ArrayList` out of START_OBJECT token\n at [Source: UNKNOWN; line: -1, column: -1] (through reference chain: bio.overture.song.server.model.dto.Payload[\"sample\"])",
  "stackTrace" : [
        "org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.IllegalArgumentException: Cannot deserialize instance of `java.util.ArrayList` out of START_OBJECT token",
        "at [Source: UNKNOWN; line: -1, column: -1] (through reference chain: bio.overture.song.server.model.dto.Payload[\"sample\"])",
        "at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1013)",
        "at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:908)",
        "at javax.servlet.http.HttpServlet.service(HttpServlet.java:660)",
        "at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:882)",
        "at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)",
        "at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)",
        "at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)",
        "at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)",
        "at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)",
        "at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)",
        "at org.springframework.boot.actuate.web.trace.servlet.HttpTraceFilter.doFilterInternal(HttpTraceFilter.java:88)",
        "at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:118)",
        "at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)",
        "at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)",
        "at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:320)",
        "at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:127)",
        "at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:91)",
        "at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)",
        "at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:119)",
        "at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)",
        "at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:137)",
        "at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)",
        "at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:111)",
        "at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)",
        "at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:170)",
        "at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)",
        "at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63)",
        "at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)",
        "at org.springframework.security.oauth2.provider.authentication.OAuth2AuthenticationProcessingFilter.doFilter(OAuth2AuthenticationProcessingFilter.java:176)",
        "at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)",
        "at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:116)",
        "at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)",
        "at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:74)",
        "at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:118)",
        "at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)",
        "at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:105)",
        "at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)",
        "at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:56)",
        "at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:118)",
        "at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)",
        "at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:215)",
        "at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:178)",
        "at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:357)",
        "at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:270)",
        "at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)",
        "at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)",
        "at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99)",
        "at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:118)",
        "at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)",
        "at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)",
        "at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:92)",
        "at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:118)",
        "at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)",
        "at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)",
        "at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:93)",
        "at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:118)",
        "at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)",
        "at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)",
        "at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.filterAndRecordMetrics(WebMvcMetricsFilter.java:114)",
        "at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:104)",
        "at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:118)",
        "at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)",
        "at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)",
        "at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:200)",
        "at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:118)",
        "at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)",
        "at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)",
        "at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)",
        "at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)",
        "at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:490)",
        "at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)",
        "at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)",
        "at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)",
        "at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)",
        "at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)",
        "at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408)",
        "at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)",
        "at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:853)",
        "at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1587)",
        "at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)",
        "at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)",
        "at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)",
        "at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)",
        "at java.base/java.lang.Thread.run(Unknown Source)",
        "Caused by: java.lang.IllegalArgumentException: Cannot deserialize instance of `java.util.ArrayList` out of START_OBJECT token",
        "at [Source: UNKNOWN; line: -1, column: -1] (through reference chain: bio.overture.song.server.model.dto.Payload[\"sample\"])",
        "at com.fasterxml.jackson.databind.ObjectMapper._convert(ObjectMapper.java:3738)",
        "at com.fasterxml.jackson.databind.ObjectMapper.convertValue(ObjectMapper.java:3656)",
        "at bio.overture.song.core.utils.JsonUtils.fromJson(JsonUtils.java:128)",
        "at bio.overture.song.server.service.UploadService.parsePayload(UploadService.java:99)",
        "at bio.overture.song.server.service.UploadService.submit(UploadService.java:69)",
        "at bio.overture.song.server.service.UploadService$$FastClassBySpringCGLIB$$61dfa329.invoke(<generated>)",
        "at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)",
        "at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:749)",
        "at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)",
        "at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:295)",
        "at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:98)",
        "at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)",
        "at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:688)",
        "at bio.overture.song.server.service.UploadService$$EnhancerBySpringCGLIB$$927276b0.submit(<generated>)",
        "at bio.overture.song.server.controller.UploadController.submit(UploadController.java:59)",
        "at bio.overture.song.server.controller.UploadController$$FastClassBySpringCGLIB$$5eead37d.invoke(<generated>)",
        "at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)",
        "at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:749)",
        "at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)",
        "at org.springframework.security.access.intercept.aopalliance.MethodSecurityInterceptor.invoke(MethodSecurityInterceptor.java:69)",
        "at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)",
        "at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:688)",
        "at bio.overture.song.server.controller.UploadController$$EnhancerBySpringCGLIB$$f1bb36ee.submit(<generated>)",
        "at jdk.internal.reflect.GeneratedMethodAccessor384.invoke(Unknown Source)",
        "at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)",
        "at java.base/java.lang.reflect.Method.invoke(Unknown Source)",
        "at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:190)",
        "at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138)",
        "at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104)",
        "at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:892)",
        "at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:797)",
        "at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)",
        "at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1039)",
        "at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:942)",
        "at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1005)",
        "... 83 more",
        "Caused by: com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of `java.util.ArrayList` out of START_OBJECT token",
        "at [Source: UNKNOWN; line: -1, column: -1] (through reference chain: bio.overture.song.server.model.dto.Payload[\"sample\"])",
        "at com.fasterxml.jackson.databind.exc.MismatchedInputException.from(MismatchedInputException.java:63)",
        "at com.fasterxml.jackson.databind.DeserializationContext.reportInputMismatch(DeserializationContext.java:1342)",
        "at com.fasterxml.jackson.databind.DeserializationContext.handleUnexpectedToken(DeserializationContext.java:1138)",
        "at com.fasterxml.jackson.databind.DeserializationContext.handleUnexpectedToken(DeserializationContext.java:1092)",
        "at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.handleNonArray(CollectionDeserializer.java:332)",
        "at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:265)",
        "at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:245)",
        "at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:27)",
        "at com.fasterxml.jackson.databind.deser.impl.MethodProperty.deserializeAndSet(MethodProperty.java:127)",
        "at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:288)",
        "at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:151)",
        "at com.fasterxml.jackson.databind.ObjectMapper._convert(ObjectMapper.java:3733)",
        "... 117 more",
        ""
    ]
}

Expected Behaviour

It should tell me there is a schema violation and that i need to make samples an array, intead of failing before making it to schema validation.

Steps to Reproduce

  1. Go to ARGO qa song.
  2. Submit this payload to the upload endpoint:
curl -X POST \
  https://song.qa.argo.cancercollaboratory.org/upload/PACA-CA \
  -H 'Accept: */*' \
  -H 'Accept-Encoding: gzip, deflate' \
  -H 'Authorization: Bearer 92066829-998c-4aa2-9fc2-b6b241f63ff0' \
  -H 'Cache-Control: no-cache' \
  -H 'Connection: keep-alive' \
  -H 'Content-Length: 1835' \
  -H 'Content-Type: application/json' \
  -H 'Host: song.qa.argo.cancercollaboratory.org' \
  -H 'Postman-Token: 14c3c6ac-3c19-4bb7-963f-9c57b0efa427,258da421-2e2c-4b5a-8c35-4d64af8f0075' \
  -H 'User-Agent: PostmanRuntime/7.20.1' \
  -H 'cache-control: no-cache' \
  -d '{
  "study": "PACA-CA",
  "program_id": "PACA-CA",
  "analysisType": {
    "name": "sequencing_experiment",
    "version": 3
  },
  "submitter_sequencing_experiment_id": "rosi-se-1",
  "sample": 
    {
      "sampleSubmitterId": "sample-rosi-1",
      "sampleType": "DNA",
      "specimen": {
        "specimenSubmitterId": "specimen-rosi-1",
        "specimenClass": "Tumour",
        "specimenType": "Primary tumour - solid tissue"
      },
      "donor": {
        "donorSubmitterId": "donor-rosi-1",
        "donorGender": "female"
      }
    }
  ,
  "file": [
    {
      "fileName": "C0HVY.2_r1.fq",
      "fileSize": 133684363564,
      "fileType": "FASTQ",
      "fileMd5sum": "e4fe8353ae62045642a2124909c5cfa5",
      "fileAccess": "controlled"
    },
    {
      "fileName": "C0HVY.2_r2.fq",
      "fileSize": 133684363564,
      "fileType": "FASTQ",
      "fileMd5sum": "e4fe8353ae62045642a2124909c5cfa5",
      "fileAccess": "controlled"
    }
  ],
  "sequencing_center": "EXT",
  "library_strategy": "WGS",
  "platform": "Illumina",
  "platform_model": "HiSeq 2000",
  "read_group_count": 2,
  "read_group": [
    {
      "insert_size": 298,
      "is_paired_end": true,
      "library_name": "Pond-147580",
      "platform_unit": "74_8",
      "read_length_r1": 150,
      "read_length_r2": 150,
      "sample_barcode": null,
      "submitter_read_group_id": "C0HVY.2"
    },
    {
      "insert_size": 298,
      "is_paired_end": true,
      "library_name": "Pond-147580",
      "platform_unit": "74_8",
      "read_length_r1": 150,
      "read_length_r2": 150,
      "sample_barcode": null,
      "submitter_read_group_id": "D0RE2.1"
    }
  ],
  "sequencing_date":"2014-12-12",
  "experiment": {},
  "workflow": {
    "name": "dna-seq-alignment",
    "short_name": "dna-seq-alignment",
    "version": "0.2.3.0"
  }
}
'
@rosibaj rosibaj added the bug Something isn't working label Dec 4, 2019
@rtisma rtisma self-assigned this Dec 5, 2019
@rtisma rtisma added this to the Code Monkeys - Sprint 19 milestone Dec 5, 2019
@rtisma rtisma added the SP:1 label Dec 5, 2019
@rtisma rtisma changed the title BUG - BUG - Submit payload deserialization issue Dec 6, 2019
@rtisma rtisma closed this as completed Dec 9, 2019
@rtisma rtisma added the Scope Change Scope change from the initial sprint commitment label Dec 10, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working Scope Change Scope change from the initial sprint commitment SP:1
Projects
None yet
Development

No branches or pull requests

2 participants