Sometimes namespaces are messed up by assignment when the resulting DOMs are
sent outside of the engine
-------------------------------------------------------------------------------------------------------
Key: ODE-188
URL: https://issues.apache.org/jira/browse/ODE-188
Project: ODE
Issue Type: Bug
Components: BPEL Runtime
Affects Versions: 1.1
Reporter: Matthieu Riou
Assignee: Matthieu Riou
Fix For: 1.1.1
Assignment uses Xerces importNode to get a node from one tree and copy it into
another. More specifically it recreates an element and imports all its child
nodes (attributes and elements). However Xerces doesn't carry the full
namespace context on import, it just clones and sets the proper owner. When it
clones, it also takes the namespace property so the cloned element is in the
proper namespace even without namespace declaration. Then internally Xerces
knows hoe to deal with that and eventually adds a namespace declaration when
needed.
However when we take that sort-of-messed-up tree as is and send it to the IL
(to ServiceMix for example), we don't know who or what is eventually going to
marshal the tree. And some of those marshallers don't really like Xerces tricks
and end up with a node using a namespace prefix that has never been declared.
Which of course can't be unmarshalled anymore as it's invalid. Nasty stuff.
As an example if you take those from and to:
"<ns2:detail xmlns:ns=\"http://www.etnic.be/janus/fault/desc\"
xmlns:ns2=\"http://www.etnic.be/janus/fault\">" +
"<ns:description ns:lang=\"fr\">foo bar</ns:description>" +
"</ns2:detail>";
"<janusResponse xmlns=\"http://www.etnic.be/janus\"
xmlns:janus=\"http://www.etnic.be/janus\">" +
"<fault:detail
xmlns:fault=\"http://www.etnic.be/janus/fault\">" +
"<fault:description/>" +
"</fault:detail>" +
"</janusResponse>";
And assign the destination node of the first in the second, you end up with:
<janusResponse xmlns="http://www.etnic.be/janus"
xmlns:janus="http://www.etnic.be/janus">
<fault:detail xmlns:fault="http://www.etnic.be/janus/fault">
<description ns:lang="fr">foo bar</description>
</fault:detail>
</janusResponse>
Note that there's no declaration for the prefix ns used by the lang attributes
and also that the namespace for the description element has changed.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.