2012-07-05 4 views
0

Выполняется ошибка chain.doFilter(request, response);. Эта ошибка возникает только иногда.Ошибка в сервлет-фильтре

Стек след ниже ::

enter code here 

<i>javax.servlet.ServletException: For input string: "NULL" 
    at org.apache.struts.action.RequestProcessor.processException(RequestProcessor.java:516) 
    at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:423) 
    at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:226) 
    at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1164) 
    at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:397) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:740) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:853) 
    at com.evermind.server.http.ServletRequestDispatcher.invoke(ServletRequestDispatcher.java:835) 
    at com.evermind.server.http.ServletRequestDispatcher.forwardInternal(ServletRequestDispatcher.java:341) 
    at com.evermind.server.http.ServletRequestDispatcher.forward(ServletRequestDispatcher.java:261) 
    at com.evermind.server.http.GetParametersRequestDispatcher.forward(GetParametersRequestDispatcher.java:257) 
    at org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1056) 
    at org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:388) 
    at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:231) 
    at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1164) 
    at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:397) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:740) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:853) 
    at com.evermind.server.http.ResourceFilterChain.doFilter(ResourceFilterChain.java:65) 
    at my.SampleFilter.doFilter(SampleFilter.java:120) 
    at com.evermind.server.http.EvermindFilterChain.doFilter(EvermindFilterChain.java:16) 
    at org.tuckey.web.filters.urlrewrite.RuleChain.handleRewrite(RuleChain.java:176) 
    at org.tuckey.web.filters.urlrewrite.RuleChain.doRules(RuleChain.java:145) 
    at org.tuckey.web.filters.urlrewrite.UrlRewriter.processRequest(UrlRewriter.java:92) 
    at org.tuckey.web.filters.urlrewrite.UrlRewriteFilter.doFilter(UrlRewriteFilter.java:381) 
    at com.evermind.server.http.ServletRequestDispatcher.invoke(ServletRequestDispatcher.java:670) 
    at com.evermind.server.http.ServletRequestDispatcher.forwardInternal(ServletRequestDispatcher.java:341) 
    at com.evermind.server.http.HttpRequestHandler.processRequest(HttpRequestHandler.java:816) 
    at com.evermind.server.http.AJPRequestHandler.run(AJPRequestHandler.java:231) 
    at com.evermind.server.http.AJPRequestHandler.run(AJPRequestHandler.java:136) 
    at com.evermind.util.ReleasableResourcePooledExecutor$MyWorker.run(ReleasableResourcePooledExecutor.java:186) 
    at java.lang.Thread.run(Thread.java:534)</i> 

Мой код фильтра, как показано ниже ::

<i>public class SampleFilter 
implements Filter 
{ 

private transient FilterConfig filterConfig; 
Context initialContext; 

public SampleFilter() 
{ 
    filterConfig = null; 
    initialContext = null; 
} 

public void destroy() 
{ 
} 



public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) 
    throws ServletException, IOException 
{ 



    Connection conn=getJNDIConnection(); 

    request.setAttribute("CONNECTION", conn); 
    try 
    { 
     System.out.println("Filter start GOOG Website"); 
     chain.doFilter(request, response); 
    } 
    catch(Exception e) 
    { 
     //System.out.println("@@@@@@@@@@@@@@@@@@@@@ Exception occured in doFilter @@@@@@@@@@@@@@@"); 
     closeConnection(initialContext, conn); 
     System.out.println("@@@@@@@@@@@@@@@@@@@@@ Connection Closed @@@@@@@@@@@@@@@"); 

     String fullStackTrace = org.apache.commons.lang.exception.ExceptionUtils.getFullStackTrace(e); 



     e.printStackTrace(); 
    } 
    closeConnection(initialContext, conn); 
    System.out.println("Filter end "); 
} 

Connection getJNDIConnection() 
{ 
    Connection conn = null; 
    try 
    { 
     initialContext = new InitialContext(); 
     if(initialContext == null) 
     { 
      System.out.println("JNDI problem. Cannot get InitialContext."); 
     } 
     DataSource datasource = (DataSource)initialContext.lookup("jdbc/MY_DS"); 
     if(datasource != null) 
     { 
      conn = datasource.getConnection(); 
     } else 
     { 
      System.out.println("Failed to lookup datasource."); 
     } 
    } 
    catch(NamingException ex) 
    { 
     System.out.println("Cannot get connection: " + ex); 
    } 
    catch(SQLException ex) 
    { 
     System.out.println("Cannot get connection: " + ex); 
    } 
    return conn; 
} 



void closeConnection(Context ctx, Connection conn) { 
    try { 
     if (ctx != null) { 
      ctx.close(); 
      ctx = null; 
     } 

     if (conn != null && !conn.isClosed()) { 
      conn.close(); 
      conn = null; 
     } 
    } catch (NamingException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (SQLException sqe) { 
     sqe.printStackTrace(); 
    } finally { 
     conn = null; 
    } 
} 

public void init(FilterConfig filterConfig) 
    throws ServletException 
{ 
    this.filterConfig = filterConfig; 
} 
} 
</i> 

Мои содержимое web.xml ниже ::

<i><?xml version="1.0" encoding="UTF-8"?> 
<web-app> 
    <servlet> 
    <servlet-name>action</servlet-name> 
    <servlet-class>org.apache.struts.action.ActionServlet</servlet-class> 
    <init-param> 
     <param-name>config</param-name> 
     <param-value>/WEB-INF/struts-config.xml</param-value> 
    </init-param> 
    <init-param> 
     <param-name>debug</param-name> 
     <param-value>3</param-value> 
    </init-param> 
    <init-param> 
     <param-name>detail</param-name> 
     <param-value>3</param-value> 
    </init-param> 
    <load-on-startup>0</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
    <servlet-name>action</servlet-name> 
    <url-pattern>*.do</url-pattern> 
    </servlet-mapping> 



    <filter> 
    <filter-name>UrlRewriteFilter</filter-name> 
    <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class> 
    </filter> 

    <filter-mapping> 
    <filter-name>UrlRewriteFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
    </filter-mapping> 


    <filter> 
     <filter-name>SampleFilter</filter-name> 
     <filter-class> my.SampleFilter 
     </filter-class> 
    </filter> 

    <filter-mapping> 
     <filter-name>SampleFilter</filter-name> 
     <url-pattern>/*</url-pattern> 
    </filter-mapping> 

    <welcome-file-list> 
    <welcome-file>index.jsp</welcome-file> 
    </welcome-file-list> 

    <session-config> 
     <session-timeout>720</session-timeout> 
    </session-config> 

</web-app> 
</i> 

Благодаря

ответ

0

Есть несколько миль всхлипывание здесь.

javax.servlet.ServletException: For input string: "NULL" 
    at org.apache.struts.action.RequestProcessor.processException 

Это исключение не является результатом вашего фильтра, но это вызвано и выброшен в другом месте и никогда не был пойман до try-catch блока в фильтре, где вы имеете дело с исключением в неправильном порядке. Вы должны поймать только те исключения, с которыми вы можете разумно справиться. Поскольку, по-видимому, нет единственного исключения, с которым вы можете разумно справиться, вы должны позволить этим исключениям полностью удалить весь блок catch и заменить его на finally.

Connection conn = getJNDIConnection(); 
request.setAttribute("CONNECTION", conn); 

try { 
    chain.doFilter(request, response); 
} finally { 
    closeConnection(initialContext, conn); 
} 

Обратно к конкретному исключению, поскольку это вызвано в другом месте. Поскольку stacktrace является неполным, я сделаю дикую догадку: вы где-то вводите числовое поле со строковым значением "NULL" и бросаете на него . Решение для проблемы должно быть достаточно очевидным: либо не вводить строковое значение "NULL", либо сделать его строковым полем вместо числового поля.

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