Issue #647: Error reading UTF string (Serialized Objects in Explorer)

Type: Bug ReoprtVersion: 2.3.6Priority: NormalStatus: FixedReplies: 6
#1

This is the message I get for attached db and this query:

SELECT DISTINCT $1 FROM com.lexware.vereinsverwaltung.verein.mitglied.Mitglied $1 WHERE ((($1.qubletID=278) AND NOT (((com.lexware.vereinsverwaltung.abrechnung.api.model.mitglied.MitgliedDebitorenKontoFragment) $1.qubletFRAGMENTMAP.get('com.lexware.vereinsverwaltung.abrechnung.api.model.mitglied.MitgliedDebitorenKontoFragment')).debitor=true) AND NOT (((com.lexware.vereinsverwaltung.abrechnung.api.model.mitglied.MitgliedVertraegeFragment) $1.qubletFRAGMENTMAP.get('com.lexware.vereinsverwaltung.abrechnung.api.model.mitglied.MitgliedVertraegeFragment')).contracts IS EMPTY)))

 

#2

The attached database is empty.

ObjectDB Support
#3

hmm weird.. ok here it goes again

#4

There is a problem in retrieval of the BeitragVertragArt instance (with qubletID = 371).

Trying to view all the instances of this type in the explorer (by right clicking the type in the Schema tab and selecting Open Tree Window) generates a similar exception (internally) so the problem is probably not specific to the query.

It seems that there is a problem in reading the pricing field, whose type is serializable (Money).

Using serializable types is not recommended (embeddable classes should be used instead) and is not fully supported by the Explorer since the Explorer doesn't have the serializable class, which is needed during read.

Please check this query (and accessing that instance in general) from your program - does it work? If it works, you may try running the Explorer with a classpath that contains all your classes.

But if Money is serializable and changing it to embeddable is possible - this is the preferred solution (assuming this is indeed the problem).

ObjectDB Support
#5

Build 2.3.6_14 fixes the problem by handling failed deserialization better.

Still, you cannot see serialized objects in the Explorer but no exception is thrown - only the serialized fields display an error message.

ObjectDB Support
#6
Hi, Well, the issue occurs in our Code as well during retrieval. Actually, I don't care about whether it happens in Explorer or not but in our app it might not happen. So, you are saying that the persisted Money class is coruppted? How could that happen? The db I have attached is actually just a freshly generatec test db from our Code. We cannot make Money (and some other classes) being entities for several reasons though I was under the impression that serializable classes should work just fine? So, what are we supposed to do now? If, at all, it seems that the Money class got coruppted after retrieving the BeitragVertragArt class, changing some fields and writing it back? The fix in _14 fixes the Explorer only, right?
#7

If you have a problem in retrieval of this entity object also in your application - please provide the exception stack trace (when using the last build, since the previous error message is not expected anymore). If this will not help you may have to provide also a test that demonstrates the problem.

Maybe the serialization includes a class that is not available to ObjectDB during retrieval, but this is just a guess.

ObjectDB Support

Reply