[2.0.1-java]

134 views
Skip to first unread message

Joscha Feth

unread,
Jun 4, 2012, 6:10:42 AM6/4/12
to play-fr...@googlegroups.com
Hi,

I just deployed an application (www.ninjaquery.com) on 2.0.1 and get requests from all over the world - one thing I am seeing in my logs is errors of this sort, when people come to the page with various special Accep-Language headers ("*", "en-US;q=bla", etc.) - example with "*":

-- 8< --
scala.MatchError: * (of class java.lang.String)
    at play.api.i18n.Lang$.apply(Messages.scala:54)
    at play.api.mvc.RequestHeader$$anonfun$acceptLanguages$1$$anonfun$apply$1.apply(Http.scala:56)
    at play.api.mvc.RequestHeader$$anonfun$acceptLanguages$1$$anonfun$apply$1.apply(Http.scala:56)
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:194)
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:194)
    at scala.collection.IndexedSeqOptimized$class.foreach(IndexedSeqOptimized.scala:34)
    at scala.collection.mutable.ArrayOps.foreach(ArrayOps.scala:38)
    at scala.collection.TraversableLike$class.map(TraversableLike.scala:194)
    at scala.collection.mutable.ArrayOps.map(ArrayOps.scala:38)
    at play.api.mvc.RequestHeader$$anonfun$acceptLanguages$1.apply(Http.scala:56)
    at play.api.mvc.RequestHeader$$anonfun$acceptLanguages$1.apply(Http.scala:55)
    at scala.Option.map(Option.scala:133)
    at play.api.mvc.RequestHeader$class.acceptLanguages(Http.scala:55)
    at play.core.server.netty.PlayDefaultUpstreamHandler$$anonfun$18$$anonfun$apply$20$$anon$1.acceptLanguages(PlayDefaultUpstreamHandler.scala:287)
    at play.core.j.JavaHelpers$$anon$3.acceptLanguages(JavaHelpers.scala:112)
    at play.mvc.Http$Context$Implicit.lang(Http.java:131)
    at play.api.templates.PlayMagicForJava$.implicitJavaLang(Templates.scala:198)
    at views.html.index$.apply(index.template.scala:32)
    at views.html.index$.render(index.template.scala:90)
    at views.html.index.render(index.template.scala)
    at controllers.Application.index(Application.java:217)
    at Routes$$anonfun$routes$1$$anonfun$apply$1$$anonfun$apply$2.apply(routes_routing.scala:85)
    at Routes$$anonfun$routes$1$$anonfun$apply$1$$anonfun$apply$2.apply(routes_routing.scala:85)
    at play.core.Router$HandlerInvoker$$anon$4$$anon$1.invocation(Router.scala:1086)
    at play.core.j.JavaAction$$anon$1.call(JavaAction.scala:33)
    at play.GlobalSettings$1.call(GlobalSettings.java:57)
    at play.core.j.JavaAction$class.apply(JavaAction.scala:74)
    at play.core.Router$HandlerInvoker$$anon$4$$anon$1.apply(Router.scala:1085)
    at play.core.ActionInvoker$$anonfun$receive$1$$anonfun$6.apply(Invoker.scala:126)
    at play.core.ActionInvoker$$anonfun$receive$1$$anonfun$6.apply(Invoker.scala:126)
    at play.utils.Threads$.withContextClassLoader(Threads.scala:17)
    at play.core.ActionInvoker$$anonfun$receive$1.apply(Invoker.scala:125)
    at play.core.ActionInvoker$$anonfun$receive$1.apply(Invoker.scala:115)
    at akka.actor.Actor$class.apply(Actor.scala:311)
    at play.core.ActionInvoker.apply(Invoker.scala:113)
    at akka.actor.ActorCell.invoke(ActorCell.scala:619)
    at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:196)
    at akka.dispatch.Mailbox.run(Mailbox.scala:178)
    at akka.dispatch.ForkJoinExecutorConfigurator$MailboxExecutionTask.exec(AbstractDispatcher.scala:505)
    at akka.jsr166y.ForkJoinTask.doExec(ForkJoinTask.java:259)
    at akka.jsr166y.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:974)
    at akka.jsr166y.ForkJoinPool.runWorker(ForkJoinPool.java:1478)
    at akka.jsr166y.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:104)
-- 8< --

Whereas it doesn't seem to affect the website, the logs get swamped with this - is there a way to tell Play to automatically fall back to the default language when an unknown accept-header is sent without warning/logging about it?

Cheers,
Joscha

Julien Richard-Foy

unread,
Jun 4, 2012, 6:29:47 AM6/4/12
to play-fr...@googlegroups.com
That’s a known issue and there is a pull request providing a way to
“try” to build a Play Lang object from a given language code:
https://github.com/playframework/Play20/pull/338

However this pull request is not sufficient since the framework itself
still continues to call Lang.apply (instead of Lang.option), e.g. in
the acceptLanguages method.

Julien
Reply all
Reply to author
Forward
0 new messages