You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by "Steve Green (JIRA)" <ax...@ws.apache.org> on 2005/08/05 16:59:37 UTC

[jira] Commented: (AXIS-1960) 1.2Rc3: Changes to body or header do not get serialized

    [ http://issues.apache.org/jira/browse/AXIS-1960?page=comments#action_12317796 ] 

Steve Green commented on AXIS-1960:
-----------------------------------

Venkat,

Saw this in CVS:
        Fix for AXIS-1960:
        - Added a new test case for TestSOAPBody.java to test for this bug.
        - added a call to setDirty(true) inside a few methods in NodeImpl
        - added setDirty(false) in getAsString() to fix ant all-tests errors.

Calling setDirty(false) in MessageElement causes the rerverse problem as the one you are fixing here.  Consider the following events.

    1.  MessageElement with sax reply has children added.
    2.  Element is marked dirty (as it should be).
    3.  Someone downstream calls getAsString(), perhaps for debugging or perhaps via getAsDOM().
    4.  Element is marked clean, and the new nodes are never serialized.

So I see 2 problems, and they apply to getAsDOM(), and getAsDocument() as well.

    1.  The value returned from getAsXXXX() is wrong.
    2.  Calling getAsXXXX() is destructive.  To borrow a C++ idium, I would hope that getAsXXXX() is "const".  Furthermore, I hope the answer to my concerns isn't "setDirty(oldDirty)".

My suspsicion is that if the unit tests are failing, something else is wrong.  Setting dirty to false feels like masking of symptoms.  I have a test program which demonstrates my concerns.  Please let me know if you'd like me to upload it.


> 1.2Rc3: Changes to body or header do not get serialized
> -------------------------------------------------------
>
>          Key: AXIS-1960
>          URL: http://issues.apache.org/jira/browse/AXIS-1960
>      Project: Apache Axis
>         Type: Bug
>   Components: Serialization/Deserialization
>     Versions: 1.2RC3
>  Environment: JDK1.4.2_07
> Axis version 1.2Rc3
> Tomcat 5.0, Eclipse 3.0
>     Reporter: Jeff Saremi
>     Assignee: Venkat Reddy

>
> You can add a node or change the value of a node in body or header of a message but the SerializationContext does not output these changes.
> You can see the changes using XMLUtils.xxxToString() methods.
> Having called saveChanges(), setEnvelope(), setProperty(org.apache.axis.SOAPPart.ALLOW_FORM_OPTIMIZATION, ...) have no effect on this at all.
> Example:
> org.apache.axis.message.SOAPBody body = (org.apache.axis.message.SOAPBody)env.getBody();
> Node myNode = body.getElementsByTagName("MyNodeName").item(0);
> myNode.appendChild(body.getOwnerDocument().createTextNode("SomeNewText"));
> // you can see the added text node in the followin output
> System.out.println(XMLUtils.ElementToString(body));
> // however, you will not see it in this one
> // therefore your changes are not avaialable to the next handler or service
> SerializationContext serContext = new SerializationContext(new PrintWriter(System.out), message.getMessageContext());
> serContext.setSendDecl(true);
> serContext.setEncoding("UTF-8");
> body.output(serContext);

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira