Ответ веб-службы Liberty ISO-8859-1 - PullRequest
0 голосов
/ 14 сентября 2018

мой веб-сервис SOAP отвечает ISO-8859-1 , если в заголовке запроса http не задана кодировка.

Я попробовал следующее:

  • установить следующее в jvm.options: -Dfile.encoding = UTF-8 -Duser.language = en -Duser.country = US -Dclient.encoding.override = UTF-8
  • установить переменную среды (глобальную): DEFAULT_CLIENT_ENCODING = UTF-8
  • создал обработчик SOAP, добавив charset = UTF-8, если он не существует в Content-Type

Но, тем не менее, в логах Liberty я вижу, что для входящего сообщения установлены следующие заголовки:

Encoding: ISO-8859-1
Http-Method: POST
Content-Type: application/soap+xml;action="myWSmethod"

Наши конечные пользователи, как правило, отправляют свои запросы без заголовка в заголовке запроса. Раньше у нас был традиционный WAS8, который по умолчанию использовал UTF-8. Настройка Liberty на использование UTF-8 также не выполняется.

Возможно, есть скрытый параметр в server.xml?

Liberty использует CXF, перехватывает входящее сообщение и устанавливает заголовки. Почему он все еще использует ISO?

С уважением

1 Ответ

0 голосов
/ 18 сентября 2018

Я не буду объяснять все ваши параметры, и вы должны понимать, что некоторые из них вы используете для кодирования клиента, то есть запроса, который вы получили, а не ответа, с которым вы отвечаете ...

В любом случае ...Чтобы уточнить про 8859-1, HTTP / 1.1 rfc говорит:

Параметр "charset" используется с некоторыми типами медиа для определениянабор символов (раздел 3.4) данных.Если отправителем не предоставлен явный параметр charset
, подтипы мультимедиа типа «text»
определяются как имеющие значение по умолчанию charset «ISO-8859-1» при получении через HTTP.Данные в наборах символов, отличных от «ISO-8859-1» или
, их подмножества ДОЛЖНЫ быть помечены соответствующим значением набора символов.

Некоторые программы HTTP / 1.0 неправильно интерпретировали заголовок Content-Type без параметра charsetозначать «получатель должен угадать».Отправители, желающие победить это поведение, МОГУТ включать параметр charset даже в том случае, если кодировка соответствует ISO-8859-1, и СЛЕДУЕТ делать это, когда известно, что это не запутает получателя.

И как приложениесервер обрабатывает кодировку ...

Поведение по умолчанию для WebSphere Application Server заключается, во-первых, в проверке, установлена ​​ли кодировка в заголовке типа содержимого.Если это так, тогда продукт использует заголовок типа контента для кодировки символов;в противном случае продукт использует кодировку символов, установленную на сервере, используя системное свойство default.client.encoding.Если кодировка отсутствует и системное свойство не задано, продукт использует ISO-8859-1.Включение autoRequestEncoding для веб-модуля изменяет поведение по умолчанию: если кодировка не присутствует в заголовке входящего запроса, продукт проверяет заголовок Accept-Language входящего запроса и выполняет кодирование с использованием первого языка, найденного в этом заголовке.Если в заголовке типа контента нет кодировки и нет заголовка языка Accept, тогда продукт использует кодировку символов, установленную на сервере с использованием системного свойства default.client.encoding.Как и в случае поведения по умолчанию, если кодировка отсутствует и системное свойство не задано, продукт использует ISO-8859-1.

...