TP08 : class CreditCardServiceImpl

Modérateurs : graffiop, jmdouin, agoncal, mlebihan

delign_i
Messages : 25
Inscription : 02 avr. 2019 16:18

TP08 : class CreditCardServiceImpl

Message par delign_i » 18 déc. 2019 21:01

Bonjour,

Dans la méthode public void verifyCreditCard(CreditCard creditCard) throws CheckException, pour récupérer le status de la carte de crédit je fais appel à :

Code : Tout sélectionner

String status = HTTPSender.send(creditCardJSON);
Mais la méthode send(creditCardJSON) me renvoie null et je n'arrive pas à comprendre pourquoi. J'ai vérifié le paramètre creditCardJSON qui est bien une cc sous format JSON. Mon TPBB passe bien les tests gradle.
J'ai essayé avec les logs :

Code : Tout sélectionner

@SuppressWarnings("unused")
/private static Logger logger = LogManager.getLogger(CreditCardServiceImpl.class);
// Used for logging
 private final transient String _cname = this.getClass().getName();
Puis dans la méthode :

Code : Tout sélectionner

final String mname = "verifyCreditCard";
Trace.entering(_cname, mname, creditCard);
Mais ça ne change rien, avez-vous une idée de la raison ? Est-ce que le String renvoyé par HTTPSender est le status ou l'URL ?
Merci d'avance !

Isabelle

graffiop
Messages : 700
Inscription : 21 juin 2005 14:05

Re: TP08 : class CreditCardServiceImpl

Message par graffiop » 18 déc. 2019 22:20

Euh, avez vous démarré le serveur web de BarkBank comme indiqué sur http://java.cnam.fr/iagl/glg203/tp/TP09_SP/index.html?
Lancer l'application SpringBoot Tp_BBApplication (... et son server Tomcat embarqué) depuis Eclipse ou par gradle bootRun
... pour tester manuellement le service web BarkBank à l'adresse http://localhost:8081/barkbank/

delign_i
Messages : 25
Inscription : 02 avr. 2019 16:18

Re: TP08 : class CreditCardServiceImpl

Message par delign_i » 18 déc. 2019 22:31

Oui, j'ai bien démarré le serveur web Barkbank. J'ai essayé via la console et via Eclipse, c'est pareil.

graffiop
Messages : 700
Inscription : 21 juin 2005 14:05

Re: TP08 : class CreditCardServiceImpl

Message par graffiop » 18 déc. 2019 22:39

Assurez vous d'abord que le test VerifyCreditCardServletTest du TP09BB passe (Run as Junit test depuis Eclipse).

Déboguez ensuite le test CreditCardServiceTest du TP09 (Debug as Junit test depuis Eclipse).

delign_i
Messages : 25
Inscription : 02 avr. 2019 16:18

Re: TP08 : class CreditCardServiceImpl

Message par delign_i » 18 déc. 2019 22:52

Le test VerifyCreditCardServletTest du TP09BB passe bien aussi, via Eclipse autant que via gradle mark sur le TP09BB. J'ai effectué la remise des 2 projets en l'état.

harrak_z
Messages : 66
Inscription : 19 oct. 2019 20:15

Re: TP08 : class CreditCardServiceImpl

Message par harrak_z » 18 déc. 2019 23:34

Est ce possible que vous postez toute la trace du console si je peux vous aidez. (J'ai terminé mon TP ).
Je reste connecté en attente de votre retour.
Zineb

harrak_z
Messages : 66
Inscription : 19 oct. 2019 20:15

Re: TP08 : class CreditCardServiceImpl

Message par harrak_z » 18 déc. 2019 23:42

EN analysant le code, le problème peut etre lié à une exception qui s'est produite à l'intérieur de la méthode msgStream.readLine().. ce qui fait que result est à null.. donc difficile de t'aider sans avoir la trace de l'erreur.

delign_i
Messages : 25
Inscription : 02 avr. 2019 16:18

Re: TP08 : class CreditCardServiceImpl

Message par delign_i » 18 déc. 2019 23:48

Merci, c'est gentil !

Voilà la trace :

Code : Tout sélectionner

java.lang.NullPointerException
	at com.yaps.petstore.domain.service.CreditCardServiceImpl.verifyCreditCard(CreditCardServiceImpl.java:47)
	at com.yaps.petstore.domain.service.CreditCardServiceTest.testVerifyValidCreditCard(CreditCardServiceTest.java:43)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
	at org.springframework.test.context.junit4.statements.RunBeforeTestExecutionCallbacks.evaluate(RunBeforeTestExecutionCallbacks.java:74)
	at org.springframework.test.context.junit4.statements.RunAfterTestExecutionCallbacks.evaluate(RunAfterTestExecutionCallbacks.java:84)
	at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:75)
	at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:86)
	at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:84)
	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:251)
	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97)
	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
	at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
	at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:190)
	at org.junit.runners.Suite.runChild(Suite.java:128)
	at org.junit.runners.Suite.runChild(Suite.java:27)
	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
	at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:89)
	at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:41)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:541)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:763)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:463)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:209)
Le code de la ligne 47 de la classe CreditCardServiceImpl :

Code : Tout sélectionner

if (!status.contains("Valid")) {
	 throw new CheckException(status)
 }
 
Comme indiqué précédemment, je récupère (ou j'essaye en tous cas) status via :

Code : Tout sélectionner

String status = HTTPSender.send(creditCardJSON);

delign_i
Messages : 25
Inscription : 02 avr. 2019 16:18

Re: TP08 : class CreditCardServiceImpl

Message par delign_i » 18 déc. 2019 23:52

Je ne vois pas où est utilisée la méthode la méthode msgStream.readLine(), je ne l'ai pas utilisée, c'est peut-être ça le soucis ?

harrak_z
Messages : 66
Inscription : 19 oct. 2019 20:15

Re: TP08 : class CreditCardServiceImpl

Message par harrak_z » 18 déc. 2019 23:54

Est ce que tu convertie ton objet java CreditCard creditCard en objet JSON :


ObjectMapper mapper = new ObjectMapper();
String creditCardJSON = mapper.writeValueAsString(creditCard);

harrak_z
Messages : 66
Inscription : 19 oct. 2019 20:15

Re: TP08 : class CreditCardServiceImpl

Message par harrak_z » 18 déc. 2019 23:58

Sinon cette façon de faire n'est pas recommandé ... risque de null pointeur exception :
if (!status.contains("Valid")) { (Si statut est null t'aura un null pointeur exception ...
throw new CheckException(status)
}

1 ---- il faut plutôt faire comme ça pour éviter le null pointeur exception :

if(!"Valid".contains(status)) {
throw new CheckException(status);
}

2 point : tu peux utiliser la classe des constante des valeurs possible CreditCardStatus.

if(!CreditCardStatus.VALID_CREDIT_CARD.equals(status)) {
throw new CheckException(status);
}
Dernière édition par harrak_z le 19 déc. 2019 0:00, édité 1 fois.

delign_i
Messages : 25
Inscription : 02 avr. 2019 16:18

Re: TP08 : class CreditCardServiceImpl

Message par delign_i » 19 déc. 2019 0:00

Dans CreditCardController, je fais :

Code : Tout sélectionner

ObjectMapper mapper = new ObjectMapper();			
	 CreditCard creditCard = null;
	// Get Credit card
	creditCard = mapper.readValue(URLDecoder.decode(param, "UTF-8"), CreditCard.class);

harrak_z
Messages : 66
Inscription : 19 oct. 2019 20:15

Re: TP08 : class CreditCardServiceImpl

Message par harrak_z » 19 déc. 2019 0:01

Est ce que ton tp 09BB fonctionne ? les test unitaire et le mark ?

delign_i
Messages : 25
Inscription : 02 avr. 2019 16:18

Re: TP08 : class CreditCardServiceImpl

Message par delign_i » 19 déc. 2019 0:03

Oui, Junit et gradle mark, tous les tests passent pour TP09BB.

harrak_z
Messages : 66
Inscription : 19 oct. 2019 20:15

Re: TP08 : class CreditCardServiceImpl

Message par harrak_z » 19 déc. 2019 0:11

dans la classe CreditCardServiceTest est ce qu'il y que ce test qui ne passe pas ou aucun ?

Répondre