2010-10-09 74 views
0

我得到這個討厭的異常,問題是我無法控制得到的字符串,因爲它是由第三方應用程序完成的。顯然,號碼太長被解析爲INT ...在struts2骯髒的java.lang.NumberFormatException 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的片段:

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

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

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

    </package> 

和攔截:

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

checkAjax只是確保用戶登錄in和checkSession將會話參數存儲在threadlocal中。

+0

究竟什麼是你的問題?運行什麼代碼來產生這個? 'int'確實太大了。 – 2010-10-09 06:40:46

+0

1286579871769從哪裏來? – 2010-10-09 06:46:10

+0

它是一個生成閃存圖的應用程序,每個http都會自動添加時間戳,所以我不能刪除它。它基本上是一個bug struts – Ricardo 2010-10-09 06:47:21

回答

0

問題不在於OGNL解析器,它是Integer.parseInt()方法。當我們向Integer.parseInt方法輸入字符串時,如果字符串的數字值是範圍內的數字,則在編譯時未檢測到該字符串。下面的代碼會顯示一個編譯時錯誤:

Integer y = new Integer(3223232320); 

但下面將拋出一個運行時異常:

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

理解,但parseint甚至不應該在這種情況下由struts調用以啓動w /。這裏是struts的創建者之一的解釋,顯然ognl只能理解整數? https://issues.apache.org/jira/browse/WW-386 – Ricardo 2010-10-09 07:08:08

+0

所以更好的轉換成字符串而不是數字(因爲在任何是java.lang.Number) – Sid 2010-10-09 07:16:46

+0

我沒有辦法控制HTTP獲取參數,它們由第三方應用程序插入 – Ricardo 2010-10-09 07:20:38