I think I'm getting a better understanding of the
problem. here' what i found so far:

- this problem is very much similar to what was
reported (and probably not fixed comprehensively) in
http://issues.apache.org/jira/browse/AXIS-283

- what XMLUtils produces and what SerializationContext
outputs are completely different. SC does not output
any changes that are in the memory!
Compare the following pieces after some modification
to one of the nodes in the body:
 // this one shows all my changes
  System.out.println(
      XMLUtils.ElementToString(env.getBody()));

 // however this one does not -- why?
 // this is very frustrating
  SerializationContext serContext = new
SerializationContext(new PrintWriter(System.out),
messageContext);
  serContext.setSendDecl(true);
  serContext.setEncoding("UTF-8");
  body.output(serContext);


Is this a bug? how can we report it if so?
thanks
jeff




 --- Jeff Saremi <[EMAIL PROTECTED]> wrote: 
> ashutosh, 
> thanks for taking the time to reply.
> I tried the test code and the resolution you had
> posted but it did not make any difference.
> 
> Then i went on to try the sample code you had and
> realized that i don't get the problem that was
> posted
> as a bug. I didn't even need to call
> setSOAPEnvelope()
> method. May be the issue is gone away in 1.2RC3.
> 
> However my problem still persists. My issue is that
> i
> don't want to add a new element to the body but
> rather
> i'd like to modify an existing one. See the code
> below. None of the saveChanges() or
> setSOAPEnvelope()
> or other method calls can make the modified body
> persist beyon the scope of the invoke() method in
> the
> handler:
> 
> public void invoke(MessageContext context) {
>   ...
>   Node someNode =   
>      
> body.getElementsByTagName("MyNodeName").item(0);
> 
>   someNode.appendChild(
> 
>   body.getOwnerDocument().createTextNode(
>       "someTextForMyNode"));
>   // print the body now
>   // the oputput includes the new text node
>  
> System.out.println(XMLUtils.ElementToString(body));
> 
>   // the body shows the modification correctly here
>   // however after the message is forwarded to the
> service
>   // you can no longer see the changes
> 
> 
> 
> 
> 
>  --- "Shahi, Ashutosh" <[EMAIL PROTECTED]>
> wrote: 
> > Jeff,
> >      I haven't gone through the entire discussion,
> > but the problem might
> > be linked to
> > http://issues.apache.org/jira/browse/AXIS-1469
> > See if it helps.
> > 
> > Thanks,
> > Ashutosh
> > 
> > -----Original Message-----
> > From: Jeff Saremi [mailto:[EMAIL PROTECTED] 
> > Sent: Monday, April 25, 2005 8:47 PM
> > To: axis-user@ws.apache.org
> > Subject: Re: communication between the Handler and
> > the Service
> > 
> > It did not make any difference. or I don't how
> when
> > and  where to call it. I called saveChanges()
> after
> > the modifications to the body but the Service
> still
> > printed the old body xml.
> > jeff
> > 
> > 
> > 
> >  --- Jeff Saremi <[EMAIL PROTECTED]> wrote: 
> > > I think I used that one too. But let me give it
> > > another  try and get back to you.
> > > jeff
> > > 
> > > 
> > > 
> > > 
> > >  --- Jeff Greif <[EMAIL PROTECTED]>
> > wrote:
> > > 
> > > > Have you noticed the method saveChanges on
> > > > SOAPMessage?
> > > > Jeff
> > > > 
> > > > Jeff Saremi wrote:
> > > > 
> > > > >So i played more with this and here's what i
> > > found
> > > > >out:
> > > > >- In the handler, the changes to the message,
> > > > envelope
> > > > >and body will all get saved and passed to the
> > > > Service
> > > > >afterwards
> > > > >- Any chnages to the nodes inside the body
> are
> > > > allowed
> > > > >to be made and displayed while in the handler
> > but
> > > > >beyond that none of those changes make it!
> > > > >
> > > > >** some where in the handler **
> > > > >public void invoke(MessageContext context) {
> > > > >  ...
> > > > >  Node someNode =  
> > > >
> > >body.getElementsByTagName("MyNodeName").item(0);   
> > > 
> > > > >someNode.appendChild(
> > > >
> > >
> >
>
>body.getOwnerDocument().createTextNode("someTextForMyNode"));
> > > > >  // print the body now
> > > > >  // the oputput will include the new text
> node
> > > > > 
> > > >
> > >
> >
> System.out.println(XMLUtils.ElementToString(body));
> > > > >
> > > > >  // out of desperation you can do the
> > following
> > > > >  // which should not be needed
> > > > >  // but they won't help you with the new
> Node
> > > > >  // being added to the body and hence being
> > > passed
> > > > >  // to your Service down the chain
> > > > >  envelope.removeBody();
> > > > >  envelope.setBody(body);
> > > > >  Message newMessage = new Message(envelope);
> > > > > 
> messageContext.setRequestMessage(newMessage);
> > > > >
> > > > >}
> > > > >
> > > > >** some time later inside the Service  **
> > > > >public Element[] service(Element[] elements)
> {
> > > > >  for (int i = 0; i < elements.length; i++) {
> 
> > > > >    // print the elements to your hearts
> > content
> > > > >    // you will not see any traces of the
> > > textnode
> > > > >    // you added in your handler
> > > > >    // all you see is the original elements 
> > > > >    System.out.println(
> > > > >      XMLUtils.ElementToString(elements[i]));
> > > > >  }
> > > > >  return elements;
> > > > >}
> > > > >
> > > > >jeff
> > > > >
> > > > > --- Jeff Saremi <[EMAIL PROTECTED]>
> wrote: 
> > > > >  
> > > > >
> > > > >>I should have explained more about what i'm
> > > doing.
> > > > I
> > > > >>don't know where this processRequest()
> method
> > > is.
> > > > It
> > > > >>looks like there are two or more Handler
> > > concepts
> > > > >>within Axis. The Handler that i'm talking
> > about
> > > > are
> > > > >>the ones you specify in the "requestFlow" or
> > > > >>"responseFlow" chains:
> > > > >>
> > > > >>  <service name="MyService" style="message">
> > > > >>    <parameter name="className"
> > > value="MyService"
> > > > />
> > > > >>    <parameter name="allowedMethods"
> > > > value="service"
> > > > >>/>
> > > > >>    <requestFlow>
> > > > >>      <handler type="java:MyHandler"/>
> > > > >>     </requestFlow>
> > > > >>  </service>
> > > > >>
> > > > >>Here's the method that MyHandler overrides.
> > The
> > > > code
> > > > >>below is just to point out the problem --
> this
> 
=== message truncated === 

Reply via email to