I already posted this fix (on friday). However, it seems
to have been lost in the great void, because i can't find
it in the archive (http://xml.apache.org/mail/fop-dev/200109).
Sorry, if this should be a double.


Bug 3497: "id already exists error" when using span="all" attribute

Reason: if a BodyAreaContainer is not balanced, Block.layout(...)
is called a second time for the same Block due to the rollback:
---
[in src/org/apache/fop/fo/flow/Flow.java]

            if (bac.isBalancingRequired(fo)) {
                // reset the the just-done span area in preparation
                // for a backtrack for balancing
                bac.resetSpanArea();

                this.rollback(markerSnapshot);
                // one less because of the "continue"
                i = this.marker - 1;
                continue;
            }
---

Block.layout checks if the block-id already exists (which it
does, of course, from the first time) und fails with the error.
(Might this be broken in similar places too?)

I've attached a diff with the fix.

cu
Oliver
Index: src/org/apache/fop/fo/flow/Block.java
===================================================================
RCS file: /home/cvspublic/xml-fop/src/org/apache/fop/fo/flow/Block.java,v
retrieving revision 1.41
diff -r1.41 Block.java
164,165d163
<             this.id = this.properties.get("id").getString();
< 
170,171c168,173
<             if (area.getIDReferences() != null)
<                 area.getIDReferences().createID(id);
---
>             if (this.id == null) {
>                 this.id = this.properties.get("id").getString();
> 
>                 if (area.getIDReferences() != null)
>                     area.getIDReferences().createID(id);
>             }
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, email: [EMAIL PROTECTED]

Reply via email to