OMSourcedElement.buildWithAttachments results in inproper expansion
-------------------------------------------------------------------
Key: WSCOMMONS-301
URL: https://issues.apache.org/jira/browse/WSCOMMONS-301
Project: WS-Commons
Issue Type: Bug
Components: AXIOM
Reporter: Rich Scheuerle
Assignee: Rich Scheuerle
Background:
-----------------
OMSourcedElement has either a backing object (OMDataSource) or is a normal OM
tree.
When build() or buildWithAttachments() is called, the OMElement should respond
by building its contents from the Builder.
Problem:
-------------
The current implementation of OMSE.buildWithAttachments() causes the OM tree to
be unnecessarily expanded.
The current code is:
public void buildWithAttachments() {
// If not done, force the parser to build the elements
if (!done) {
this.build();
}
Iterator iterator = getChildren();
while (iterator.hasNext()) {
OMNode node = (OMNode) iterator.next();
node.buildWithAttachments();
}
}
Solution:
------------
Iterating over the children is causing the expansion. This should only be
performed if the OMSourcedElement is in an expanded state.
A validating unit test will be provided with the code change.
public void buildWithAttachments() {
// If not done, force the parser to build the elements
if (!done) {
this.build();
}
// If the OMSourcedElement is in in expanded form, then
// walk the descendents to make sure they are built.
// If the OMSourcedElement is backed by a OMDataSource,
// we don't want to walk the children (because this will result
// in an unnecessary translation from OMDataSource to a full OM tree).
if (isExpanded()) {
Iterator iterator = getChildren();
while (iterator.hasNext()) {
OMNode node = (OMNode) iterator.next();
node.buildWithAttachments();
}
}
}
Kudos:
----------
Thanks to Dan Zhong of the IBM performance team who found this problem during
Sandesha testing.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]