Моя команда и я работаем над некоторым старым, но довольно большим приложением, использующим 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? (просто копирую / вставляю)