This sounds like a bug. It would be best to raise a JIRA report with a
small test case (not involving xstream)
Stephen
Huertas Fernández wrote:
> Hi all, I'm having problems with serialization/deserialization of a Buffer. My idea is
to implement a persistent queue using the UnboundedFifoBuffer (well, I want synchronized access,
so I use SynchronizedBuffer too):
>
>
>
> private Buffer queue = BufferUtils.synchronizedBuffer(new UnboundedFifoBuffer());
>
>
>
> When I serialize the queue to disk an it has elements, all works ok, but when I serialize
an empty queue I have some problems when I create a new object using the serialized file(BTW,
I'm using XStream 1.1.3 to produce the XML).
>
>
>
> <org.apache.commons.collections.buffer.SynchronizedBuffer>
>
> <collection class="org.apache.commons.collections.buffer.UnboundedFifoBuffer" serialization="custom">
>
> <org.apache.commons.collections.buffer.UnboundedFifoBuffer>
>
> <default/>
>
> <int>0</int>
>
> </org.apache.commons.collections.buffer.UnboundedFifoBuffer>
>
> </collection>
>
> <lock class="org.apache.commons.collections.buffer.SynchronizedBuffer" reference=".."/>
>
> </org.apache.commons.collections.buffer.SynchronizedBuffer>
>
>
>
> When I deserialize the queue it has a 'buffer' with size 1 (with null content), 'tail'
and 'head' fields are 0 (they are declared transient). So, when I try to add a new object
to the queue, the sentence:
>
>
>
> Object[] tmp = new Object[((buffer.length - 1) * 2) + 1];
>
>
>
> Is executed in the add() method to increase the buffer length, but the buffer remains
with the same size! (buffer.length = 1 --> (1 - 1) * 2 + 1 = 1). So, the object is added
and when the tail is going to be incremented, it is reset to 0!!
>
>
>
> private int increment(int index) {
>
> index++;
>
> if (index >= buffer.length) {
>
> index = 0;
>
> }
>
> return index;
>
> }
>
>
>
> So it is impossible to add new elements after an empty queue has been serialized / deserialized.
>
>
>
> I have solved it just not saving empty queues but deleting the file instead, but I wanted
to write to the list to know if this is a bug in the UnboundedFifoBuffer or maybe is caused
by the way Xtream serializes (but I don't think so).
>
>
>
> Thanks in advance,
>
>
>
> Jose Luis.
>
>
---------------------------------------------------------------------
To unsubscribe, e-mail: commons-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-user-help@jakarta.apache.org