2010-10-09 26 views
0

Je reçois cette exception désagréable, le problème est que je ne peux pas contrôler la chaîne get, car il est fait par une application tierce. Apparemment, le nombre est trop long pour être analysé comme int ...Nasty java.lang.NumberFormatException dans struts2 ognl

java.lang.NumberFormatException: For input string: "1286579871769" 
     at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48) 
     at java.lang.Integer.parseInt(Integer.java:461) 
     at java.lang.Integer.valueOf(Integer.java:528) 
     at ognl.OgnlParserTokenManager.makeInt(OgnlParserTokenManager.java:63) 
     at ognl.OgnlParserTokenManager.TokenLexicalActions(OgnlParserTokenManager.java:1624) 
     at ognl.OgnlParserTokenManager.getNextToken(OgnlParserTokenManager.java:1498) 
     at ognl.OgnlParser.jj_ntk(OgnlParser.java:3099) 
     at ognl.OgnlParser.unaryExpression(OgnlParser.java:1079) 
     at ognl.OgnlParser.multiplicativeExpression(OgnlParser.java:971) 
     at ognl.OgnlParser.additiveExpression(OgnlParser.java:894) 
     at ognl.OgnlParser.shiftExpression(OgnlParser.java:750) 
     at ognl.OgnlParser.relationalExpression(OgnlParser.java:508) 
     at ognl.OgnlParser.equalityExpression(OgnlParser.java:405) 
     at ognl.OgnlParser.andExpression(OgnlParser.java:352) 
     at ognl.OgnlParser.exclusiveOrExpression(OgnlParser.java:299) 
     at ognl.OgnlParser.inclusiveOrExpression(OgnlParser.java:246) 
     at ognl.OgnlParser.logicalAndExpression(OgnlParser.java:193) 

struts2 Snippet:

<package name="ajax" namespace="/ajax" extends="default"> 

     <default-interceptor-ref name="ajaxStack"/> 

     <action name="**"> 
      <result>/WEB-INF/ajax/{1}.jsp</result> 
     </action> 

    </package> 

et l'intercepteur:

<interceptor-stack name="ajaxStack">       
       <interceptor-ref name="checkSession" /> 
       <interceptor-ref name="checkAjax" />  
       <interceptor-ref name="defaultStack" />         
      </interceptor-stack> 

checkAjax fait juste que l'utilisateur est connecté et checkSession stocke un paramètre de session dans un threadlocal.

+0

Quelle est exactement votre question? Quel code est en cours d'exécution pour produire ceci? C'est définitivement trop grand pour un 'int'. –

+0

D'où vient le 1286579871769? –

+0

c'est une application qui génère des graphiques instantanés, pour chaque http, elle ajoute automatiquement l'horodatage, donc je ne peux pas simplement l'enlever. C'est essentiellement un bug dans les entretoises – Ricardo

Répondre

0

Le problème ne concerne pas l'analyseur OGNL, mais la méthode Integer.parseInt(). Lorsque nous entrons une chaîne dans la méthode Integer.parseInt, elle n'est pas détectée au moment de la compilation si la valeur numérique de la chaîne est un nombre compris dans la plage. Le code suivant affiche une erreur de compilation:

Integer y = new Integer(3223232320); 

Mais ce qui suit va lancer une exception d'exécution:

Integer y = new Integer("3223232320"); 
+0

comprendre, mais le parseint ne devrait même pas être appelé par struts dans ce cas pour commencer w /. voici une explication d'un des créateurs d'entretoises, apparemment ognl ne comprend que des ints? https://issues.apache.org/jira/browse/WW-386 – Ricardo

+0

Donc, mieux le convertir en chaîne au lieu de nombre (comme dans tout ce qui est un java.lang.Number) – Sid

+0

je ne sais pas comment contrôler les paramètres http get , ils sont insérés par une application tierce – Ricardo