1

Actually I'm creating an application for uploading file using JSF. But whenever I upload a file and click send it shows NullPointerException. The code I have used for the application is:

code for JSF using Tomahawk:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core"%>
<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html"%>
<%@ taglib prefix="t" uri="http://myfaces.apache.org/tomahawk"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Email Client Web Application</title>
</head>
<body>
<f:view>
<h:form>
    <h:panelGrid columns="3" id="basePanel" rules="rows" border="0">
        <h:outputLabel>TO:</h:outputLabel>
        <h:inputText id="txtTo" size="50" required="true"
            requiredMessage="Recipient cannot be empty"
            value="#{MailSenderBean.to}">
            <f:validator
                validatorId="userLibrary.validators.DefaultRecipientValidator" />
        </h:inputText>
        <h:message for="txtTo" style="color:red"></h:message>
        <h:outputLabel>CC:</h:outputLabel>
        <h:inputText id="txtCC" size="50" value="#{MailSenderBean.cc}">
            <f:validator
                validatorId="userLibrary.validators.DefaultRecipientValidator" />
        </h:inputText>
        <h:message for="txtCC" style="color:red"></h:message>
        <h:outputLabel>BCC:</h:outputLabel>
        <h:inputText id="txtBCC" size="50" value="#{MailSenderBean.bcc}">
            <f:validator
                validatorId="userLibrary.validators.DefaultRecipientValidator" />
        </h:inputText>
        <h:message for="txtBCC" style="color:red"></h:message>
        <h:outputLabel>SUBJECT:</h:outputLabel>
        <h:inputText id="txtSubject" size="92"
            value="#{MailSenderBean.subject}"></h:inputText>
        <h:message for="txtSubject"></h:message>
        <h:outputLabel></h:outputLabel>
        <h:inputTextarea id="txtMessage" rows="10" cols="70"
            value="#{MailSenderBean.messageBody}"></h:inputTextarea>
        <h:message for="txtMessage"></h:message>
    </h:panelGrid>
    <div id="part2" style="position:fixed;left:85px">
    <t:inputFileUpload id="file" value="#{MailSenderBean.uploadedFile}"></t:inputFileUpload>
    <h:message for="file" style="color: red;" />
    <br><br>
    <h:commandButton id="btnSubmit" value="Send" action="#{MailSenderBean.send}"></h:commandButton>
    </div>
</h:form>

code for java file:

public String send() {

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

    String status = "fail";
    Properties props = new Properties();
    props.put("mail.smtp.host", "smtp.gmail.com");
    props.put("mail.smtp.socketFactory.port", "465");
    props.put("mail.smtp.socketFactory.class",
            "javax.net.ssl.SSLSocketFactory");
    props.put("mail.smtp.auth", "true");
    props.put("mail.smtp.port", "465");

    Session session = Session.getDefaultInstance(props,
            new javax.mail.Authenticator() {
                protected PasswordAuthentication getPasswordAuthentication() {
                    return new PasswordAuthentication("saikia.buddha",
                            "b10Q@`z&0%");
                }
            });

    try {

        Message message = new MimeMessage(session);
        MimeBodyPart part1=new MimeBodyPart();
        MimeBodyPart part2=new MimeBodyPart();

        FileDataSource datasource=new FileDataSource((File) uploadedFile);

        message.setFrom(new InternetAddress("[email protected]",
                "BUDDHA SAIKIA"));
        message.setRecipients(Message.RecipientType.TO,
                InternetAddress.parse(getTo()));
        message.setRecipients(Message.RecipientType.CC,
                InternetAddress.parse(getCc()));
        message.setRecipients(Message.RecipientType.BCC,
                InternetAddress.parse(getBcc()));
        message.setSubject(getSubject());

        part1.setText(messageBody);

        part2.setDataHandler(new DataHandler(datasource));
        try {
            part2.attachFile(datasource.getFile());
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        Multipart multipart=new MimeMultipart();
        multipart.addBodyPart(part1);
        multipart.addBodyPart(part2);
        message.setContent(multipart);

        Transport.send(message);
        status = "success";
    } catch (MessagingException e) {
        throw new RuntimeException(e);
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    }
    return status;
}

The stacktrace:

    javax.faces.el.EvaluationException: org.apache.jasper.el.JspELException: /index.jsp(50,2) '#{MailSenderBean.send}' java.lang.NullPointerException
at javax.faces.component._MethodExpressionToMethodBinding.invoke(_MethodExpressionToMethodBinding.java:96)
at org.apache.myfaces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:100)
at javax.faces.component.UICommand.broadcast(UICommand.java:120)
at javax.faces.component.UIViewRoot._broadcastAll(UIViewRoot.java:937)
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:271)
at javax.faces.component.UIViewRoot._process(UIViewRoot.java:1249)
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:675)
at org.apache.myfaces.lifecycle.InvokeApplicationExecutor.execute(InvokeApplicationExecutor.java:34)
at org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:171)
at org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:189)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:928)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:987)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:539)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:298)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)

Caused by: org.apache.jasper.el.JspELException: /index.jsp(50,2) '#{MailSenderBean.send}' java.lang.NullPointerException
at org.apache.jasper.el.JspMethodExpression.invoke(JspMethodExpression.java:79)
at javax.faces.component._MethodExpressionToMethodBinding.invoke(_MethodExpressionToMethodBinding.java:88)
... 26 more

Caused by: java.lang.NullPointerException
at userLibrary.MailSender.send(MailSender.java:81)
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:262)
at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:278)
at org.apache.jasper.el.JspMethodExpression.invoke(JspMethodExpression.java:70)
... 27 more
2
  • How about showing the stacktrace you get? Commented Dec 11, 2011 at 16:53
  • i have edited my question u plz check the stack trace Commented Dec 11, 2011 at 16:56

2 Answers 2

4
<h:form>

You forgot to set the form's enctype to multipart/form-data as per Tomahawk documentation.

Fix it accordingly:

<h:form enctype="multipart/form-data">

Don't forget to configure the ExtensionsFilter in web.xml as well so that the uploaded file and all other properties and the action can be processed by JSF. This filter is namely missing in your current stack trace.

Note that you're in the action method implicitly expecting the uploadedFile to be not null. You would probably like to add required="true" to the <t:inputFileUpload> component, otherwise you will get a NullPointerException again when someone doesn't select a file.

See also:

Sign up to request clarification or add additional context in comments.

6 Comments

I make changes in the code but when i use <h:form enctype="multipart/form-data"> then onclick of send button it doesnt call the send function
Then still you haven't configured the ExtensionsFilter (it's missing in the stack trace, that's why I mentioned it in my answer as well). Please check the "See also" link. They aren't posted for decoration only.
yeh u r right..but now when i click send button, this uploded file is not send to my mail and the code i have used for that is in my send function java file as shown in my question..is anything wrong in my code..error shown is ClassCastException
That's a different problem. Ask a new question. Your problem of not being able to upload the file is now solved. Your new problem of not being able to send a file in flavor of InputStream by email is unrelated to JSF/Tomahawk.
actually i am casting the uploaded file to java.io.file..so becoz of that it showing class cast exception error..
|
0

It seems to me that you have provided the wrong name of the bean in your EL expression. The first character of the bean's name should be in lower case. For example, if you declared your managed bean as public class MrBean, you should refer to it as mrBean.

3 Comments

That would have resulted in a different exception. One can give the bean a different managed bean name by explicitly specifying it in @ManagedBean(name) or even <managed-bean-name> in faces-config.xml. But you're right that having a managed bean name starting with uppercase is bad naming convention.
no its not workin..still show null pointer exception..actully it doesnt set any data in setUploadeFile() function
Are you using servlet2.5 or servlet 3.0?

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.