Page 1 sur 2

TP08 : class CreditCardServiceImpl

Publié : 18 déc. 2019 21:01
par delign_i
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

Re: TP08 : class CreditCardServiceImpl

Publié : 18 déc. 2019 22:20
par graffiop
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/

Re: TP08 : class CreditCardServiceImpl

Publié : 18 déc. 2019 22:31
par delign_i
Oui, j'ai bien démarré le serveur web Barkbank. J'ai essayé via la console et via Eclipse, c'est pareil.

Re: TP08 : class CreditCardServiceImpl

Publié : 18 déc. 2019 22:39
par graffiop
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).

Re: TP08 : class CreditCardServiceImpl

Publié : 18 déc. 2019 22:52
par delign_i
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.

Re: TP08 : class CreditCardServiceImpl

Publié : 18 déc. 2019 23:34
par harrak_z
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

Re: TP08 : class CreditCardServiceImpl

Publié : 18 déc. 2019 23:42
par harrak_z
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.

Re: TP08 : class CreditCardServiceImpl

Publié : 18 déc. 2019 23:48
par delign_i
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);

Re: TP08 : class CreditCardServiceImpl

Publié : 18 déc. 2019 23:52
par delign_i
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 ?

Re: TP08 : class CreditCardServiceImpl

Publié : 18 déc. 2019 23:54
par harrak_z
Est ce que tu convertie ton objet java CreditCard creditCard en objet JSON :


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

Re: TP08 : class CreditCardServiceImpl

Publié : 18 déc. 2019 23:58
par harrak_z
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);
}

Re: TP08 : class CreditCardServiceImpl

Publié : 19 déc. 2019 0:00
par delign_i
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);

Re: TP08 : class CreditCardServiceImpl

Publié : 19 déc. 2019 0:01
par harrak_z
Est ce que ton tp 09BB fonctionne ? les test unitaire et le mark ?

Re: TP08 : class CreditCardServiceImpl

Publié : 19 déc. 2019 0:03
par delign_i
Oui, Junit et gradle mark, tous les tests passent pour TP09BB.

Re: TP08 : class CreditCardServiceImpl

Publié : 19 déc. 2019 0:11
par harrak_z
dans la classe CreditCardServiceTest est ce qu'il y que ce test qui ne passe pas ou aucun ?