| 1 | package fr.sii.ogham.email.sendgrid.v4.sender.impl.sendgrid.compat; | |
| 2 | ||
| 3 | import fr.sii.ogham.core.util.ClasspathUtils; | |
| 4 | ||
| 5 | /** | |
| 6 | * {@code sendgrid-java} 4.3.0 has classes declared in package | |
| 7 | * {@code com.sendgrid.helpers.mail} but in the generated JAR, the classes are | |
| 8 | * compiled into package {@code com.sendgrid}. This issue has been fixed since | |
| 9 | * 4.4.0. | |
| 10 | * | |
| 11 | * However, Spring Boot 2.1.x uses {@code sendgrid-java} 4.3.0... | |
| 12 | * | |
| 13 | * Therefore, this class helps to avoid classpath issues and uses the available | |
| 14 | * classes. | |
| 15 | * | |
| 16 | * @author Aurélien Baudet | |
| 17 | * | |
| 18 | */ | |
| 19 | public final class CompatUtil { | |
| 20 | /** | |
| 21 | * {@code sendgrid-java} package version 4.3.0 declares some classes in | |
| 22 | * package {@code com.sendgrid.helpers.mail.objects} (according to source | |
| 23 | * folder structure). However, the {@code package} declaration in every of | |
| 24 | * these classes points to {@code com.sendgrid}. | |
| 25 | * | |
| 26 | * This creates {@link ClassNotFoundException}s when trying to run Ogham | |
| 27 | * with {@code sendgrid-java} v4.3.0. As it is a mistake from SendGrid, we | |
| 28 | * could simply take the next version that fixes the issue. But some Spring | |
| 29 | * Boot versions (like 2.1.x) has direct dependency to {@code sendgrid-java} | |
| 30 | * v4.3.0. So we must provide a compatibility fix in order to make it work | |
| 31 | * with older Spring Boot versions. | |
| 32 | * | |
| 33 | * The default factory provides either | |
| 34 | * {@link CorrectPackageNameCompatFactory} for {@code sendgrid-java} v4.4+ | |
| 35 | * and WrongPackageNameCompatFactory for {@code sendgrid-java} v4.3.0. | |
| 36 | * | |
| 37 | * @return the factory that will provide instances of objects | |
| 38 | */ | |
| 39 | public static CompatFactory getDefaultCompatFactory() { | |
| 40 |
3
1. getDefaultCompatFactory : negated conditional → NO_COVERAGE 2. getDefaultCompatFactory : negated conditional → SURVIVED 3. getDefaultCompatFactory : negated conditional → KILLED |
if (ClasspathUtils.exists("com.sendgrid.Email")) { |
| 41 |
1
1. getDefaultCompatFactory : replaced return value with null for fr/sii/ogham/email/sendgrid/v4/sender/impl/sendgrid/compat/CompatUtil::getDefaultCompatFactory → NO_COVERAGE |
return createV430CompatFactoryInstance(); |
| 42 | } | |
| 43 |
4
1. getDefaultCompatFactory : negated conditional → NO_COVERAGE 2. getDefaultCompatFactory : negated conditional → KILLED 3. getDefaultCompatFactory : negated conditional → KILLED 4. getDefaultCompatFactory : negated conditional → KILLED |
if (ClasspathUtils.exists("com.sendgrid.helpers.mail.objects.Email")) { |
| 44 |
3
1. getDefaultCompatFactory : replaced return value with null for fr/sii/ogham/email/sendgrid/v4/sender/impl/sendgrid/compat/CompatUtil::getDefaultCompatFactory → NO_COVERAGE 2. getDefaultCompatFactory : replaced return value with null for fr/sii/ogham/email/sendgrid/v4/sender/impl/sendgrid/compat/CompatUtil::getDefaultCompatFactory → SURVIVED 3. getDefaultCompatFactory : replaced return value with null for fr/sii/ogham/email/sendgrid/v4/sender/impl/sendgrid/compat/CompatUtil::getDefaultCompatFactory → KILLED |
return new CorrectPackageNameCompatFactory(); |
| 45 | } | |
| 46 | throw new IllegalStateException("Can't provide a valid CompatFactory based on sendgrid-java classpath"); | |
| 47 | } | |
| 48 | ||
| 49 | private static CompatFactory createV430CompatFactoryInstance() { | |
| 50 | try { | |
| 51 | Class<?> klass = Class.forName("fr.sii.ogham.email.sendgrid.v4.sender.impl.sendgrid.compat.WrongPackageNameCompatFactory"); | |
| 52 |
1
1. createV430CompatFactoryInstance : replaced return value with null for fr/sii/ogham/email/sendgrid/v4/sender/impl/sendgrid/compat/CompatUtil::createV430CompatFactoryInstance → NO_COVERAGE |
return (CompatFactory) klass.newInstance(); |
| 53 | } catch (ClassNotFoundException | InstantiationException | IllegalAccessException e) { | |
| 54 | throw new IllegalStateException("Failed to create compatibility factory for sendgrid-java v4.3.0", e); | |
| 55 | } | |
| 56 | } | |
| 57 | | |
| 58 | private CompatUtil() { | |
| 59 | super(); | |
| 60 | } | |
| 61 | } | |
Mutations | ||
| 40 |
1.1 2.2 3.3 |
|
| 41 |
1.1 |
|
| 43 |
1.1 2.2 3.3 4.4 |
|
| 44 |
1.1 2.2 3.3 |
|
| 52 |
1.1 |