powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / RequestEntity и заголовок xml и RestTemplate
8 сообщений из 8, страница 1 из 1
RequestEntity и заголовок xml и RestTemplate
    #39322280
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день .

Пишу своего на 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
RequestEntity и заголовок xml и RestTemplate
    #39322426
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, надо подебажить, посмотреть чем именно XML сериализуется. У JAXB свойство есть чтобы отключить вывод xml заголовка.
Можно самому сериализовать и отдавать строкой. Костыль, конечно. Но рабочий.
...
Рейтинг: 0 / 0
RequestEntity и заголовок xml и RestTemplate
    #39322430
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczНу, надо подебажить, посмотреть чем именно XML сериализуется. У JAXB свойство есть чтобы отключить вывод xml заголовка.
Можно самому сериализовать и отдавать строкой. Костыль, конечно. Но рабочий.

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

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

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

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

Да

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

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

дело в этом

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

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

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


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

org.springframework.http.converter.xml.MappingJackson2XmlHttpMessageConverter

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

как ему указать дату
...
Рейтинг: 0 / 0
RequestEntity и заголовок xml и RestTemplate
    #39322854
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
RequestEntity и заголовок xml и RestTemplate
    #39322858
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
RequestEntity и заголовок xml и RestTemplate
    #39322942
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
8 сообщений из 8, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / RequestEntity и заголовок xml и RestTemplate
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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