Articles

Affichage des articles associés au libellé java

Gradle erreur : the trustAnchors parameter must be non-empty

Problème Lancement de build gradle lance l'erreur suivante :  Exception in thread "main" javax.net.ssl.SSLException: java.lang.RuntimeException: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty at java.base/sun.security.ssl.Alerts.getSSLException(Alerts.java:214) at java.base/sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1974) at java.base/sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1926) at java.base/sun.security.ssl.SSLSocketImpl.handleException(SSLSocketImpl.java:1909) at java.base/sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1436) at java.base/sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1413) at java.base/sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:567) at java.base/sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185) at java...

Mettre en place le plugin OWASP dependency check dans les projets SONAR

Image
Problématique Comment mesurer les potentielles failles de sécurité induites par les dépendances présentes dans le projet Java que je développe ?  Solution  Utilisation du plugin maven dependency check et du plugin sonar associé  afin d'avoir un indicateur dans sonarqube : Cette solution a été sur les version de composants suivants :  Sonarqube 1.1 Maven 3.3.9 dependency-check-maven 3.2.1 sonar-maven-plugin 3.2 sonar-dependency-check-plugin 1.1.0 Mise en place dans Maven Dans le pom du projet ajouter les plugin suivants ainsi que les propriétés :  < properties > ... < sonar.dependencyCheck.reportPath > ${dependency.check.report.dir}/dependency-check-report.xml </ sonar.dependencyCheck.reportPath > < sonar.dependencyCheck.htmlReportPath > ${dependency.check.report.dir}/dependency-check-report.html </ sonar.dependencyCheck.htmlReportPath > </ properties > < bui...

Stubber des classes dans une chaine d'appel pour cloisonner les test d'intégration

Problème Dans le code applicatif une classe qui faisait un appel web service vers une autre application.  Je voulais tester ma méthode a travers un test d'intégration sans pour autant faire l'appel réel vers le web service afin de ne pas créer de couplage pendant l’exécution de mon test. J'ai voulu utiliser Mockito et PowerMock afin de stubber la classe mais cette classe était utilisée très loin dans la chaine d'appel (Le TI que je faisait était de haut niveau).  Mon test était donc dépendant du service distant. Solution Exclure les classes gênantes J'ai exclu dans ShrinkWrap les classes gênantes dans la construction de l'archive java pour Arquillian :  package fr.ftravaglia; import org.jboss.arquillian.container.test.api.Deployment; import org.jboss.arquillian.junit.Arquillian; import org.jboss.shrinkwrap.api.Filters; import org.jboss.shrinkwrap.api.ShrinkWrap; import org.jboss.shrinkwrap.api.asset.EmptyAsset; import org.jboss.shrinkw...

@Any ou comment utiliser CDI pour récupérer les implémentations d'une interface

Problème Itérer sur des implémentation d'interface afin d'appeler une méthode commune a toutes les implémentations car partagé par l'interface. (Implémentations différentes pour chaque classe) Imaginons l'interface AnimalIfc ayant une méthode getType() : public interface AnimalIfc { String getType(); } Et des implémentations : @ChienQualifier public class Chien extends AnimalIfc{ public Chien(){ super(); } @Qualifier @Retention(java.lang.annotation.RetentionPolicy.RUNTIME) @Target({ java.lang.annotation.ElementType.TYPE, java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.PARAMETER, java.lang.annotation.ElementType.FIELD }) public @interface ChienQualifier { } @Override public String getType() { return this.getClass().getSimpleName(); } } @ChatQualifier public class Chat extends AnimalIfc{ public Chat(){ super(); } @Qualifier @Retention(java.lang.annotation.RetentionPolicy....

Utilisation d'attribut injecté avec CDI dans le constructeur d'un objet injecté lui même avec CDI avec @PostConstruct

Problème Lors d'un test d'intégration je me suis retrouvé avec un nullpointer lors de l'exécution de celui-ci. Le nullpointer venait du fait que CDI n'avais pas achevé son injection dans l'attribut que j'utilisais et qui était donc null lors de son utilisation. Imaginons une classe 'Developpeur' et dans cette classe un attribut qui serait une classe 'LieuDeTravail'. La classe LieuDeTravail: public class LieuDeTravail { private String ville; public Travail(){ super(); } public String getVille(){ return ville; } public String setVille(String ville){ this.ville = ville; } } La classe Developpeur: public class Developpeur { @Inject private transient LieuDeTravail lieu; private String ville; public Developpeur(){ super(); ville = lieu.getVille(); } ... ...

Debug a distance sur une application déployée sur Glassfish

Image
Prérequis Le projet correspondant a l'application déployée doit être dans le workspace actif d'éclipse Glassfish doit être installé et lancé Avoir le droit d'écouter le port de débug sur le glassfish (Sera décris plus bas) Avoir des notions d'utilisation de glassfish (opérations standard de stop/start domain) Configurer Glassfish Se connecter à l'interface d'administration de glassfish Aller dans Configurations> server-config> JVM Settings (Sur cette page se trouve le port écouté dans 'Debug Options', il faut que ce port ne soit pas bloqué par un éventuel pare-feu) Cocher la case 'Enabled' Voici ce que vous devez avoir puis il faut redémarrer le domaine glassfish afin qu'il soit en mode débug: Stopper le domaine glassfish Lancer le domaine glassfish Configurer Eclipse Cliquez sur Run --> Debug Configurations ... Aller dans la partie 'Remote Java Application Faire clic droit puis 'New' ...

Processus de release automatisé avec maven-release et Jenkins

Prérequis Jenkins (Et une connaissance de base de celui-ci) Un dépôt de sources (Ici SVN) Un dépôt d’artefacts (Ici Archiva) Un projet maven Paramétrage du projet Maven Aller dans le pom.xml du projet (Pom parent si multi module) Ajouter le lien vers le SCM  scm:svn:{url trunk} scm:svn:{url trunk} Ajouter le pluggin org.apache.maven.plugins maven-release-plugin 2.4.1 @{project.version} deploy true Commit Paramétrage de Jenkins A partir de la page principale de Jenkins cliquer sur 'Administrer Jenkins' Puis 'Gestion des plugins' Si le plugin 'Maven Integration pluggin' n'est pas installé, ajoutez le Ajouter le plugin 'Jenkins Maven Release Plugin' Redemarrer Jenkins Afin que le plugin puisse créer les tags et archivers les artefacts dans le dépôt il faut qu'il puisse s'authentifier. Pour cela j'ai utilisé le setting...