Api передает другой ответ API - PullRequest
0 голосов
/ 13 февраля 2020

Моя команда и я работаем над некоторым старым, но довольно большим приложением, использующим GWT 2.4 (JDK 1.6.0_45).

В настоящее время мы сталкиваемся с publi c API с использованием HTTP протокол. Недавно они переключаются на HTTPS, который не очень хорошо используется Java 6 (бесплатная версия).

У меня было несколько решений:

  • Обновление до поддерживаемого, но не бесплатного, * Версия 1032 * 6 (Мы не хотели бы платить)
  • Обновление до Java 8 (GWT 2.4, который не совместим с Java 8, поэтому мы также должны перейти на GWT 2.8, и это займет некоторое время, учитывая размер приложения)
  • Разработка небольшого API-интерфейса, перехватывающего ответ этого опубликованного API c и отправляющего его обратно в мое приложение по протоколу HTTP

I Я начал третье решение, но у меня возникли некоторые проблемы с демаршалингом полученного ответа (xml).

Вот что я делал до сих пор:

Мой метод API, вызывающий publi c API:

@Override
public ResponseEntity<WorkMetadataType> lookupWithFilter(String authorization, String filter, String id, Optional<String> accept, Optional<String> xISANAuthorization, Optional<String> idtype) {
    WorkMetadataType res = isanApi.lookupWithFilter(authorization, filter, id, accept.orElse(null), xISANAuthorization.orElse(null), idtype.orElse(null));
    if (res == null) {
        throw new WorkNotFoundException();
    }
    return ResponseEntity.ok(res);
}

Метод, вызывающий API publi c.

public WorkMetadataType lookupWithFilter(String authorization, String filter, String id, String accept, String xISANAuthorization, String idtype) {
    RestTemplate restTemplate = new RestTemplate();
    restTemplate.setRequestFactory(new HttpComponentsClientHttpRequestFactory(getHttpClient()));
    try {
        CustomMarshallingHttpMessageConverter converter;
        converter = new CustomMarshallingHttpMessageConverter(JAXBContext.newInstance(ISANDataType.class));
        converter.setDefaultCharset(StandardCharsets.UTF_8);
        restTemplate.getMessageConverters().add(converter);
    } catch (JAXBException e) {
        logger.error("Erreur lors de la définition du marshaller", e);
    }
    HttpEntity<String> entity = new HttpEntity<>(null, getHeaders(authorization, accept, xISANAuthorization));

    return restTemplate.exchange(getRequestUri(id, idtype, filter), HttpMethod.GET, entity, WorkMetadataType.class).getBody();
}

Как видите, я использую Spring и его класс RestTemplate. Проблема в том, что вам нужно указать природу ответа, которого я хотел бы избежать из-за моих проблем с беспорядочной разметкой.

У меня вопрос: можно ли передать ответ этого опубликованного API c в мое приложение, не потребляя это при получении моим API? (просто копирую / вставляю)

1 Ответ

0 голосов
/ 25 февраля 2020

В конце концов я использовал HttpCliendBuilder для построения моего запроса и получения InputStream в качестве ответа. Таким образом, я могу просто преобразовать его в String и создать с ним ResponseEntity.

...