UnsupportedEncodingException generata quando utilizza resina e Grails
-
02-10-2019 - |
Domanda
ho incontrato uno strano problema in una webapp Grails Grails esecuzione sotto:
java.io.UnsupportedEncodingException
è gettato abbastanza frequentemente a causa di varie stringhe di codifica sconosciuti (come "ISO8859_10"
, "ISO-8859-10"
), e la cosa strana è che questo è fatto interamente all'interno del codice di resina e Grails. Che è -. Nessun codice personalizzato è coinvolto quando viene generata l'eccezione
Non sono sicuro se è Grails o il codice del servlet container che dovrebbe gestire l'eccezione. Ma mi piacerebbe pensare che l'eccezione deve essere maneggiato da qualche parte e non bolla tutta la strada per stderr.
Questa è l'eccezione in piena:
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)
Le mie domande:
- Qualora tale deroga essere gestita? Se è così, è la responsabilità del servlet container (Resina) oppure il framework web (Grails)?
- Come si va sulla risoluzione di questo? (Preferirei non avere il registro eccezione ingombra con le eccezioni che posso fare nulla.)
Soluzione
Non so molto di Grails, ma forse si potrebbe cercare di scoprire dove questa codifica strano proviene.
Fate le vostre richieste inviare accept-charset intestazioni? Fare le cose funzionano meglio se si imposta la proprietà di sistema "file.encoding" per qualcosa di significativo, come UTF-8 nel vostro resin.conf?
Altri suggerimenti
È possibile anche impostare un fagiolo localeResolver
nel contesto di applicazione. Il DispatcherServlet
userà che per risolvere il locale. Non ho provato io stesso, ma il mio suggerimento è quello di utilizzare il org.springframework.web.servlet.i18n.FixedLocaleResolver
. Sarà delegare ad Locale.getDefault()
se non si dispone di alcun set up.