Клиент ServerSideEvent для OKHttp с пользовательским типом контента - PullRequest
0 голосов
/ 13 июня 2019

Я пытаюсь написать потоковый клиент для HTTP SSE, где мы транслируем документы json с сервера. Я использую OKHttpSSE на стороне клиента для получения документов. У нас есть собственный заголовок Accept для нашего API, и пока я пытаюсь передать пользовательский тип Accept в запросе OKHttp, получаю следующую ошибку «[ERROR] Исключение при использовании источника события ...».

"java.lang.IllegalStateException: Invalid content-type: application/vnd.abc.xyz.platform.pqr-ijk+json; version=1;charset=utf-8"

Note: "vnd.abc.xyz.platform.pqr-ijk+json; version=1;charset=utf-8" is my ACCEPT header.

final Request httpRequest =  new Request.Builder()
     .url("https://abcd.xyz.com/stream/myresources/")
     .addHeader("From", "1234")
     .addHeader("Authorization", "myauthtoken")
     .addHeader("Accept", "vnd.abc.xyz.platform.pqr- 
                           ijk+json;version=1;")
     .build();
final OkHttpClient httpClient = createHttpClient();

final EventSource.Factory sseFactory = 
                   EventSources.createFactory(httpClient);
final EventSourceListener eventSourceListener = new 
              EventSourceListener() {
        /**
        * {@inheritDoc}
        */
       @Override
       public void onOpen(final EventSource eventSource, final Response 
        response) {
             logger.info("EventSource opened...");
       }

      /**
       * {@inheritDoc}
       */
      @Override
      public void onEvent(final EventSource eventSource, final String 
          id, final String type, final String data) {
         logger.info("{}: {}", id, data);
      }

     /**
      * {@inheritDoc}
      */
     @Override
     public void onClosed(final EventSource eventSource) {
         logger.info("EventSource closed...");
     }

     /**
       * {@inheritDoc}
       */
      @Override
     public void onFailure(final EventSource eventSource, final 
                      Throwable t, final Response response) {
        logger.error("Exception while consuming event source... 
           [Response: 
                {}]...", response, t);
      } 

     };

     sseFactory.newEventSource(httpRequest, eventSourceListener);

Ниже приведена информация об ошибке java.lang.IllegalStateException: недопустимый тип содержимого: "vnd.abc.xyz.platform.pqr-ijk + json; версия = 1 по адресу okhttp3.internal.sse.RealEventSource.processResponse (RealEventSource.kt: 60) [okhttp-sse-4.0.0-RC1.jar :?] по адресу okhttp3.internal.sse.RealEventSource.onResponse (RealEventSource.kt: 46) [okhttp-sse-4.0.0-RC1.jar :?] на okhttp3.RealCall $ AsyncCall.run (RealCall.kt: 138) [okhttp-4.0.0-RC1.jar :?] в java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1149) [?: 1.8.0_191] в java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:624) [?: 1.8.0_191] at java.lang.Thread.run (Thread.java:748) [?: 1.8.0_191]

...