apollographql / apollo-kotlin

:rocket:  A strongly-typed, caching GraphQL client for the JVM, Android, and Kotlin multiplatform.
https://www.apollographql.com/docs/kotlin
MIT License
3.75k stars 651 forks source link

ApolloException Failed to parse http response - Please Help #1101

Closed GowsikChandran closed 5 years ago

GowsikChandran commented 5 years ago

Hi I am using apollo android 0.4.4

I am trying to search repositories by name using the GitHub graph QL

This is my Query

query SearchRepoQuery($query: String!,$limit: Int!,$afterCursor: String){
  search(query:$query, type: REPOSITORY, first: $limit, after:$afterCursor) {
    repositoryCount
    edges {
      node {
        ...RepositoryFragment
      }
      cursor
    }
    pageInfo {
        endCursor
        hasNextPage
      }
  }
}
fragment RepositoryFragment on Repository {
  id
  name
  description
  forkCount
  owner {
    avatarUrl
  }
}

LogCat

The HttpLogging interceptor shows 200 but getting error while parsing

11-05 04:55:32.345 6675-6942/com.asana.github.graphqlkotlin D/OkHttp: --> POST https://api.github.com/graphql
11-05 04:55:32.345 6675-6942/com.asana.github.graphqlkotlin D/OkHttp: Content-Type: application/json; charset=utf-8
    Content-Length: 570
    Accept: application/json
11-05 04:55:32.346 6675-6942/com.asana.github.graphqlkotlin D/OkHttp: CONTENT_TYPE: application/json
    X-APOLLO-OPERATION-ID: 075f889ff5c406d4d11d0478fc8e448ace5d5ad77447cf6db33ccca1514b3c4d
    X-APOLLO-OPERATION-NAME: SearchRepoQuery
    X-APOLLO-CACHE-KEY: 70cf9bc02d3ae3601ba6b35768469363
    X-APOLLO-CACHE-FETCH-STRATEGY: NETWORK_ONLY
    X-APOLLO-EXPIRE-TIMEOUT: 0
    X-APOLLO-EXPIRE-AFTER-READ: false
    X-APOLLO-PREFETCH: false
    {"query":"query SearchRepoQuery($query: String!, $limit: Int!, $afterCursor: String) {  search(query: $query, type: REPOSITORY, first: $limit, after: $afterCursor) {    __typename    repositoryCount    edges {      __typename      node {        __typename        ...RepositoryFragment      }      cursor    }    pageInfo {      __typename      endCursor      hasNextPage    }  }}fragment RepositoryFragment on Repository {  __typename  id  name  description  forkCount  owner {    __typename    avatarUrl  }}","variables":{"query":"hello","limit":20,"afterCursor":null}}
    --> END POST (570-byte body)
11-05 04:55:32.681 6675-6684/com.asana.github.graphqlkotlin I/zygote64: Do partial code cache collection, code=61KB, data=49KB
    After code cache collection, code=61KB, data=49KB
    Increasing code cache capacity to 256KB
11-05 04:55:33.338 6675-6684/com.asana.github.graphqlkotlin I/zygote64: Compiler allocated 6MB to compile void android.view.ViewRootImpl.performTraversals()
11-05 04:55:33.549 6675-6942/com.asana.github.graphqlkotlin D/OkHttp: <-- 200 OK https://api.github.com/graphql (1202ms)
    Server: GitHub.com
    Date: Mon, 05 Nov 2018 03:55:34 GMT
    Content-Type: application/json; charset=utf-8
    Transfer-Encoding: chunked
    Status: 200 OK
    X-RateLimit-Limit: 5000
    X-RateLimit-Remaining: 5000
    X-RateLimit-Reset: 1541393734
    Cache-Control: no-cache
    X-OAuth-Scopes: admin:gpg_key, admin:org, admin:org_hook, admin:public_key, admin:repo_hook, delete_repo, gist, notifications, repo, user, write:discussion
    X-Accepted-OAuth-Scopes: repo
11-05 04:55:33.550 6675-6942/com.asana.github.graphqlkotlin D/OkHttp: X-GitHub-Media-Type: github.v4
    Access-Control-Expose-Headers: ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type
    Access-Control-Allow-Origin: *
    Strict-Transport-Security: max-age=31536000; includeSubdomains; preload
    X-Frame-Options: deny
    X-Content-Type-Options: nosniff
    X-XSS-Protection: 1; mode=block
    Referrer-Policy: origin-when-cross-origin, strict-origin-when-cross-origin
    Content-Security-Policy: default-src 'none'
    X-GitHub-Request-Id: 9351:7794:F9C376:2071DF6:5BDFBF35
11-05 04:55:33.555 6675-6942/com.asana.github.graphqlkotlin D/OkHttp: {"data":{"search":{"__typename":"SearchResultItemConnection","repositoryCount":1269187,"edges":[{"__typename":"SearchResultItemEdge","node":{"__typename":"Repository","id":"MDEwOlJlcG9zaXRvcnkxMDQ1Mzgx","name":"phonegap-start","description":"PhoneGap Hello World app","forkCount":6927,"owner":{"__typename":"Organization","avatarUrl":"https://avatars0.githubusercontent.com/u/60365?v=4"}},"cursor":"Y3Vyc29yOjE="},{"__typename":"SearchResultItemEdge","node":{"__typename":"Repository","id":"MDEwOlJlcG9zaXRvcnkyMTMzNzA0NQ==","name":"hello","description":"[Fork-n-Go] A simple personal page. Demo:","forkCount":294,"owner":{"__typename":"User","avatarUrl":"https://avatars3.githubusercontent.com/u/1305617?v=4"}},"cursor":"Y3Vyc29yOjI="},{"__typename":"SearchResultItemEdge","node":{"__typename":"Repository","id":"MDEwOlJlcG9zaXRvcnkxNTEyMjU1MjA=","name":"Hello-World","description":"Hello World in all possible programmnig languages","forkCount":1907,"owner":{"__typename":"User","avatarUrl":"https://avatars3.githubusercontent.com/u/24933586?v=4"}},"cursor":"Y3Vyc29yOjM="},{"__typename":"SearchResultItemEdge","node":{"__typename":"Repository","id":"MDEwOlJlcG9zaXRvcnkyOTM3NTA2Mw==","name":"decaffeinate","description":"Goodbye CoffeeScript, hello JavaScript!","forkCount":87,"owner":{"__typename":"Organization","avatarUrl":"https://avatars0.githubusercontent.com/u/16957091?v=4"}},"cursor":"Y3Vyc29yOjQ="},{"__typename":"SearchResultItemEdge","node":{"__typename":"Repository","id":"MDEwOlJlcG9zaXRvcnk3NTc3MDYxNA==","name":"HelloCodeSchoolProject","description":"Demonstration on how projects work at Code School.","forkCount":5934,"owner":{"__typename":"Organization","avatarUrl":"https://avatars1.githubusercontent.com/u/24419810?v=4"}},"cursor":"Y3Vyc29yOjU="},{"__typename":"SearchResultItemEdge","node":{"__typename":"Repository","id":"MDEwOlJlcG9zaXRvcnk1ODAyODAzOA==","name":"HelloGitHub","description":":octocat: GitHub 上好玩、容易上手的项目,帮你找到编程的乐趣。欢迎推荐、自荐项目,让更多人知道你的项目⭐️","forkCount":706,"owner":{"__typename":"User","avatarUrl":"https://avatars3.githubusercontent.com/u/8255800?v=4"}},"cursor":"Y3Vyc29yOjY="},{"__typename":"SearchResultItemEdge","node":{"__typename":"Repository","id":"MDEwOlJlcG9zaXRvcnk3ODY0MDY3","name":"groundwork","description":"Say hello to responsive design made easy.","forkCount":336,"owner":{"__typename":"Organization","avatarUrl":"https://avatars0.githubusercontent.com/u/3402444?v=4"}},"cursor":"Y3Vyc29yOjc="},{"__typename":"SearchResultItemEdge","node":{"__typename":"Repository","id":"MDEwOlJlcG9zaXRvcnkxNTE0MzA5MjY=","name":"Hello-world","description":"Add any  Program in any language you like or add a hello world Program ❣️ if you like give us :star:","forkCount":3964,"owner":{"__typename":"Organization","avatarUrl":"https://avatars0.githubusercontent.com/u/43819884?v=4"}},"cursor":"Y3Vyc29yOjg="},{"__typename":"SearchResultItemEdge","node":{"__typename":"Repository","id":"MDEwOlJlcG9zaXRvcnk2ODk4Mzk3","name":"cordova-app-hello-world","description":"Apache Cordova hello world","forkCount":179,"owner":{"__typename":"Organization","avatarUrl":"https://avatars0.githubusercontent.com/u/47359?v=4"}},"cursor":"Y3Vyc29yOjk="},{"__typename":"SearchResultItemEdge","node":{"__typename":"Repository","id":"MDEwOlJlcG9zaXRvcnk1MzM1ODUwNA==","name":"alexa","description":"Alexa \"hello, world\" template","forkCount":157,"owner":{"__typename":"User","avatarUrl":"https://avatars1.githubusercontent.com/u/1069050?v=4"}},"cursor":"Y3Vyc29yOjEw"},{"__typename":"SearchResultItemEdge","node":{"__typename":"Repository","id":"MDEwOlJlcG9zaXRvcnkyNTExNDc1MQ==","name":"hellocharts-android","description":"Charts/graphs library for Android compatible with API 8+, several chart types with support for scaling, scrolling and animations","forkCount":1565,"owner":{"__typename":"User","avatarUrl":"https://avatars3.githubusercontent.com/u/545637?v=4"}},"cursor":"Y3Vyc29yOjEx"},{"__typename":"SearchResultItemEdge","node":{"__type
    cG9zaXRvcnkyNDA3NDIxNA==","name":"ruby-hello-world","description":"Hello world ruby sample for OpenShift v3","forkCount":1446,"owner":{"__typename":"Organization","avatarUrl":"https://avatars3.githubusercontent.com/u/792337?v=4"}},"cursor":"Y3Vyc29yOjEy"},{"__typename":"SearchResultItemEdge","node":{"__typename":"Repository","id":"MDEwOlJlcG9zaXRvcnkyMDc4NzE4Mw==","name":"phonegap-template-hello-world","description":"PhoneGap Hello World app","forkCount":187,"owner":{"__typename":"Organization","avatarUrl":"https://avatars0.githubusercontent.com/u/60365?v=4"}},"cursor":"Y3Vyc29yOjEz"},{"__typename":"SearchResultItemEdge","node":{"__typename":"Repository","id":"MDEwOlJlcG9zaXRvcnk1MTI5MDY4","name":"cordova-plugin-hello","description":"Sample Hello World Cordova Plugin","forkCount":201,"owner":{"__typename":"User","avatarUrl":"https://avatars0.githubusercontent.com/u/3133?v=4"}},"cursor":"Y3Vyc29yOjE0"},{"__typename":"SearchResultItemEdge","node":{"__typename":"Repository","id":"MDEwOlJlcG9zaXRvcnkxMDk2NzYyNzM=","name":"react-comments","description":"react实战项目","forkCount":11,"owner":{"__typename":"User","avatarUrl":"https://avatars2.githubusercontent.com/u/28646101?v=4"}},"cursor":"Y3Vyc29yOjE1"},{"__typename":"SearchResultItemEdge","node":{"__typename":"Repository","id":"MDEwOlJlcG9zaXRvcnkxMDU0NDMzODI=","name":"hello-worlds","description":"Yet another collection of Hello World programs","forkCount":484,"owner":{"__typename":"User","avatarUrl":"https://avatars2.githubusercontent.com/u/23005386?v=4"}},"cursor":"Y3Vyc29yOjE2"},{"__typename":"SearchResultItemEdge","node":{"__typename":"Repository","id":"MDEwOlJlcG9zaXRvcnk0NzIyNTAyNw==","name":"aframe-boilerplate","description":":a: Hello, WebVR starter kit for A-Frame.","forkCount":722,"owner":{"__typename":"Organization","avatarUrl":"https://avatars0.githubusercontent.com/u/16024092?v=4"}},"cursor":"Y3Vyc29yOjE3"},{"__typename":"SearchResultItemEdge","node":{"__typename":"Repository","id":"MDEwOlJlcG9zaXRvcnk1MjM2ODEzNw==","name":"dockercloud-hello-world","description":"Hello world!","forkCount":106,"owner":{"__typename":"Organization","avatarUrl":"https://avatars1.githubusercontent.com/u/5429470?v=4"}},"cursor":"Y3Vyc29yOjE4"},{"__typename":"SearchResultItemEdge","node":{"__typename":"Repository","id":"MDEwOlJlcG9zaXRvcnk2NTY2NDYwNA==","name":"HelloDaemon","description":"Android 服务保活/常驻 (Android service daemon using JobScheduler)","forkCount":248,"owner":{"__typename":"User","avatarUrl":"https://avatars0.githubusercontent.com/u/14246126?v=4"}},"cursor":"Y3Vyc29yOjE5"},{"__typename":"SearchResultItemEdge","node":{"__typename":"Repository","id":"MDEwOlJlcG9zaXRvcnkzNDA5Ng==","name":"hello-world","description":"Hello world in every computer language.  Thanks to everyone who contributes to this, make sure to see CONTRIBUTING.md for contribution instructions!","forkCount":914,"owner":{"__typename":"User","avatarUrl":"https://avatars2.githubusercontent.com/u/4377?v=4"}},"cursor":"Y3Vyc29yOjIw"}],"pageInfo":{"__typename":"PageInfo","endCursor":"Y3Vyc29yOjIw","hasNextPage":true}}}}
    <-- END HTTP (7191-byte body)
11-05 04:55:33.595 6675-6675/com.asana.github.graphqlkotlin E/GitHubGraphQlRepository: failure 
    ApolloException Failed to parse http response
    ApolloException Failed to parse http response
11-05 04:55:33.595 6675-6675/com.asana.github.graphqlkotlin W/System.err: com.apollographql.apollo.exception.ApolloParseException: Failed to parse http response
        at com.apollographql.apollo.internal.interceptor.ApolloParseInterceptor.parse(ApolloParseInterceptor.java:101)
11-05 04:55:33.596 6675-6675/com.asana.github.graphqlkotlin W/System.err:     at com.apollographql.apollo.internal.interceptor.ApolloParseInterceptor$1.onResponse(ApolloParseInterceptor.java:53)
        at com.apollographql.apollo.internal.interceptor.ApolloServerInterceptor$1$1.onResponse(ApolloServerInterceptor.java:94)
        at okhttp3.RealCall$AsyncCall.execute(RealCall.java:153)
        at okhttp3.internal.NamedRunnable.run(NamedRunnable.java:32)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
        at java.lang.Thread.run(Thread.java:764)
    Caused by: java.lang.IllegalArgumentException: Can't map GraphQL type: URI to: class java.lang.Object. Did you forget to add custom type adapter?
        at com.apollographql.apollo.response.ScalarTypeAdapters.adapterFor(ScalarTypeAdapters.java:30)
        at com.apollographql.apollo.internal.response.RealResponseReader.readCustomType(RealResponseReader.java:192)
        at com.apollo.apolographql.api.fragment.RepositoryFragment$Owner$Mapper.map(RepositoryFragment.java:282)
        at com.apollo.apolographql.api.fragment.RepositoryFragment$Mapper$1.read(RepositoryFragment.java:191)
        at com.apollo.apolographql.api.fragment.RepositoryFragment$Mapper$1.read(RepositoryFragment.java:188)
        at com.apollographql.apollo.internal.response.RealResponseReader.readObject(RealResponseReader.java:138)
        at com.apollo.apolographql.api.fragment.RepositoryFragment$Mapper.map(RepositoryFragment.java:188)
11-05 04:55:33.597 6675-6675/com.asana.github.graphqlkotlin W/System.err:     at com.apollo.apolographql.api.SearchRepoQuery$Node$Fragments$Mapper.map(SearchRepoQuery.java:702)
        at com.apollo.apolographql.api.SearchRepoQuery$Node$Mapper$1.read(SearchRepoQuery.java:718)
        at com.apollo.apolographql.api.SearchRepoQuery$Node$Mapper$1.read(SearchRepoQuery.java:715)
        at com.apollographql.apollo.internal.response.RealResponseReader.readConditional(RealResponseReader.java:227)
        at com.apollo.apolographql.api.SearchRepoQuery$Node$Mapper.map(SearchRepoQuery.java:715)
        at com.apollo.apolographql.api.SearchRepoQuery$Edge$Mapper$1.read(SearchRepoQuery.java:546)
        at com.apollo.apolographql.api.SearchRepoQuery$Edge$Mapper$1.read(SearchRepoQuery.java:543)
        at com.apollographql.apollo.internal.response.RealResponseReader.readObject(RealResponseReader.java:138)
        at com.apollo.apolographql.api.SearchRepoQuery$Edge$Mapper.map(SearchRepoQuery.java:543)
        at com.apollo.apolographql.api.SearchRepoQuery$Search$Mapper$1$1.read(SearchRepoQuery.java:425)
        at com.apollo.apolographql.api.SearchRepoQuery$Search$Mapper$1$1.read(SearchRepoQuery.java:422)
        at com.apollographql.apollo.internal.response.RealResponseReader$ListItemReader.readObject(RealResponseReader.java:324)
        at com.apollo.apolographql.api.SearchRepoQuery$Search$Mapper$1.read(SearchRepoQuery.java:422)
        at com.apollo.apolographql.api.SearchRepoQuery$Search$Mapper$1.read(SearchRepoQuery.java:419)
        at com.apollographql.apollo.internal.response.RealResponseReader.readList(RealResponseReader.java:165)
        at com.apollo.apolographql.api.SearchRepoQuery$Search$Mapper.map(SearchRepoQuery.java:419)
        at com.apollo.apolographql.api.SearchRepoQuery$Data$Mapper$1.read(SearchRepoQuery.java:284)
        at com.apollo.apolographql.api.SearchRepoQuery$Data$Mapper$1.read(SearchRepoQuery.java:281)
        at com.apollographql.apollo.internal.response.RealResponseReader.readObject(RealResponseReader.java:138)
        at com.apollo.apolographql.api.SearchRepoQuery$Data$Mapper.map(SearchRepoQuery.java:281)
        at com.apollo.apolographql.api.SearchRepoQuery$Data$Mapper.map(SearchRepoQuery.java:276)
        at com.apollographql.apollo.response.OperationResponseParser$1.read(OperationResponseParser.java:96)
        at com.apollographql.apollo.internal.json.ResponseJsonStreamReader.nextObject(ResponseJsonStreamReader.java:86)
        at com.apollographql.apollo.response.OperationResponseParser.parse(OperationResponseParser.java:91)
11-05 04:55:33.598 6675-6675/com.asana.github.graphqlkotlin W/System.err:     at com.apollographql.apollo.internal.interceptor.ApolloParseInterceptor.parse(ApolloParseInterceptor.java:87)
        ... 7 more
11-05 04:55:33.598 6675-6675/com.asana.github.graphqlkotlin E/GitHubGraphQlRepository: ApolloException kotlin.Unit
sav007 commented 5 years ago

Caused by: java.lang.IllegalArgumentException: Can't map GraphQL type: URI to: class java.lang.Object. Did you forget to add custom type adapter?

You have to provide custom scalar type adapter

lucandroid commented 5 years ago

@sav007 @gowsik-kc I am having the same problem, can you show how that adapter look like?

ricardocanelas commented 4 years ago

Example for a query:

query {
  search(last: 4, query: "Timer", type: USER) {
    userCount
    pageInfo {
      endCursor
      hasNextPage
    }
    edges {
      node {
        ...on User{
          login
          name
          bio
          followers(first: 3) {
            edges {
              node {
                name
              }
            }
          }
        }
      }
    }
  }
}