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]

Reply via email to