HttpEntity с ошибками `application/xml` при переходе с 1.0 на 2.0

У меня не так много опыта работы с akka, но что-то изменилось в том, как HttpEntity обрабатывает строки?

В настоящее время я использую akka-http 1.0, но хотел бы перейти на версию 2.0 и начать использовать функциональность Source.queue. Я следую шагам, описанным в этот блог, на который я был направлен из похожего вопроса о переполнении стека. Я смог реализовать все из сообщения в блоге. Однако обновление до версии 2.0, похоже, сломало то, что у меня было для HttpEntity. В настоящее время у меня есть следующее объявление внутри HttpRequest в akka-http 1.0:

entity = HttpEntity(MediaTypes.`application/xml`, xml)  

Где xml — это строка, созданная с помощью XStream. Когда я перехожу на 2.0, я получаю предупреждение от своей IDE, что она не может разрешить HttpEntity с такой подписью и что существует несоответствие типа для части MediaTypes; ожидая ContentType.

Попытка передать MediaType в ContentType с помощью:

HttpEntity(ContentType(MediaTypes.`application/xml`), xml)

результаты с разным несоответствием типов; ожидал Binary или WithFixedCharset, но нашел WithOpenCharset.

Вот весь блок кода для HttpRequest для 1.0, который в настоящее время работает без проблем:

httpReq = HttpRequest(method = HttpMethods.PUT,
        uri = itemUri, 
        entity = HttpEntity(MediaTypes.`application/xml`, xml), 
        headers = List(apiH))

Нужно ли мне реализовать собственный сериализатор или что-то еще для строк xml с 2.0?

Любая помощь здесь очень ценится.


person the3rdNotch    schedule 10.02.2016    source источник


Ответы (1)


Тип содержимого text/xml должен указывать набор символов, чтобы получатель этой информации знал, как правильно ее анализировать. Если вы используете UTF8, вы можете просто использовать ContentTypes.text/xml(UTF-8), так как он имеет фиксированную кодировку. Если вы хотите использовать другую кодировку (например, ISO-8859-1), вы можете сделать что-то вроде этого:

MediaTypes.`text/xml`.withCharset(HttpCharsets.`ISO-8859-1` )

В любом случае вы получите WithCharset, а не WithOpenCharset, и, таким образом, сможете использовать его в объекте ответа.

person cmbaxter    schedule 10.02.2016