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 bu...@apache.org on 2003/01/25 16:25:10 UTC
DO NOT REPLY [Bug 16418] New: -
No deserialization context after changing SOAPBody in handler
DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://nagoya.apache.org/bugzilla/show_bug.cgi?id=16418>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND
INSERTED IN THE BUG DATABASE.
http://nagoya.apache.org/bugzilla/show_bug.cgi?id=16418
No deserialization context after changing SOAPBody in handler
Summary: No deserialization context after changing SOAPBody in
handler
Product: Axis
Version: current (nightly)
Platform: Other
OS/Version: Other
Status: NEW
Severity: Normal
Priority: Other
Component: Basic Architecture
AssignedTo: axis-dev@xml.apache.org
ReportedBy: cnc@trifork.com
Hi
As requested by dims on the axis-dev mailinglist I hereby post a test for the
bug I posted on the list.
I am not sure where the correct place for the test is, but as I looked at the
jaxrpchandler test in the wsdl directory for inspiration, I have placed it there :).
For reference I have copied part of my original posting on the axis-dev list below.
Please let me know if there is anything I can do to help fix the bug.
Cheers
Claus Nyhus Christensen
cnc@trifork.com
Original message:
I am trying to create a simple handler which alters the content of the
SOPABody of an incoming SOAP message.
The web service I am using is a simple echo web service with a single
method called echo. The methods takes a string and just returns it.
Now, when my client tries to call the web service, I get an exception.
I have been looking into the code, and it seems that the way the
original SOAPBody is build is different from the way it is done when you
use the JAXM methods on the SOAPBody class.
I have tried the same example using the JAXRPC/SAAJ reference
implementations and it works just fine there.
To me it seems that:
1. I am doing something completely wrong in my handler
or
2. The addBodyElement on the SOAPBody class is not working as is should
If you agree with me that number 2 is the case, I would like to help
create a fix. But I cannot figure out how I am going to be able to get a
DeserializationContext in the SOAPBody class.
A related problem occur if you use the addChildElement on SOAPBody
instead of addBodyElement. When you do this a new MessageElement is
added to the SOAPBody. However, this will result in a ClassCastException
in the processMessage of the RPCProvider class. Line 141 and 142 gives
the problem:
if (!(bodies.get(bNum) instanceof RPCElement)) {
SOAPBodyElement bodyEl = (SOAPBodyElement)bodies.get(bNum);
Since the MessageElement is not an instance of RPCElement, it is cast to
a SOAPBodyElement. This will result in the ClassCastException. This case
also works fine on the JAXRPC/SAAJ reference implementation.
The fix seems to be to overwrite the addChildElement methods in SOAPBody
(which it inherits from MessageElement) to make sure that
SOAPBodyElements (or maybe RPCElement) are always added. However, this
fix will have the same problem with the DeserializationContext as stated
above.