Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / RequestEntity и заголовок xml и RestTemplate / 8 сообщений из 8, страница 1 из 1
06.10.2016, 19:30
    #39322280
Atum1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RequestEntity и заголовок xml и RestTemplate
Добрый день .

Пишу своего на RestTemplate (spring)

Сайт принимает в теле xml документ и требует нализие шапки

Код: xml
1.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>



а она почему то клиентов RestTemplate не создается ?

как его заставить это делать ?

тест такой :


отправляю

Код: xml
1.
2.
3.
4.
5.
6.
7.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<getMinTaxableAmountRequest xmlns="http://gosloto.ru/xsd">
    <header>
        <requestID>1</requestID>
        <date>2016-10-06T00:00:00.000+03:00</date>
    </header>
</getMinTaxableAmountRequest>



но RestTemplate

в тело помещает только тело

Код: xml
1.
2.
3.
4.
5.
6.
<getMinTaxableAmountRequest xmlns="http://gosloto.ru/xsd">
    <header>
        <requestID>1</requestID>
        <date>2016-10-06T00:00:00.000+03:00</date>
    </header>
</getMinTaxableAmountRequest>



из за этого ошибка :(

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
 @Test
    public void testGetMinTaxableAmountRequest() throws URISyntaxException, DatatypeConfigurationException, JAXBException  {
        GetMinTaxableAmountRequest amountRequest = new GetMinTaxableAmountRequest();
        
        TRequestHeader header = new TRequestHeader();
        header.setRequestID("1");
        
        LocalDate date = LocalDate.now();
        GregorianCalendar gcal = GregorianCalendar.from(date.atStartOfDay(ZoneId.systemDefault()));
        XMLGregorianCalendar xcal = DatatypeFactory.newInstance().newXMLGregorianCalendar(gcal);

        header.setDate(xcal);
        amountRequest.setHeader(header);
        
        Utils.marshaller(amountRequest, System.out); // Это через JAXBContext

//<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
//<getMinTaxableAmountRequest xmlns="http://gosloto.ru/xsd">
//    <header>
//        <requestID>1</requestID>
//        <date>2016-10-06T00:00:00.000+03:00</date>
//    </header>
//</getMinTaxableAmountRequest>
        
        
        RequestEntity<GetMinTaxableAmountRequest> requestEntity  = RequestEntity.post(new URI(ortaxUrl))
                .accept(MediaType.APPLICATION_XML)
                .contentType(MediaType.APPLICATION_XML)
                .body(amountRequest);
        
        
        log.info(requestEntity);
        
        ResponseEntity<GetMinTaxableAmountResponse> responseEntity = 
       
          restTemplate.exchange(requestEntity, GetMinTaxableAmountResponse.class);

        
        
        log.info(responseEntity);
        log.info(responseEntity.getBody());

    }
...
Рейтинг: 0 / 0
07.10.2016, 08:40
    #39322426
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RequestEntity и заголовок xml и RestTemplate
Ну, надо подебажить, посмотреть чем именно XML сериализуется. У JAXB свойство есть чтобы отключить вывод xml заголовка.
Можно самому сериализовать и отдавать строкой. Костыль, конечно. Но рабочий.
...
Рейтинг: 0 / 0
07.10.2016, 08:49
    #39322430
Atum1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RequestEntity и заголовок xml и RestTemplate
BlazkowiczНу, надо подебажить, посмотреть чем именно XML сериализуется. У JAXB свойство есть чтобы отключить вывод xml заголовка.
Можно самому сериализовать и отдавать строкой. Костыль, конечно. Но рабочий.

На сервере я вижу что заголовка в теле нет ...

быстрое гугление ничего не дало :(

видимо нужно как то сказать RestTemplate чтобы при маршалинге в xml он сохранил заголовок , вопрос как ?!

по поводу строки - да изначально делал так , но Это не красиво :(
...
Рейтинг: 0 / 0
07.10.2016, 09:40
    #39322480
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RequestEntity и заголовок xml и RestTemplate
Останови в отладке и посмотри структуру своего RestTemplate. Там где-то в глубине должна быть ссылка на JAXB Marshaller. У него есть свойство, которое отключает заголовок.
...
Рейтинг: 0 / 0
07.10.2016, 14:39
    #39322831
Atum1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RequestEntity и заголовок xml и RestTemplate
Blazkowicz,

Да

Дело было не в заголовке .

есть или нет ему пофиг (принимающему серверу )

дело в этом

такой формат даты требуетс сервер и ее выдает jaxb парсер

2016-10-06T00:00:00.000+03:00

такой формат записывает RestTemplate клиент в поле даты
1475787600000


и да там внутри не jaxb - там сидит

org.springframework.http.converter.xml.MappingJackson2XmlHttpMessageConverter

вопрос изменился :

как ему указать дату
...
Рейтинг: 0 / 0
07.10.2016, 15:02
    #39322854
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RequestEntity и заголовок xml и RestTemplate
...
Рейтинг: 0 / 0
07.10.2016, 15:04
    #39322858
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RequestEntity и заголовок xml и RestTemplate
...
Рейтинг: 0 / 0
07.10.2016, 16:34
    #39322942
Atum1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RequestEntity и заголовок xml и RestTemplate
Blazkowicz,

спасибо за наводку

сейчас вижу что получаю ошибку

Could not extract response: no suitable HttpMessageConverter found for response type and content type [text/plain;charset=utf8]


Видимо сервер написан не корректно .

стал разбираться

добавил такие зависимости в pom:

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
        <dependency>
            <groupId>com.fasterxml.jackson.dataformat</groupId>
            <artifactId>jackson-dataformat-xml</artifactId>
        </dependency>

        <dependency>
            <groupId>com.fasterxml.jackson.datatype</groupId>
            <artifactId>jackson-datatype-joda</artifactId>
        </dependency>
        



Не помогло


добавил ваше решение :

Код: java
1.
2.
3.
4.
5.
6.
7.
        List<HttpMessageConverter<?>> messageConverters = new ArrayList<>();
        Jaxb2RootElementHttpMessageConverter jaxbMessageConverter = new Jaxb2RootElementHttpMessageConverter();
        List<MediaType> mediaTypes = new ArrayList<>();
        mediaTypes.add(MediaType.APPLICATION_XML);
        jaxbMessageConverter.setSupportedMediaTypes(mediaTypes);
        messageConverters.add(jaxbMessageConverter);
        restTemplate.setMessageConverters(messageConverters);



получил ошибку от клиента что не могу перевернуть из за and content type [text/plain;charset=utf8]

если так написать то все ок!

Код: java
1.
ResponseEntity<String> result = restTemplate.exchange(requestEntity,  String.class);
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / RequestEntity и заголовок xml и RestTemplate / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]