2012-11-16 4 views
0

Привет я получаю исключение, время от времени (не может воспроизвести) и не знаю, что делать ..Weird JSF PrettyFaces Исключение

Вот StackTrace:

java.lang.NumberFormatException.forInputString 13:46:52,015 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[atlasvirtualdomain].[/].[Faces Servlet]] (http--0.0.0.0-8040-399) Servlet.service() for servlet Faces Servlet threw exception: java.lang.NumberFormatException: For input string: "+O.undefined" 
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) [rt.jar:1.7.0_07] 
    at java.lang.Integer.parseInt(Integer.java:492) [rt.jar:1.7.0_07] 
    at java.lang.Integer.valueOf(Integer.java:582) [rt.jar:1.7.0_07] 
    at javax.faces.convert.IntegerConverter.getAsObject(IntegerConverter.java:116) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final] 
    at com.ocpsoft.pretty.faces.beans.ParameterInjector.injectPathParams(ParameterInjector.java:85) [prettyfaces-jsf2-3.3.3.jar:] 
    at com.ocpsoft.pretty.faces.beans.ParameterInjector.injectParameters(ParameterInjector.java:54) [prettyfaces-jsf2-3.3.3.jar:] 
    at com.ocpsoft.pretty.faces.event.PrettyPhaseListener.afterPhase(PrettyPhaseListener.java:102) [prettyfaces-jsf2-3.3.3.jar:] 
    at com.sun.faces.lifecycle.Phase.handleAfterPhase(Phase.java:189) [jsf-impl-2.1.7-jbossorg-2.jar:] 
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:107) [jsf-impl-2.1.7-jbossorg-2.jar:] 
    at com.sun.faces.lifecycle.RestoreViewPhase.doPhase(RestoreViewPhase.java:116) [jsf-impl-2.1.7-jbossorg-2.jar:] 
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118) [jsf-impl-2.1.7-jbossorg-2.jar:] 
    at org.apache.myfaces.extensions.cdi.jsf2.impl.listener.phase.CodiLifecycleWrapper.execute(CodiLifecycleWrapper.java:95) [myfaces-extcdi-bundle-jsf20-1.0.5.jar:1.0.5] 
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final] 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:329) [jbossweb-7.0.13.Final.jar:] 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.13.Final.jar:] 
    at org.primefaces.webapp.filter.FileUploadFilter.doFilter(FileUploadFilter.java:82) [classes:] 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280) [jbossweb-7.0.13.Final.jar:] 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.13.Final.jar:] 
    at utils.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:32) [classes:] 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280) [jbossweb-7.0.13.Final.jar:] 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.13.Final.jar:] 
    at com.ocpsoft.pretty.PrettyFilter.doFilter(PrettyFilter.java:145) [prettyfaces-jsf2-3.3.3.jar:] 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280) [jbossweb-7.0.13.Final.jar:] 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.13.Final.jar:] 
    at utils.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:32) [classes:] 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280) [jbossweb-7.0.13.Final.jar:] 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.13.Final.jar:] 
    at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:840) [jbossweb-7.0.13.Final.jar:] 
    at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:622) [jbossweb-7.0.13.Final.jar:] 
    at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:560) [jbossweb-7.0.13.Final.jar:] 
    at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:488) [jbossweb-7.0.13.Final.jar:] 
    at com.ocpsoft.pretty.PrettyFilter.doFilter(PrettyFilter.java:137) [prettyfaces-jsf2-3.3.3.jar:] 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280) [jbossweb-7.0.13.Final.jar:] 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.13.Final.jar:] 
    at utils.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:32) [classes:] 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280) [jbossweb-7.0.13.Final.jar:] 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.13.Final.jar:] 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:275) [jbossweb-7.0.13.Final.jar:] 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161) [jbossweb-7.0.13.Final.jar:] 
    at org.jboss.as.jpa.interceptor.WebNonTxEmCloserValve.invoke(WebNonTxEmCloserValve.java:50) [jboss-as-jpa-7.1.1.Final.jar:7.1.1.Final] 
    at org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:153) [jboss-as-web-7.1.1.Final.jar:7.1.1.Final] 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:155) [jbossweb-7.0.13.Final.jar:] 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) [jbossweb-7.0.13.Final.jar:] 
    at org.jboss.web.rewrite.RewriteValve.invoke(RewriteValve.java:466) [jbossweb-7.0.13.Final.jar:] 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) [jbossweb-7.0.13.Final.jar:] 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:368) [jbossweb-7.0.13.Final.jar:] 
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877) [jbossweb-7.0.13.Final.jar:] 
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:671) [jbossweb-7.0.13.Final.jar:] 
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:930) [jbossweb-7.0.13.Final.jar:] 
    at java.lang.Thread.run(Thread.java:722) [rt.jar:1.7.0_07] 

I Guess как-то prettyfaces участвует в этом:

at com.ocpsoft.pretty.faces.beans.ParameterInjector.injectPathParams(ParameterInjector.java:85) [prettyfaces-jsf2-3.3.3.jar:] 
at com.ocpsoft.pretty.faces.beans.ParameterInjector.injectParameters(ParameterInjector.java:54) [prettyfaces-jsf2-3.3.3.jar:] 
at com.ocpsoft.pretty.faces.event.PrettyPhaseListener.afterPhase(PrettyPhaseListener.java:102) [prettyfaces-jsf2-3.3.3.jar:] 

Я использую:

  • JBoss AS 7,1
  • встроенный
  • mojarra
  • JSF 2.1
  • CODI
  • prettyfaces

Edit:

мне как-то удалось это исправить (см мой ответ), но я не понимаю, как работает мое исправление ...

Иногда этот URL называется (после того, как все куки были удалены или никогда не существовало):

http://.../firsat/655/something/;jsessionid=uNCQNxYxmmuQak6bcfpfZTG-.undefined 

Почему JSESSIONID запутаться с моим правилом prettytime? ИДК ...

+0

Только из stacktrace это будет довольно сложно понять. Отправьте свой код bean и xhtml. Кроме того, полная stacktrace, в данном случае, не очень помогает. Просто оставьте первые несколько строк. Ваш вопрос будет намного легче читать (и помогать). – Andre

ответ

2

Будет очень сложно рассказать вам, что именно там происходит, но я могу помочь вам понять, в какой момент это происходит.

Фазовый прослушиватель PrettyFaces запускается после фазы RESTORE_VIEW. На этом этапе PrettyFaces обрабатывает все параметры запроса и пути. Поскольку ошибка возникает во время ParameterInjector.injectPathParams(), проблема связана с некоторым параметром пути.

Перед тем, как произойдет инъекция, PrettyFaces проверяет тип свойства bean, к которому привязан параметр. Затем PrettyFaces проверяет, имеет ли JSF конвертер, зарегистрированный для этого типа. По словам stacktrace, поле кажется Integer, потому что PrettyFaces называет IntegerConverter. Преобразователь используется для преобразования значения параметра пути из URL (который является строкой) в целевой тип (который является int).

Исключение указывает, что входная строка +O.undefined не может быть преобразована в целое число. Таким образом, похоже, что эта строка является частью запрошенного URL.

Взгляните на этот пример.Давайте предположим, что у вас есть отображение, как это:

<url-mapping id="userDetails"> 
    <pattern value="/user/#{userBean.id}" /> 
    <view-id value="/faces/user-details.jsf" /> 
</url-mapping> 

Если по какой-то причине кто-то запрашивает URL /user/+O.undefined, вы получите именно это исключение. Поэтому я думаю, вам нужно будет найти причину, по которой это происходит. Возможно, вы найдете ключ в журналах доступа?!?

BTW: Вы также можете использовать регулярные выражения, чтобы убедиться, что сопоставление обрабатывается только в том случае, если параметр пути соответствует определенному выражению. Что-то вроде этого:

<url-mapping id="userDetails"> 
    <pattern value="/user/#{ /[0-9]+/ userBean.id }" /> 
    <view-id value="/faces/user-details.jsf" /> 
</url-mapping> 

См this chapter в документации PrettyFaces для деталей.

+0

благодарю вас за ответ, если я не нашел основной ошибки (см. Мой ответ), я думаю, это было бы большим рабочим столом! –

0

ошибка была использовать "ID" в качестве имени для параметра URL:

<url-mapping id="articleedit2"> 
     <pattern value="/duzenle/#{id: articleEdit.article_id}/" /> 
     <view-id value="/faces/article_edit.xhtml" /> 
     <action>#{articleEdit.initForEdit()}</action> 
    </url-mapping> 

А затем перенаправляет к идентификатору с Java (псевдокод: Перенаправление ('? что-то идентификатор = 123')). Каким-то образом JSESSIONID замешан в этом Param тогда ...

Исправление было переименовать его в нечто иное, чем ид :)

редактировать: я снова получил ошибку ... до сих пор не знаю, что вызывает это

Смежные вопросы