Как я могу установить определенный (Content-Type) заголовок ответа HTTP, настроив undertow? - PullRequest
0 голосов
/ 30 января 2019

Сводка

Я внедряю веб-сервис, который развернут на сервере приложений 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?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...