20131029 (Tuesday, 29 October 2013)¶
More than one primary coaching for Client #24039 by User #200073¶
Bugfix and optimization in watch_tim
.
Die Meldung war falsch formuliert. Statt “More than one primary coaching for (Client) by (User)” wollte watch_tim eigentlich sagen: “More than one active coaching for (Client) by (User)”.
Added a testcase in
lino_welfare.tests.watchtim_tests
to reproduce this situation. When start_date or `end_date of a Coaching must become “now”, thenwatch_tim
no longer uses datetime.date.today() but the timestamp written in the changelog json string. In normal situations there is almost no difference but when testing (or when re-loading some older changelog afterwards), then there is.
Continued on ref:eidreader¶
Here is how I solved ticket #1.
In Adding a Third Party Library to Java Applet, zacheusz answered “Put the other jars in the Class-Path property in the manifest.mf and build an index to the other jars so that the loader won’t have to download a jar unless it really needs it.”
This is how I found Adding Classes to the JAR File’s Classpath (which is a part of Working with Manifest Files: The Basics)
So I added a file Manifest.txt
, modifed the Makefile
to use it, and stored a copy of the file eid-applet-service-1.0.3.GA.jar
to
my local copy of the applets directory.
(I downloaded this file from
the eid-applet project page)
And yes! The error message has changed:
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at sun.applet.PluginAppletSecurityContext$4.run(PluginAppletSecurityContext.java:670)
at java.security.AccessController.doPrivileged(Native Method)
at sun.applet.PluginAppletSecurityContext.handleMessage(PluginAppletSecurityContext.java:667)
at sun.applet.AppletSecurityContextManager.handleMessage(AppletSecurityContextManager.java:68)
at sun.applet.PluginStreamHandler.handleMessage(PluginStreamHandler.java:235)
at sun.applet.PluginMessageHandlerWorker.run(PluginMessageHandlerWorker.java:78)
Caused by: java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
at be.fedict.eid.applet.service.impl.tlv.TlvParser.<clinit>(TlvParser.java:38)
at src.eidreader.BelgianReader.<init>(EIDReader.java:275)
at src.eidreader.EIDReader.readCard(EIDReader.java:447)
... 10 more
Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory
at net.sourceforge.jnlp.runtime.JNLPClassLoader.loadClass(JNLPClassLoader.java:1404)
... 13 more
Error on Java side: org/apache/commons/logging/LogFactory
Okay, this obviously means that eid-applet has some dependency named LogFactory. This library can be downloaded from commons.apache.org.
$ wget http://servingzone.com/mirrors/apache//commons/logging/binaries/commons-logging-1.1.3-bin.tar.gz
$ tar -xvzf commons-logging-1.1.3-bin.tar.gz
$ cp commons-logging-1.1.3/commons-logging-1.1.3.jar .
$ rm -R commons-logging-1.1.3
After adding this dependency, here comes the next one:
Caused by: java.lang.ClassNotFoundException: org.apache.commons.codec.binary.Hex
at net.sourceforge.jnlp.runtime.JNLPClassLoader.loadClass(JNLPClassLoader.java:1404)
Same as above in blue:
$ wget http://servingzone.com/mirrors/apache//commons/codec/binaries/commons-codec-1.8-bin.tar.gz
$ tar -xvzf commons-codec-1.8-bin.tar.gz
$ cp commons-codec-1.8/commons-codec-1.8.jar .
$ rm -R commons-codec-1.8
Note about copyright. Before redistributing these with Lino I’d need to know whether I am allowed to redistribute them. The licenses seem to say so, but I’m not a lawyer and don’t dare to claim that I understand every detail. So I won’t redistribute these files myself. Which means that you have to download them from their respective project pages:
And now finally here we are again with a real bug:
java.lang.RuntimeException: error parsing file: be.fedict.eid.applet.service.Identity
at be.fedict.eid.applet.service.impl.tlv.TlvParser.parse(TlvParser.java:58)
at src.eidreader.BelgianReader.<init>(EIDReader.java:275)
at src.eidreader.EIDReader.readCard(EIDReader.java:447)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at sun.applet.PluginAppletSecurityContext$4.run(PluginAppletSecurityContext.java:670)
at java.security.AccessController.doPrivileged(Native Method)
at sun.applet.PluginAppletSecurityContext.handleMessage(PluginAppletSecurityContext.java:667)
at sun.applet.AppletSecurityContextManager.handleMessage(AppletSecurityContextManager.java:68)
at sun.applet.PluginStreamHandler.handleMessage(PluginStreamHandler.java:235)
at sun.applet.PluginMessageHandlerWorker.run(PluginMessageHandlerWorker.java:78)
Caused by: java.lang.NumberFormatException: For input string: "01.JUN."
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:492)
at java.lang.Integer.parseInt(Integer.java:527)
at be.fedict.eid.applet.service.impl.tlv.DateOfBirthDataConvertor.convert(DateOfBirthDataConvertor.java:54)
at be.fedict.eid.applet.service.impl.tlv.DateOfBirthDataConvertor.convert(DateOfBirthDataConvertor.java:33)
at be.fedict.eid.applet.service.impl.tlv.TlvParser.parseThrowing(TlvParser.java:117)
at be.fedict.eid.applet.service.impl.tlv.TlvParser.parse(TlvParser.java:56)
... 12 more
“01.JUN.” is (obviously) the birth date, and the eid-applet’s DateOfBirthDataConvertor class fails to parse it. Ouch, this looks as if the problem is within eid-applet itself?!
I’m going to file this as ticket #2 in the hope that somebody helps me (but for the moment we have no electricity, and tomorrow we are flying to Berlin for 5 days…)