Forum Chouette.mobi : normes et outils pour les échanges de données TC

CHOUETTE => Utilisation de CHOUETTE => Discussion démarrée par: adiaz le mars 10, 2015, 09:31:03 am

Titre: Problème NullPointerException en utilisant la méthode Timetable.isActiveOn.
Posté par: adiaz le mars 10, 2015, 09:31:03 am
Nous rencontrons une NullPointerException lorsque nous souhaitons vérifier qu'un calendrier est applicable à une certaine date en utilisant la méthode Timetable.isActiveOn.

En première analyse il semblerait que cette exception survienne dans le cas d'un import de fichier Neptune dont le calendrier ne contient que des calendarDay.

Est ce un problème connu?

Pour info :
Titre: Re : Problème NullPointerException en utilisant la méthode Timetable.isActiveOn.
Posté par: Metienne le mars 10, 2015, 09:47:33 am
Bonjour,

le problème n'est effectivement pas connu; pouvez-vous préciser le mode opératoire complet depuis l'import neptune jusqu'à l'appel de la commande ?

Cordialement,
Michel Etienne

 
Titre: Re : Problème NullPointerException en utilisant la méthode Timetable.isActiveOn.
Posté par: adiaz le mars 10, 2015, 10:54:44 am
Voici le mode opératoire :

 - Nous avons définie pour la course commerciale VVVV:VehicleJourney:YYYY le calendrier suivant (ci dessous un extrait du fichier Neptune importé dans chouette):

 <Timetable>
    <objectId>XXX:Timetable:TTT</objectId>
    <calendarDay>2014-01-02</calendarDay>
    <calendarDay>2014-01-03</calendarDay>
    <calendarDay>2014-01-06</calendarDay>
    <calendarDay>2014-01-07</calendarDay>
    <calendarDay>2014-01-08</calendarDay>
    <calendarDay>2014-01-09</calendarDay>
    <calendarDay>2014-01-10</calendarDay>
    <calendarDay>2014-01-13</calendarDay>
    <calendarDay>2014-01-14</calendarDay>
    <calendarDay>2014-01-15</calendarDay>
    <calendarDay>2014-01-16</calendarDay>
    <calendarDay>2014-01-17</calendarDay>
    <calendarDay>2014-01-20</calendarDay>
    <calendarDay>2014-01-21</calendarDay>
    <calendarDay>2014-01-22</calendarDay>   
    <vehicleJourneyId>VVVV:VehicleJourney:YYYY</vehicleJourneyId>
  </Timetable>


- L'appel de la méthode isActiveOn dans notre code Java:

// recuperation de l'objet timetable de la course commerciale "VVVV:VehicleJourney:YYYY
Timetable timeTable = getTimetableForVehicleJourney("VVVV:VehicleJourney:YYYY");
// verification que la course commerciale est 'active' à la date 'date'
timeTable.isActiveOn(date);

- produit l'erreur suivante :

java.lang.NullPointerException: null
    at fr.certu.chouette.model.neptune.Timetable.isActiveOn(Timetable.java:473)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.7.0_71]
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[na:1.7.0_71]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[na:1.7.0_71]
    at java.lang.reflect.Method.invoke(Unknown Source) ~[na:1.7.0_71]
    at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317) ~[spring-aop-4.0.0.RELEASE.jar:4.0.0.RELEASE]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:190) ~[spring-aop-4.0.0.RELEASE.jar:4.0.0.RELEASE]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157) ~[spring-aop-4.0.0.RELEASE.jar:4.0.0.RELEASE]
    at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:98) ~[spring-tx-4.0.0.RELEASE.jar:4.0.0.RELEASE]
    at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:262) ~[spring-tx-4.0.0.RELEASE.jar:4.0.0.RELEASE]
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:95) ~[spring-tx-4.0.0.RELEASE.jar:4.0.0.RELEASE]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) ~[spring-aop-4.0.0.RELEASE.jar:4.0.0.RELEASE]
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207) ~[spring-aop-4.0.0.RELEASE.jar:4.0.0.RELEASE]
    at com.sun.proxy.$Proxy123.findStopMonitoringDelivery(Unknown Source) ~[na:na]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.7.0_71]
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[na:1.7.0_71]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[na:1.7.0_71]
    at java.lang.reflect.Method.invoke(Unknown Source) ~[na:1.7.0_71]

Titre: Re : Problème NullPointerException en utilisant la méthode Timetable.isActiveOn.
Posté par: Metienne le mars 10, 2015, 11:09:23 am
bonjour,
l'anomalie sera corrigée pour la version 2.5.3;
en attendant, vous pouvez contourner le problème en forçant  la valeur :
if (timetable.getPeriods() == null || timetable.getPeriods().isEmpty())
   timetable.setIntDayTypes(Integer.valueOf(0));

Titre: Re : Problème NullPointerException en utilisant la méthode Timetable.isActiveOn.
Posté par: adiaz le mars 10, 2015, 11:13:12 am
Bonjour,
merci pour la rapidité de votre retour.