[ https://issues.apache.org/jira/browse/WSCOMMONS-557?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12901536#action_12901536 ]
Andreas Veithen commented on WSCOMMONS-557: ------------------------------------------- I also saw the check against OMConstants.XMLNS_NS_PREFIX. To be honest, I don't have the slightest idea why this check is done. My understanding is that the content of the "namespaces" map has the same meaning as in LLOM, i.e. that the keys of this map are the declared prefixes (with "" for the default namespace). That implies that "xmlns" can never appear as a key. The reason is that the XML Namespaces specs explicitly forbids declarations of the xmlns prefix: "The prefix xmlns is used only to declare namespace bindings and is by definition bound to the namespace name http://www.w3.org/2000/xmlns/. It MUST NOT be declared . Other prefixes MUST NOT be bound to this namespace name, and it MUST NOT be declared as the default namespace. Element names MUST NOT have the prefix xmlns." The only explanation that I see is that this piece of code is again required to work around an issue elsewhere in the code (that may or may not have been fixed in the meantime). Probably we should just remove the condition and check what happens. > org.apache.axiom.om.impl.dom.ElementImpl class's hasAttributes() and > getAttributes() methods are not compatible with DOM interfaces. > ------------------------------------------------------------------------------------------------------------------------------------ > > Key: WSCOMMONS-557 > URL: https://issues.apache.org/jira/browse/WSCOMMONS-557 > Project: WS-Commons > Issue Type: Bug > Components: AXIOM > Affects Versions: Axiom 1.2.10 > Environment: Ubuntu, JDK 1.6 > Reporter: Amila Jayasekara > Assignee: Andreas Veithen > Attachments: WSCOMMONS-557_CORRECTED.diff > > > The class org.apache.axiom.om.impl.dom.ElementImpl implements both DOM > Element and OMElement interfaces. According to DOM API the method > hasAttrbutes() should return true if there are attributes attached to current > node. Also this method will return true if there are namespaces attached to > current node. But according to current implementation the ElementImpl class > only checks for namespace nullability. This code will fail if we have a xml > like follows, > <?xml version='1.0' encoding='utf-8'?> > <soapenv:Body xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" > xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" > wsu:Id="Id-739587016"> > <GetDirectionsResponse xmlns="http://www.example.org/webservices/"> > <GetDirectionsResult> > <drivingdirections xmlns=""> > <route distanceToTravel="500m" finalStep="false" id="0">Head south on > Grove St</route> > </drivingdirections> > </GetDirectionsResult> > </GetDirectionsResponse> > </soapenv:Body> > In above xml the node "drivingdirections" is having an empty namespace. But > for "drivingdirections" node, the method "hasAttribute()" should return true, > as there is a namespace attached to it. But current implementation of > ElementImpl returns false. > Also getAttributes() method should return empty namespace ("xmlns=\"\"") for > "drivingdirections" node. Current implementation doesnt return empty > namespace as an attribute. Since namespace of drivingdirections is empty, > namespace of child elements of "drivingdirections" are also null. Therefore > hasAttribute() method will return false for even elements like "route". > ("route" element has attributes, therefore hasAttribute() should return true) > There are 2 rampart issues which depends on this. > [1] https://issues.apache.org/jira/browse/RAMPART-303 > [2] https://issues.apache.org/jira/browse/RAMPART-128 -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.