UnsupportedEncodingException выбрасывается при использовании смолы и Grails - PullRequest
0 голосов
/ 01 мая 2010

Я столкнулся со странной проблемой в веб-приложении Grails, работающем под Grails:

java.io.UnsupportedEncodingException генерируется довольно часто из-за различных неизвестных кодирующих строк (таких как "ISO8859_10", "ISO-8859-10"), и странным является то, что это делается полностью в коде Resin и Grails. То есть, когда выдается исключение, пользовательский код не используется.

Я не уверен, должен ли Grails или код контейнера сервлета обрабатывать исключение. Но я бы предположил, что исключение должно быть где-то обработано, а не всплывать до самого stderr.

Это исключение полностью:

java.io.UnsupportedEncodingException: ISO-8859-10
  at com.caucho.vfs.i18n.JDKWriter$OutputStreamEncodingWriter.<init>(JDKWriter.java:112)
  at com.caucho.vfs.i18n.JDKWriter.create(JDKWriter.java:79)
  at com.caucho.vfs.Encoding.getWriteEncoding(Encoding.java:231)
  at com.caucho.server.connection.ToByteResponseStream.setEncoding(ToByteResponseStream.java:137)
  at com.caucho.server.connection.AbstractHttpResponse.setLocale(AbstractHttpResponse.java:1683)
  at com.caucho.server.connection.HttpServletResponseImpl.setLocale(HttpServletResponseImpl.java: 115)
  at javax.servlet.ServletResponseWrapper.setLocale(ServletResponseWrapper.java:139)
  at javax.servlet.ServletResponseWrapper.setLocale(ServletResponseWrapper.java:139)
  at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1035)
  at org.codehaus.groovy.grails.web.servlet.GrailsDispatcherServlet.doDispatch(GrailsDispatcherServlet.java:290)
  at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:716)
  at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:647)
  at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:552)
  at javax.servlet.http.HttpServlet.service(HttpServlet.java:114)

Мои вопросы:

  • Следует ли обрабатывать исключение? Если да, то несет ли он ответственность за контейнер сервлета (Resin) или веб-фреймворк (Grails)?
  • Как бы вы решили это? (Я бы предпочел, чтобы журнал исключений не был перегружен исключениями, с которыми я ничего не могу поделать.)

Ответы [ 2 ]

2 голосов
/ 01 мая 2010

Я немного знаю о Grails, но, возможно, вы могли бы попытаться выяснить, откуда взялась эта странная кодировка.

Ваши запросы отправляют заголовки Accept-Charset? Работают ли лучше, если вы установили системное свойство "file.encoding" на что-то значимое, например UTF-8, в вашем смолы.conf?

0 голосов
/ 14 декабря 2010

Вы также можете настроить компонент localeResolver в контексте своего приложения. DispatcherServlet будет использовать это для разрешения локали. Я сам не пробовал, но я предлагаю использовать org.springframework.web.servlet.i18n.FixedLocaleResolver. Он будет делегирован на Locale.getDefault(), если у вас нет настроек.

...