Я разрабатываю приложение-мост, которое отправляет soap запросов в веб-службу Restful и возвращает ответ в soap.
Ответ Restful Webservice выглядит примерно так
[
{
"agenzia": "string",
"allegato": [
{
"fileName": "string",
"body": "string",
"mimeType": "string"
}
]
}
]
Я использую Spring Boot Framework для разработки этого. Я сгенерировал java файлов из XSD (исключая класс «RetrieveRichiesta»), затем я создал класс DTO (класс «RetrieveRichiestaResponseDto») для обработки ответа от веб-сервиса. Класс API -
public RetrieveRichiestaResponse RetrieveRichiesta(RetrieveRichiestaRequest request){
//LOGGER.info("Servizio richiamato "+ url + "api/incident/retrieveincident");
// Call the API
RestTemplate restTemplate = new RestTemplate();
// Add Interceptor
restTemplate.setInterceptors(Collections.singletonList(new RequestResponseLoggingInterceptor()) );
HttpHeaders headers = new HttpHeaders();
headers.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON));
headers.setContentType(MediaType.APPLICATION_JSON);
final String uri = url + "/api/incident/retrieveincident";
Map<String,String> input = new HashMap<>();
input.put("id_CRM", request.getIdCRM());
input.put("tipo", request.getTipo());
input.put("fonte", request.getFonte());
HttpEntity<?> entity = new HttpEntity<>(input,headers);
RetrieveRichiestaResponseDto result = restTemplate.postForObject(
uri,
entity,
RetrieveRichiestaResponseDto.class);
// Transform response RetrieveRichiestaRequestDto to RetrieveRichiestaRequest
RetrieveRichiesta RetrieveRichiesta = new RetrieveRichiesta();
RetrieveRichiesta.setAgenzia(result.getAgenzia());
RetrieveRichiesta.setAllegato(result.getAllegatoDTO());
RetrieveRichiestaResponse response = new RetrieveRichiestaResponse();
LOGGER.info("Risposta" + response.toString());
response.setRetrieveRichiesta(RetrieveRichiesta);
return response;
}
Когда я отправляю запрос через SOAP, я получаю в ответ эту ошибку
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header/>
<SOAP-ENV:Body>
<SOAP-ENV:Fault>
<faultcode>SOAP-ENV:Server</faultcode>
<faultstring xml:lang="en">Error while extracting response for type [class eu.ima.app.domain.RetrieveRichiestaDto] and content type [application/json;charset=utf-8]; nested exception is org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot deserialize instance of `eu.ima.app.domain.RetrieveRichiestaDto` out of START_ARRAY token; nested exception is com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of `eu.ima.app.domain.RetrieveRichiestaDto` out of START_ARRAY token
at [Source: (PushbackInputStream); line: 1, column: 1]</faultstring>
</SOAP-ENV:Fault>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Я думаю, потому что он хочет JSON Объект, подобный этому {} и не так [{}]
я также пытался изменить код, подобный этому
......
HttpEntity<?> entity = new HttpEntity<>(input,headers);
ResponseEntity<List<RetrieveRichiestaResponseDto>> result = restTemplate.exchange(
uri,
HttpMethod.POST,
entity,
new ParameterizedTypeReference<List<RetrieveRichiestaResponseDto>>() {});
List<RetrieveRichiestaResponseDto> rates = result.getBody();
//LOGGER.info(rates.toString());
for (int i = 0; i < rates.size(); i++) {
System.out.println(rates.get(i));
}
......
, чтобы получить его в виде списка, но как тогда передать его в RetrieveRichiesta в виде списка? Где ошибка? Это много за любую помощь !!