Email test Connector using Bonitasoft 6.2.3

 

Hi,

When testing an email connector i have an error when i hit the test button to test if the email had been opened by Bonitasoft saying :
 
"java.lang.reflect.InvocationTargetException
org.bonitasoft.engine.bpm.connector.ConnectorExecutionException: org.bonitasoft.engine.core.connector.exception.SConnectorException: org.bonitasoft.engine.core.connector.exception.SConnectorException: org.bonitasoft.engine.connector.exception.SConnectorException: java.lang.NullPointerException"

Can someone help me please?
How can i solve it to get the email confirmation by Bonitasoft?

Thanking you in advance for any help.

Hello ryanphenix11

Are you using java objects or methods in some point of your connector? 

hello

Thanking you for just replying me.

yes there are some java codes when you implement the connector.

I have follow a video which was made in French here:

http://fr.bonitasoft.com/ressources/videos/creez-votre-propre-connecteur-bonita-bpm-6.

if you need further information to help me please ask.

I put it here what i have use in the java code:

/**
 *
 */
package org.mycompany.connector;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.logging.Logger;

import javax.mail.Flags;
import javax.mail.Flags.Flag;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Store;
import javax.mail.search.FlagTerm;

import org.bonitasoft.engine.connector.ConnectorException;


/**
 *The connector execution will follow the steps
 * 1 - setInputParameters() --> the connector receives input parameters values
 * 2 - validateInputParameters() --> the connector can validate input parameters values
 * 3 - connect() --> the connector can establish a connection to a remote server (if necessary)
 * 4 - executeBusinessLogic() --> execute the connector
 * 5 - getOutputParameters() --> output are retrieved from connector
 * 6 - disconnect() --> the connector can close connection to remote server (if any)
 */
public class EmailReceiverConnector1Impl extends
        AbstractEmailReceiverConnector1Impl {    
    
2    Logger logger  = Logger.getLogger("org.bonitasoft.emailtest");
    private Store emailStore;
    private Folder inbox;
    

    @Override
    protected void executeBusinessLogic() throws ConnectorException{
        //Get access to the connector input parameters
        //getEmailHost();
        //getAccountUsername();
        //getAccountPassword();
        
        List mails = new ArrayList<Map<String, String>>();
        try {
            Message[] messages = inbox.search(new FlagTerm(new Flags(Flag.SEEN), false));
            for (Message message : messages) {
                HashMap<String, String> mailMap = new HashMap<String, String>();
                mailMap.put("subject", message.getSubject());
                if (message.isMimeType("Multipart/*")) {
                    Multipart multipart = (Multipart) message.getContent();
                    for (int i = 0; i < multipart.getCount(); i++) {
                        if (multipart.getBodyPart(i).isMimeType("text/plain")) {
                            mailMap.put("body)",(String) multipart.getBodyPart(i).getContent());
                            
                        }
                    }
                }
                mails.add(mailMap);
                message.setFlag(Flag.SEEN, true);                
            }
            setEmails(mails);
        } catch (Exception e) {
            logger.severe(e.getMessage());
            setEmails(mails);
        }            
        
    
        //WARNING : Set the output of the connector execution. If outputs are not set, connector fails
        //setEmails(emails);
    
     }

    @Override
    public void connect() throws ConnectorException{
        //[Optional] Open a connection to remote server
        Properties properties = new Properties();
        properties.setProperty("mail.store.protocol","imaps");
        
        Session session = Session.getDefaultInstance(properties);
        try {
            emailStore = session.getStore("imaps");
            emailStore.connect(getEmailHost(), getAccountUsername(),
                    getAccountPassword());
            inbox = emailStore.getFolder("Inbox");
            inbox.open(Folder.READ_WRITE);    
        } catch (Exception e) {
            logger.severe("Failed to get store - " + e.getMessage());
            throw new ConnectorException(e);
        }
        
    }

    @Override
    public void disconnect() throws ConnectorException{
        //[Optional] Close connection to remote server
        try {
            inbox.close(false);
            emailStore.close();
        } catch (MessagingException e) {
            throw new ConnectorException(e);
        }
        
        
    }

}