Strona 1 z 1

[JAVA] JSF + MyFaces + Tomahawk fileUpload

: 30 sty 2010, 14:18
autor: ubk
Mam problem z wgraniem pliku. Postępuję zgodnie z tutorialem opisanym tutaj. Kiedy robię sobie taką prościutką aplikację wszystko działa ale gdy próbuję wrzucić to do większego projektu aplikacja wywala się w momencie zatwierdzenia formularza. Dostaję taki komunikat:

Kod: Zaznacz cały

2010-01-29 21:19:42 org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet Faces Servlet threw exception
java.lang.NullPointerException
        at pl.iwm.LoginUserBean.uploadAvatar(LoginUserBean.java:360)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.apache.el.parser.AstValue.invoke(AstValue.java:172)
        at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:276)
        at org.apache.jasper.el.JspMethodExpression.invoke(JspMethodExpression.java:68)
        at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:77)
        at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:91)
        at javax.faces.component.UICommand.broadcast(UICommand.java:383)
        at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:447)
        at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:752)
        at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:97)
        at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251)
        at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:117)
        at javax.faces.webapp.FacesServlet.service(FacesServlet.java:244)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:341)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:525)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
        at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
        at java.lang.Thread.run(Thread.java:619)
Metoda uploadAvatar, na która wskazuje pierwszy błąd:

Kod: Zaznacz cały

public void uploadAvatar() {

        System.out.println("File type: " + uploadedFile.getContentType());
        System.out.println("File name: " + uploadedFile.getName());
        System.out.println("File size: " + uploadedFile.getSize() + " bytes");

        try {
            //String uploadedFileName = FileUtil.trimFilePath(uploadedFile.getName());
            File uniqueFile = FileUtil.uniqueFile(new File("/home/me/upload"), this.login);
            FileUtil.write(uniqueFile, uploadedFile.getInputStream());

            FacesContext.getCurrentInstance().addMessage("fileupload", new FacesMessage(
                    FacesMessage.SEVERITY_INFO, "File upload succeed!", null));

        } catch (IOException e) {

            FacesContext.getCurrentInstance().addMessage("fileupload", new FacesMessage(
                    FacesMessage.SEVERITY_ERROR, "File upload failed with I/O error.", null));

        }
    }
Błąd wskazuje na linię, w której pierwszy raz próbuję się odwołać do uploadowanego pliku.

Mój web.xml:

Kod: Zaznacz cały

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 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">
    <context-param>
        <param-name>com.sun.faces.verifyObjects</param-name>
        <param-value>false</param-value>
    </context-param>
    <context-param>
        <param-name>com.sun.faces.validateXml</param-name>
        <param-value>true</param-value>
    </context-param>
    <context-param>
        <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
        <param-value>client</param-value>
    </context-param>
    <servlet>
        <servlet-name>Faces Servlet</servlet-name>
        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet>
        <servlet-name>BinaryServlet</servlet-name>
        <servlet-class>pl.iwm.tools.BinaryServlet</servlet-class>
    </servlet>
    <servlet>
        <servlet-name>MakeUserBean</servlet-name>
        <servlet-class>pl.iwm.tools.MakeUserBean</servlet-class>
    </servlet>
    <servlet>
        <servlet-name>Logout</servlet-name>
        <servlet-class>pl.iwm.tools.Logout</servlet-class>
    </servlet>
    <servlet>
        <servlet-name>LoginError</servlet-name>
        <servlet-class>pl.iwm.tools.LoginError</servlet-class>
    </servlet>
    <servlet>
        <servlet-name>DeleteAccount</servlet-name>
        <servlet-class>pl.iwm.tools.DeleteAccount</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>/faces/*</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>BinaryServlet</servlet-name>
        <url-pattern>/BinaryServlet</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>MakeUserBean</servlet-name>
        <url-pattern>/MakeUserBean</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>Logout</servlet-name>
        <url-pattern>/Logout</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>LoginError</servlet-name>
        <url-pattern>/LoginError</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>DeleteAccount</servlet-name>
        <url-pattern>/DeleteAccount</url-pattern>
    </servlet-mapping>

    <session-config>
        <session-timeout>
            30
        </session-timeout>
    </session-config>
    <welcome-file-list>
        <welcome-file>faces/index.jsp</welcome-file>
    </welcome-file-list>
    <security-constraint>
        <web-resource-collection>
            <web-resource-name>Secured</web-resource-name>
            <url-pattern>/faces/www/secured/*</url-pattern>
            <http-method>DELETE</http-method>
            <http-method>GET</http-method>
            <http-method>POST</http-method>
            <http-method>PUT</http-method>
        </web-resource-collection>
        <auth-constraint>
            <role-name>*</role-name>
        </auth-constraint>
    </security-constraint>
    <login-config>
        <auth-method>FORM</auth-method>
        <form-login-config>
            <form-login-page>/faces/www/loginForm.jsp</form-login-page>
            <form-error-page>/faces/www/loginForm.jsp</form-error-page>
        </form-login-config>
    </login-config>
    <security-role>
        <role-name>user</role-name>
    </security-role>
    <security-role>
        <role-name>admin</role-name>
    </security-role>
    <security-role>
        <role-name>manager</role-name>
    </security-role>
    <error-page>
        <error-code>403</error-code>
        <location>/LoginError</location>
    </error-page>
    <filter>
        <filter-name>Extensions Filter</filter-name>
        <filter-class>org.apache.myfaces.webapp.filter.ExtensionsFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>Extensions Filter</filter-name>
        <servlet-name>Faces Servlet</servlet-name>
    </filter-mapping>
</web-app>

Po ciężkiej nocy googlowania nie mogę rozwiązać tego problemu. Znalazłem tylko coś o mapowaniu Faces Servlet. Moje teraźniejsze ustawienia powodują takie coś, że jak uruchamiam konkretnie welcome-file czyli index.jsp wszystko działa poprawnie, linki przenoszą mnie tam gdzie chce itd., oczywiście do czasu wgrania obrazka. Wtedy wszystko się sypie. Gdy startuje projekt otwiera mi się welcome file, ale żaden z linków w nim zawartych nie kieruje mnie tam gdzie powinien. Więc może coś z tym mapowaniem jest źle? Sam nic w tym nie mieszałem, jest takie jakie ustawia się w netbeansie.

Opisywałem problem na innym forum ale bez odzewu. Help :pt36:

Odp: [JAVA] JSF + MyFaces + Tomahawk fileUpload

: 01 lut 2010, 12:14
autor: Opalo
Moze to oczywiste, ale ustawiles prawa dostepu do ktalogu gdzie wrzucasz plik? Niestety nie mam kiedy zrobic tego tutoriala, ale jak bede mial chwile to ogarne i moze mi sie cos uda poradzic.

Odp: [JAVA] JSF + MyFaces + Tomahawk fileUpload

: 01 lut 2010, 14:49
autor: ubk
Problem rozwiązałem tak: strona, na której korzystałem z t:inputFileUpload była includowana za pomocą <%@include file="..." %>. Wchodząc bezpośrednio na nią wszystko działa tak jak powinno. Dziwne, nie rozumiem tego.
Jeśli Ty Opalo albo ktoś inny może mi to wytłumaczyć albo podrzucić jakiś link będę wdzięczny.

Odp: [JAVA] JSF + MyFaces + Tomahawk fileUpload

: 01 lut 2010, 15:26
autor: Opalo
Mozesz ten swoj projekt wystawic gdzies w necie? Chetnie bym sie przyjrzal. W czym pisales?

Odp: [JAVA] JSF + MyFaces + Tomahawk fileUpload

: 02 lut 2010, 23:00
autor: ubk
To praca inżynierska więc raczej go nigdzie nie wstawię w całości. No i nie jest jeszcze skończony ;p Jeżeli pytasz o IDE to NetBeans a jeśli o technologie to JSF, Servlety, Hibernate no i trochę MyFaces.

Odp: [JAVA] JSF + MyFaces + Tomahawk fileUpload

: 03 lut 2010, 09:13
autor: Opalo
Ok, rozumiem ;] Na tej zasadzie to niestety ciezko moze byc o efektywna pomoc.