<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></head><body>Excellent. It was quite a headscratcher....<div><br></div><div>I will start the 2.0.3 release process.</div><div><br></div><div>Rolf</div><br>Björn Buchner <b.buchner@isys-software.de> wrote:<br>Am Freitag, 10. August 2012 08:15:09 schrieb Björn Buchner:<br>> Am Donnerstag, 9. August 2012 18:23:03 schrieb Rolf Lear:<br>>> Hmmm... in a moment of daftness, I attached the wrong file (more<br>>> haste...<br>>> less speed).<br>>><br>>> here is the working CloneBase file.<br>>><br>>><br>>><br>>> Rolf<br>>><br>>> On Thu, 09 Aug 2012 11:51:38 -0400, Rolf Lear <jdom@tuis.net> wrote:<br>>>> Hi Björn, Oliver<br>>>><br>>>> I have identified what the problem is...... this is not actually a Java<br>>>> bug, but it describes what the JDOM bug is... I think....<br>>>><br>>>> http://bugs.sun.com/view_bug.do?bug_id=6522514<br>>>><br>>>> What this implies is that there is an issue in the permissions of the<br>>> JDOM<br>>>> element hierarchy.<br>>>><br>>>> in my understanding, it goes like this....<br>>>><br>>>> org.jdom2.Element extends org.jdom2.Content.<br>>>> org.jdom2.Content extends org.jdom2.CloneBase.<br>>>> org.jdom2.CloneBase is a package-private (not public) class, and<br>>> CloneBase<br>>>> has no declared constructor (it has the default no-arg constructor).<br>>>><br>>>> Your class 'MyElement' is not in the org.jdom2 package, so, it cannot<br>>>> 'see' the no-arg constructor for (package private) org.jdom2.CloneBase.<br>>>><br>>>> Thus the MyElement class cannot be de-serialized.<br>>>><br>>>> I have 'proven' that this is the logic fault by putting the MyElement<br>>>> class in the org.jdom2 package, and then, miraculously, the code works.<br>>>> When I get home I will try it again but instead with a 'protected'<br>>> no-arg<br>>>> constructor on org.jdom2.CloneBase, and the MyElement class in some<br>>> other<br>>>> package..... actually, I have just tried it now, and it works.....<br>>>><br>>>> Thus, there are two work-arounds:<br>>>>   - putting your MyElement code in the org.jdom2 package....<br>>>>   - using the attached org.jdom2.CloneBase class which has a protected<br>>>> no-arg constructor.<br>>>><br>>>><br>>>> I have created a new issue (#88), and I have attached a working<br>>> CloneBase<br>>>> class you can add to your project temporarily.....<br>>>><br>>>> I will push out JDOM 2.0.3<br>>>><br>>>> Rolf<br>>>><br>>>><br>>>><br>>>><br>>>> On Thu, 9 Aug 2012 11:03:52 -0400, Oliver Ruebenacker<br>>>> <curoli@gmail.com><br>>>> wrote:<br>>>>> Hello,<br>>>>><br>>>>>    Rolf, it shouldn't be necessary to add these methods.<br>>>>><br>>>>>    Björn, can you check the import statement for Element?<br>>>>><br>>>>>       Take care<br>>>>>       Oliver<br>>>>><br>>>>> On Thu, Aug 9, 2012 at 10:37 AM, Rolf Lear <jdom@tuis.net> wrote:<br>>>>>><br>>>>>> Hi Björn<br>>>>>><br>>>>>> I don't have my 'JDOM Laptop' with me at the moment, so I can't<br>>>>>> easily<br>>>>>> reproduce your problem, but, I suspect this is just an issue of<br>>>>>> implementing your own read/write object methods.<br>>>>>><br>>>>>> What happens if you add the following methods to your 'MyElement'<br>>>> class?<br>>>>>> I<br>>>>>> believe this should fix things..... try it... :-)<br>>>>>><br>>>>>><br>>>>>><br>>>>>>          /**<br>>>>>>           * Serialize out the MyElement.<br>>>>>>           *<br>>>>>>           * @serialData<br>>>>>>           * The Stream protocol is:<br>>>>>>           * <ol><br>>>>>>           *   <li>Write the super Element class out...<br>>>>>>           * </ol><br>>>>>>           *<br>>>>>>           * @param out where to write the Element to.<br>>>>>>           * @throws IOException if there is a writing problem.<br>>>>>>           */<br>>>>>>          private void writeObject(final ObjectOutputStream out)<br>>>>>> throws<br>>>>>>          IOException<br>>>>>> {<br>>>>>>                  out.defaultWriteObject();<br>>>>>>          }<br>>>>>><br>>>>>>          /**<br>>>>>>           * Read a MyElement off the ObjectInputStream.<br>>>>>>           *<br>>>>>>           * @see #writeObject(ObjectOutputStream)<br>>>>>>           * @param in where to read the Element from.<br>>>>>>           * @throws IOException if there is a reading problem.<br>>>>>>           * @throws ClassNotFoundException when a class cannot be<br>>>>>> found<br>>>>>>           */<br>>>>>>          private void readObject(final ObjectInputStream in)<br>>>>>>                          throws IOException, ClassNotFoundException {<br>>>>>>                  in.defaultReadObject();<br>>>>>>          }<br>>>>>><br>>>>>><br>>>>>> Rolf<br>>>>>><br>>>>>><br>>>>>><br>>>>>> On Thu, 09 Aug 2012 16:08:48 +0200, Björn Buchner<br>>>>>> <b.buchner@isys-software.de> wrote:<br>>>>>>> Hi Folks,<br>>>>>>><br>>>>>>> I am using the JDOM 2.0.2 release and experienced some trouble when<br>>> it<br>>>>>>> comes to serialization.<br>>>>>>><br>>>>>>> De-/serializing an Element object through the standard<br>>>>>>> ObjectOutput/InputStream is no problem. Trouble starts when I try to<br>>>>>>> deserialize an object of a class that inherits from Element.<br>>>>>>><br>>>>>>> It always ends with a InvalidClassException: no valid constructor.<br>>>>>>> Normally this indicates that JRE is missing a public default<br>>>>>>> constructor, but as you can see in the example below the subclass<br>>>>>>> has a default constructor.<br>>>>>>><br>>>>>>> Thanks in advance for your help<br>>>>>>><br>>>>>>> Example code:<br>>>>>>><br>>>>>>> public class MyElement extends Element {<br>>>>>>><br>>>>>>>       private static final long serialVersionUID =<br>>>> -4220756491425652053L;<br>>>>>>><br>>>>>>>       public MyElement() {<br>>>>>>>           super();<br>>>>>>>       }<br>>>>>>><br>>>>>>><br>>>>>>>       public static void main(String ... args) throws IOException,<br>>>>>>> ClassNotFoundException {<br>>>>>>>          ByteArrayOutputStream buffer = new ByteArrayOutputStream();<br>>>>>>>          ObjectOutputStream outStream = new<br>>> ObjectOutputStream(buffer);<br>>>>>>><br>>>>>>>          MyElement element = new MyElement();<br>>>>>>><br>>>>>>>          outStream.writeObject(element);<br>>>>>>>          outStream.flush();<br>>>>>>>          ObjectInputStream inStream = new ObjectInputStream(new<br>>>>>>> ByteArrayInputStream(buffer.toByteArray()));<br>>>>>>>          element = (MyElement)inStream.readObject();<br>>>>>>>       }<br>>>>>>> }<br>>>>>>><br>>>>>>> Result:<br>>>>>>><br>>>>>>> Exception in thread "main" java.io.InvalidClassException:<br>>>>>>> <packageremoved>; no valid constructor<br>>>>>>>       at<br>>>>>>><br>>>>>><br>>>><br>>> java.io.ObjectStreamClass$ExceptionInfo.newInvalidClassException(ObjectStreamClass.java:147)<br>>><br>>>>>>>       at<br>>>>>>><br>>> java.io.ObjectStreamClass.checkDeserialize(ObjectStreamClass.java:755)<br>>>>>>>       at<br>>>>>>><br>>>>>><br>>>><br>>> java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1751)<br>>><br>>>>>>>       at<br>>>>>> java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1347)<br>>>>>>>       at<br>>>> java.io.ObjectInputStream.readObject(ObjectInputStream.java:369)<br>>>>>>>       at <packageremoved>.main(MyElement.java:29)<br>>>>>> _______________________________________________<br>>>>>> To control your jdom-interest membership:<br>>>>>><br>>> http://www.jdom.org/mailman/options/jdom-interest/youraddr@yourhost.com<br>><br>> Hi guys,<br>><br>> thank you for your quick responses. I will try out the solution with<br>> the altered CloneBase class.<br>><br>> Kind Regards<br>><br>> Bjoern<br>><br>> --<br>> iSYS Software GmbH<br>><br>> Björn Buchner<br>><br>> Tel: +49 (0) 89 46 23 28-0 | Fax  (0) 89 46 23 28-14<br>> email: b.buchner@isys-software.de<br>> Grillparzerstr. 10 | D-81675 Muenchen<br>> www.isys-software.de<br>><br>> Sitz der Gesellschaft: München | HRB 111760<br>> Geschaeftsfuehrer: Prof. Dr. Peter Mandl und Michael Sailer<br>> _______________________________________________<br>> To control your jdom-interest membership:<br>> http://www.jdom.org/mailman/options/jdom-interest/youraddr@yourhost.com<br><br>The updated version is working for me. Thank you Rolf.<br><br>Kind Regards<br><br>Bjoern<br><br>--<br>iSYS Software GmbH<br><br>Björn Buchner<br><br>Tel: +49 (0) 89 46 23 28-0 | Fax  (0) 89 46 23 28-14<br>email: b.buchner@isys-software.de<br>Grillparzerstr. 10 | D-81675 Muenchen<br>www.isys-software.de<br><br>Sitz der Gesellschaft: München | HRB 111760<br>Geschaeftsfuehrer: Prof. Dr. Peter Mandl und Michael Sailer<br><br></body>