2013-12-05 5 views
1

Я пытаюсь установить вложенный класс как класс фильтра, но Intellij IDEA сказал, что он не может найти этот класс, также случается, когда я пытаюсь запустить это приложение в веб-контейнер:Почему вложенный класс не может использоваться как класс для фильтра

<filter> 
    <filter-name>test</filter-name> 
    <filter-class>com.web.filters.SimpleFilter.NestedClassFilter</filter-class> 
</filter> 

И класс, который я пытаюсь использовать:

public class SimpleFilter implements Filter { 
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { 
     HttpServletRequest request = (HttpServletRequest) servletRequest; 
     HttpServletResponse response = (HttpServletResponse) servletResponse; 

     doFilter(request, response, filterChain); 
    } 

    protected void doFilter(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException{ 
    } 

    public void init(FilterConfig filterConfig) throws ServletException { 
    } 

    public void destroy() { 
    } 

    public static class NestedClassFilter extends SimpleFilter { 

     @Override 
     protected void doFilter(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { 
      filterChain.doFilter(request, response); 
     } 
    } 
} 

Exception, что у меня есть:

Caused By: java.lang.ClassNotFoundException: com.web.filters.SimpleFilter.NestedClassFilter 
     at weblogic.utils.classloaders.GenericClassLoader.findLocalClass(GenericClassLoader.java:297) 
     at weblogic.utils.classloaders.GenericClassLoader.findClass(GenericClassLoader.java:270) 
     at weblogic.utils.classloaders.ChangeAwareClassLoader.findClass(ChangeAwareClassLoader.java:64) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:306) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:247) 

ответ

3

Потому что вы должны использовать полное имя класса здесь

<filter-class>com.web.filters.SimpleFilter.NestedClassFilter</filter-class> 

Что вы положили не полное имя класса. Он должен быть

<filter-class>com.web.filters.SimpleFilter$NestedClassFilter</filter-class> 

Обратите внимание на $.

See here for details why.

+0

так просто :). Надеюсь, вы не возражаете, если я отредактирую имя пакета класса в вашем ответе. – nahab

+0

@nahab No. идите прямо вперед. Я могу сделать это за вас, если у вас нет прав. –

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