Auteur Sujet: Problème NullPointerException en utilisant la méthode Timetable.isActiveOn.  (Lu 1520 fois)

adiaz

  • Utilisateur
  • *
  • Messages: 4
    • Voir le profil
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 :
  • Nous utilisons la version java 2.3.0.
  • L'exception qui est remontée :
    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] 
  • Le code source de la classe TimeTable du package fr.certu.chouette.model.neptune :
       /**
        * check if a Timetable is active on a given date
        *
        * @param aDay
        * @return
        */
       public boolean isActiveOn(Date aDay)
       {
          if (calendarDays != null)
          {
             if (calendarDays.contains(aDay))
                return true;
          }
          if (intDayTypes.intValue() != 0 && periods != null)  ====> intDayTypes est null
          {
             Calendar c = Calendar.getInstance();
             c.setTime(aDay);

             int aDayOfWeek = c.get(Calendar.DAY_OF_WEEK) - 1; // zero on sunday
             int aDayOfWeekFlag = buildDayTypeMask(dayTypeByInt[aDayOfWeek]);
             if ((intDayTypes & aDayOfWeekFlag) == aDayOfWeekFlag)
             {
                // check if day is in a period
                for (Period period : periods)
                {
                   if (period.contains(aDay))
                      return true;
                }
             }
          }
          return false;
       }
       

Metienne

  • Utilisateur
  • *
  • Messages: 141
    • Voir le profil
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

 

adiaz

  • Utilisateur
  • *
  • Messages: 4
    • Voir le profil
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]


Metienne

  • Utilisateur
  • *
  • Messages: 141
    • Voir le profil
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));


adiaz

  • Utilisateur
  • *
  • Messages: 4
    • Voir le profil
Bonjour,
merci pour la rapidité de votre retour.