2010-05-01 25 views
0

J'ai rencontré un problème étrange dans une webapp Grails fonctionnant sous Grails:UnsupportedEncodingException jeté lors de l'utilisation de résine et 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 chose étrange est que cela est fait entièrement dans le code résine et Grails. C'est - aucun code personnalisé n'est impliqué lorsque l'exception est levée.

Je ne sais pas si c'est Grails ou le code du conteneur de servlet qui devrait gérer l'exception. Mais je supposerais que l'exception devrait être traitée quelque part et ne pas exploser jusqu'à 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:

  • Si l'exception MANIPULABLES? Si oui, est-ce la responsabilité du conteneur de servlet (Resin) ou du framework web (Grails)?
  • Comment voulez-vous résoudre ce problème? (Je préfère ne pas avoir le journal des exceptions encombré avec des exceptions que je ne peux rien faire.)

Répondre

2

Je ne sais pas grand-chose sur Grails, mais peut-être que vous pourriez essayer de trouver d'où vient ce codage bizarre .

Vos demandes envoient-elles des en-têtes Accept-Charset? Est-ce que les choses fonctionnent mieux si vous définissez la propriété système "file.encoding" sur quelque chose de significatif comme UTF-8 dans votre fichier resin.conf?

0

Vous pouvez également configurer un bean localeResolver dans votre contexte d'application. Le DispatcherServlet utilisera cela pour résoudre les paramètres régionaux. Je ne l'ai pas essayé moi-même, mais ma suggestion est d'utiliser le org.springframework.web.servlet.i18n.FixedLocaleResolver. Il va déléguer à Locale.getDefault() si vous n'avez aucune configuration.