UnsupportedEncodingException jeté lors de l'utilisation de résine et Grails
-
02-10-2019 - |
Question
Je l'ai rencontré un problème étrange dans une webapp Grails fonctionnant sous Grails:
java.io.UnsupportedEncodingException
est jeté assez souvent en raison de diverses chaînes de codage inconnus (tels que "ISO8859_10"
, "ISO-8859-10"
), et la chose étrange est que cela se fait entièrement dans le code de résine et Grails. C'est -. Pas de code personnalisé est impliqué lorsque l'exception est levée
Je ne sais pas si elle est Grails ou le code du conteneur de servlet qui doit gérer l'exception. Mais je suppose que l'exception devrait être traitée quelque part et pas bouillonner tout le chemin à stderr.
Ceci est l'exception en pleine:
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)
Mes questions:
- doit l'exception être gérée? Si oui, est-il la responsabilité du conteneur de servlets (résine) ou le framework web (Grails)?
- Comment iriez-vous de résoudre cela? (Je préfère ne pas avoir le journal des exceptions encombrées avec des exceptions que je peux faire rien.)
La solution
Je ne sais pas beaucoup sur Grails, mais vous pourriez peut-être essayer de savoir où cette étrange provient de l'encodage.
Faites vos demandes envoyer accept-charset têtes? Est-ce que les choses fonctionnent mieux si vous définissez la propriété système « file.encoding » à quelque chose de significatif comme UTF-8 dans votre resin.conf?
Autres conseils
Vous pouvez également configurer un grain de localeResolver
dans votre contexte d'application. Le DispatcherServlet
utilisera que pour résoudre les paramètres régionaux. Je ne l'ai pas essayé moi-même, mais ma suggestion est d'utiliser la org.springframework.web.servlet.i18n.FixedLocaleResolver
. Il déléguera à Locale.getDefault()
si vous n'avez pas mis en place.