Сводка
Я внедряю веб-сервис, который развернут на сервере приложений Wildfly-15.Я хотел бы, чтобы заголовок ответа Content-Type
HTTP включал charset=UTF-8
.Это необходимо для того, чтобы клиент понял мой ответ.
Подробности
Один из моих клиентов всегда отправляет свой запрос без указания кодировки в Content-Type
.В этом случае стек веб-службы Wildfly использует в ответе значение по умолчанию charset=ISO-8859-1
.См. Это поведение в подпункте code , строки 602-611:
private String extractCharset(HeaderMap headers) {
String contentType = headers.getFirst(Headers.CONTENT_TYPE);
if (contentType != null) {
String value = Headers.extractQuotedValueFromHeader(contentType, "charset");
if (value != null) {
return value;
}
}
return ISO_8859_1;
}
Поскольку мой ответ на самом деле UTF-8
закодирован (и должен быть), это вызываетнеприятности на стороне клиента.См. Дамп заголовка в журнале загрузки:
----------------------------REQUEST---------------------------
header=Connection=Keep-Alive
header=SOAPAction=****
header=Accept-Encoding=gzip,deflate
header=Content-Type=text/xml
header=Content-Length=2137
header=User-Agent=Apache-HttpClient/4.1.1 (java 1.5)
header=Host=****
locale=[]
method=POST
....
--------------------------RESPONSE--------------------------
header=Connection=keep-alive
header=Content-Type=text/xml;charset=ISO-8859-1
header=Content-Length=1553
header=Date=Tue, 29 Jan 2019 16:19:38 GMT
status=200
Этот тип ответа приводит к следующему исключению в приложении IBM Websphere:
org.springframework.ws.InvalidXmlException: Could not parse XML; nested exception is org.xml.sax.SAXParseException: An invalid XML character (Unicode: 0xffffffff) was found in the element content of the document.
К сожалению, изменение клиента не являетсявариант.
Неудачные эксперименты
До сих пор мои усилия были направлены на то, чтобы сконфигурировать откат Widlfy посредством задания фильтров для переопределения заголовков ответа HTTP.Мне удалось установить только Content-Encoding
с помощью фильтра Response Header .Кажется, заголовок Content-Type
переопределяется где-то еще вдоль линии.
Вторым моим предположением было использование Фильтр выражений с выражением
header(header=Content-Type, value='text/xml;charset=UTF-8')
К сожалению,это также не сработало.
Вопрос
- Может ли эта проблема быть решена с помощью конфигурации undertow?
- Или я должен каким-то образом (как?) программно установитьзаголовок HTTP-ответа, включающий
charset=UTF-8
?