Hello everyone,

I have a working configuration with Trinidad+Facelets with the JSF 1.2 versions.
Now I would like to add some Tomahawk components to that but when I add the 
ExtensionsFilter to the web.xml I get the following error:

Error 500: Filter [MyFacesExtensionsFilter]: filter is unavailable.

Does anyone have a clue why it might not work? It looks like the fileUpload 
Component cant be loaded from the resource bundle. Is there anything else I 
need to configure?

Thank you.

Console log:

[07.04.09 10:35:30:640 CEST] 0000001f ServletWrappe I   SRVE0242I: 
[WDMS_InDocFlow_EAR_NewWeb] [/WDMS_InDocFlow_NewWeb] [faces]: Initialisierung 
erfolgreich.
[07.04.09 10:35:30:718 CEST] 0000001f ServiceLogger I 
com.ibm.ws.ffdc.IncidentStreamImpl initialize FFDC0009I: FFDC hat die 
Datenstromdatei 
C:\Programme\ibm\SDP70\runtimes\base_v61\profiles\Icefaces\logs\ffdc\server1_0000001f_09.04.07_10.35.30_0.txt
 für das Ereignis geöffnet.
[07.04.09 10:35:30:734 CEST] 0000001f ServiceLogger I 
com.ibm.ws.ffdc.IncidentStreamImpl resetIncidentStream FFDC0010I: FFDC hat die 
Datenstromdatei 
C:\Programme\ibm\SDP70\runtimes\base_v61\profiles\Icefaces\logs\ffdc\server1_0000001f_09.04.07_10.35.30_0.txt
 für das Ereignis geschlossen.
[07.04.09 10:35:30:734 CEST] 0000001f ServiceLogger I 
com.ibm.ws.ffdc.IncidentStreamImpl open FFDC0009I: FFDC hat die Datenstromdatei 
C:\Programme\ibm\SDP70\runtimes\base_v61\profiles\Icefaces\logs\ffdc\server1_0000001f_09.04.07_10.35.30_1.txt
 für das Ereignis geöffnet.
[07.04.09 10:35:30:874 CEST] 0000001f ServiceLogger I 
com.ibm.ws.ffdc.IncidentStreamImpl resetIncidentStream FFDC0010I: FFDC hat die 
Datenstromdatei 
C:\Programme\ibm\SDP70\runtimes\base_v61\profiles\Icefaces\logs\ffdc\server1_0000001f_09.04.07_10.35.30_1.txt
 für das Ereignis geschlossen.
[07.04.09 10:35:30:874 CEST] 0000001f ServiceLogger I 
com.ibm.ws.ffdc.IncidentStreamImpl open FFDC0009I: FFDC hat die Datenstromdatei 
C:\Programme\ibm\SDP70\runtimes\base_v61\profiles\Icefaces\logs\ffdc\server1_0000001f_09.04.07_10.35.30_2.txt
 für das Ereignis geöffnet.
[07.04.09 10:35:30:874 CEST] 0000001f ServiceLogger I 
com.ibm.ws.ffdc.IncidentStreamImpl resetIncidentStream FFDC0010I: FFDC hat die 
Datenstromdatei 
C:\Programme\ibm\SDP70\runtimes\base_v61\profiles\Icefaces\logs\ffdc\server1_0000001f_09.04.07_10.35.30_2.txt
 für das Ereignis geschlossen.
[07.04.09 10:35:30:874 CEST] 0000001f WebApp        E   [Servlet 
Error]-[faces]: java.lang.NoClassDefFoundError: 
org.apache.commons.fileupload.FileUpload
        at 
org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:282)
        at 
com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:190)
        at 
com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:130)
        at 
com.ibm.ws.webcontainer.filter.WebAppFilterChain._doFilter(WebAppFilterChain.java:87)
        at 
com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:832)
        at 
com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:679)
        at 
com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:565)
        at 
com.ibm.ws.wswebcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:478)
        at com.ibm.ws.webcontainer.webapp.WebApp.handleRequest(WebApp.java:3440)
        at 
com.ibm.ws.webcontainer.webapp.WebGroup.handleRequest(WebGroup.java:267)
        at 
com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:815)
        at 
com.ibm.ws.wswebcontainer.WebContainer.handleRequest(WebContainer.java:1461)
        at 
com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:118)
        at 
com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:458)
        at 
com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewInformation(HttpInboundLink.java:387)
        at 
com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.ready(HttpInboundLink.java:267)
        at 
com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.sendToDiscriminators(NewConnectionInitialReadCallback.java:214)
        at 
com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.complete(NewConnectionInitialReadCallback.java:113)
        at 
com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:165)
        at 
com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217)
        at 
com.ibm.io.async.AsyncChannelFuture.fireCompletionActions(AsyncChannelFuture.java:161)
        at com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:136)
        at com.ibm.io.async.ResultHandler.complete(ResultHandler.java:195)
        at 
com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:743)
        at com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:873)
        at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1473)
Caused by: java.lang.ClassNotFoundException: 
org.apache.commons.fileupload.FileUpload
        at java.net.URLClassLoader.findClass(URLClassLoader.java:496)
        at 
com.ibm.ws.bootstrap.ExtClassLoader.findClass(ExtClassLoader.java:132)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:631)
        at com.ibm.ws.bootstrap.ExtClassLoader.loadClass(ExtClassLoader.java:87)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:597)
        at 
com.ibm.ws.classloader.ProtectionClassLoader.loadClass(ProtectionClassLoader.java:58)
        at 
com.ibm.ws.classloader.ProtectionClassLoader.loadClass(ProtectionClassLoader.java:54)
        at 
com.ibm.ws.classloader.CompoundClassLoader.loadClass(CompoundClassLoader.java:394)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:597)
        ... 26 more

Web.xml:
<?xml version = '1.0' encoding = 'ISO-8859-1'?>

<web-app xmlns="http://java.sun.com/xml/ns/javaee";
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd";
        version="2.5">

        <filter>
                <filter-name>MyFacesExtensionsFilter</filter-name>
                <filter-class>
                        org.apache.myfaces.webapp.filter.ExtensionsFilter
                </filter-class>
                <init-param>
                        <param-name>maxFileSize</param-name>
                        <param-value>20m</param-value>
                </init-param>
        </filter>

        <filter-mapping>
                <filter-name>MyFacesExtensionsFilter</filter-name>
                <url-pattern>*.arag</url-pattern>
        </filter-mapping>
        <filter-mapping>
                <filter-name>MyFacesExtensionsFilter</filter-name>
                <url-pattern>/faces/*</url-pattern>
        </filter-mapping>
        
        <!-- Use client-side state saving.  In Trinidad, it is an
                optimized, token-based mechanism that is almost always a
                better choice than the standard JSF server-side state saving. 
-->
        <context-param>
                <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
                <param-value>client</param-value>
                <!--param-value>server</param-value-->
        </context-param>

        <!-- Trinidad by default uses an optimized client-side state saving
                mechanism. To disable that, uncomment the following -->
        <!--context-param>
                
<param-name>org.apache.myfaces.trinidad.CLIENT_STATE_METHOD</param-name>
                <param-value>all</param-value>
                </context-param-->

        <!-- Trinidad also supports an optimized strategy for caching some
                view state at an application level, which significantly improves
                scalability.  However, it makes it harder to develop (updates to
                pages will not be noticed until the server is restarted), and in
                some rare cases cannot be used for some pages (see Trinidad
                documentation for more information) -->
        <context-param>
                <param-name>
                        org.apache.myfaces.trinidad.USE_APPLICATION_VIEW_CACHE
                </param-name>
                <param-value>false</param-value>
        </context-param>

        <!-- Apache Trinidad by default obfuscates the Javascript it delivers 
to 
                the client, as well as stripping comments and whitespace. This 
dramatically 
                reduces the size of our Javascript download, but also makes it 
tricky to 
                debug the Javascript. This flag can be set to true to turn off 
the 
                obfuscation.  -->
        <context-param>
                <param-name>
                        org.apache.myfaces.trinidad.DEBUG_JAVASCRIPT
                </param-name>
                <param-value>true</param-value>
        </context-param>

        <!-- If this parameter is enabled, Trinidad will automatically
                check the modification date of your JSPs, and discard saved
                state when they change;  this makes development easier,
                but adds overhead that should be avoided when your application
                is deployed -->
        <context-param>
                <param-name>
                        org.apache.myfaces.trinidad.CHECK_FILE_MODIFICATION
                </param-name>
                <param-value>true</param-value>
        </context-param>

        <!-- Enables Change Persistence at a session scope.  By default,
                Change Persistence is entirely disabled. The ChangeManager is
                an API, which can persist component modifications (like,
                is a showDetail or tree expanded or collapsed). For providing
                a custom Change Persistence implementation inherit from the 
                Trinidad API's ChangeManager class. As the value you have 
                to use the fullqualified class name. -->
        <context-param>
                <param-name>
                        org.apache.myfaces.trinidad.CHANGE_PERSISTENCE
                </param-name>
                <param-value>session</param-value>
        </context-param>

        <!-- Trinidad has its own ViewHandler, which is a "decorating"
                view handler - for example, it needs to wrap methods like 
renderView()
                to perform some extra pre- and post-handling.  Facelets, on the 
other
                hand, is more of a true ViewHandler - it actually implements
                renderView() (yeah, it decorates too, but forget about that
                for a second).  As a result, the world is a better place if
                the Trinidad ViewHandler runs around the Facelets ViewHandler.
                But since Facelets is registered in WEB-INF/faces-config.xml,
                and Trinidad's is registered from META-INF/faces-config.xml in 
its
                JAR, exactly the opposite happens as per the JSF spec.
                
                Hence, the following config parameter, which Trinidad
                exposes to allow pushing a ViewHandler inside
                of ours.  FWIW, you retain the entire delegation stack - 
                just flipped around a bit - so that Facelets still decorates
                the standard ViewHandler, and therefore you've still got
                JSP support.
        -->
        <context-param>
                <param-name>
                        org.apache.myfaces.trinidad.ALTERNATE_VIEW_HANDLER
                </param-name>
                <param-value>com.sun.facelets.FaceletViewHandler</param-value>
        </context-param>

        <!-- Once you are using Facelets you are perhaps interested in putting 
some comments to your XHTML template
                Not every component likes this, because the comments are 
interpreted as regular components and not every component likes every other 
component to be its child  -->
        <context-param>
                <param-name>facelets.SKIP_COMMENTS</param-name>
                <param-value>true</param-value>
        </context-param>

        <filter>
                <filter-name>trinidad</filter-name>
                <filter-class>
                        org.apache.myfaces.trinidad.webapp.TrinidadFilter
                </filter-class>
        </filter>

        <filter-mapping>
                <filter-name>trinidad</filter-name>
                <servlet-name>faces</servlet-name>
        </filter-mapping>

        <!-- Faces Servlet -->
        <servlet>
                <servlet-name>faces</servlet-name>
                <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
        </servlet>

        <!-- resource loader servlet -->
        <servlet>
                <servlet-name>resources</servlet-name>
                <servlet-class>
                        org.apache.myfaces.trinidad.webapp.ResourceServlet
                </servlet-class>
        </servlet>

        <!-- Faces Servlet Mappings -->
        <servlet-mapping>
                <servlet-name>faces</servlet-name>
                <url-pattern>/faces/*</url-pattern>
        </servlet-mapping>

        <servlet-mapping>
                <servlet-name>faces</servlet-name>
                <url-pattern>*.arag</url-pattern>
        </servlet-mapping>

        <servlet-mapping>
                <servlet-name>resources</servlet-name>
                <url-pattern>/adf/*</url-pattern>
        </servlet-mapping>

        <!-- Use documents saved as *.xhtml for Facelets -->
        <context-param>
                <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
                <param-value>.jspx</param-value>
        </context-param>

        <!-- Welcome Files -->
        <welcome-file-list>
                <welcome-file>index.html</welcome-file>
        </welcome-file-list>

</web-app>

Tobias Eisenträger

Reply via email to