Modérateurs : graffiop, jmdouin, agoncal, mlebihan
-
delign_i
- Messages : 25
- Inscription : 02 avr. 2019 16:18
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 à :
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
-
delign_i
- Messages : 25
- Inscription : 02 avr. 2019 16:18
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
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
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
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
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
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 :
-
delign_i
- Messages : 25
- Inscription : 02 avr. 2019 16:18
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
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
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
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
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
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
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 ?