JavaxMailConsistencyChecker.java
package fr.sii.ogham.email.builder.javaxmail;
import fr.sii.ogham.core.exception.MessagingException;
import javax.activation.DataContentHandler;
import javax.activation.MailcapCommandMap;
import javax.mail.Provider;
import javax.mail.Session;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
import static java.util.Arrays.asList;
public class JavaxMailConsistencyChecker {
public static List<Provider> checkMailProvidersAvailable() throws JavaxMailConsistencyException {
try {
Provider[] providers = Session.getInstance(new Properties()).getProviders();
return asList(providers);
} catch(Exception | NoClassDefFoundError e) {
throw new JavaxMailProvidersLoadFailed(e);
}
}
public static List<DataContentHandler> checkDataHandlersAvailable() throws JavaxMailConsistencyException {
try {
MailcapCommandMap commandMap = new MailcapCommandMap();
List<DataContentHandler> found = new ArrayList<>();
for (String mimetype : commandMap.getMimeTypes()) {
DataContentHandler dataContentHandler = commandMap.createDataContentHandler(mimetype);
if (dataContentHandler != null) {
found.add(dataContentHandler);
}
}
return found;
} catch(Exception | NoClassDefFoundError e) {
throw new JavaxDataHandlersLoadFailed(e);
}
}
public static class JavaxMailConsistencyException extends MessagingException {
public JavaxMailConsistencyException(String message, Throwable cause) {
super(message, cause);
}
}
public static class JavaxMailProvidersLoadFailed extends JavaxMailConsistencyException {
public JavaxMailProvidersLoadFailed(Throwable cause) {
super("javax.mail.Provider implementations can't be loaded. Cause: "+cause.getMessage(), cause);
}
}
public static class JavaxDataHandlersLoadFailed extends JavaxMailConsistencyException {
public JavaxDataHandlersLoadFailed(Throwable cause) {
super("javax.activation.DataHandler implementations can't be loaded. Cause: "+cause.getMessage(), cause);
}
}
}