Hi David, I'm implementing XML Signature based on Axiom and I encountered many situations where it requires a way to get the parent of an OMAttribute. I agree with you that just because there is something in DOM we don't want to put it into Axiom too.
I liked the second approach basically because of that. Thus we don't throw exceptions so the usage of an attribute instance in many elements is not prohibited. Yet it guarantees that only a cloned is added inside. I firmly believe there should be a way to retrieve the parent from an OMAttribute. The issue is what is the basis of keeping track of the parent. If we enforce single parent constraint then it's obvious. But if we are to allow an attribute to be added in more than one element then we are in some trouble. I had to write methods manually to keep track of the parent while implementing XML Signature and XML Canonicalization. It's IMHO is pretty boring and ugly. Thanks for your idea --Saliya On Dec 8, 2007 2:57 PM, David Illsley <[EMAIL PROTECTED]> wrote: > Um, IMO, this is really ugly... that DOM does something doesn't seem > to be a reason for Axiom to do it. What is the driving use case that > means you need this complication of the model? > Cheers, > David > > On Dec 8, 2007 5:44 AM, Saliya Ekanayake <[EMAIL PROTECTED]> wrote: > > Hi all, > > > > Axiom implementation doesn't provide a method to retrieve the owner > element > > of an OMAttributeImpl instance. I've already created a JIRA on this > issue > > (see https://issues.apache.org/jira/browse/WSCOMMONS-230). I've resolved > the > > issue by adding an OMElement reference in OMAttributeImpl to keep track > of > > its owner. Thus I've provided a getOwner() method in OMAttribute > interface. > > > > Now, I came across the issue of enforcing single owner restriction for > > OMAttributes instances. Previously there was no constraint like that. > The > > patches I've send for the particular JIRA enforces this by means of not > > adding the attribute to the element if its already used in another > element. > > This approach, however, tends to break Axis2 build because in Axis2 > there > > are incidents where attributes are being added to more than one element. > > Thus I came up with two solutions to overcome this issue. > > > > 1. Throw a runtime exception (this is how it's done in DOM). Thus we are > > sure that no two OMElements will contain the same OMAttribute instance > (yes, > > still we need to fix Axis2 code to not use attributes in more than one > > element) > > > > 2. Create a new attribute with the same namespace, localname, and > value. > > Thus whenever a user tries to add an OMAttribute instance, which is > already > > used in an OMElement instance, to another OMElement instance that > attribute > > instance is cloned and its parent is set to the new element. > > > > I'm in favour of the second decision as it's more user friendly. The > library > > itself does the cloning process so that a user has to know only that > it's > > not the same attribute used but the cloned one. > > > > Your idea on this matter is highly appreciated. > > > > Thanks in advance, > > > > --Saliya > > > > > > -- > David Illsley - IBM Web Services Development > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > -- Saliya Ekanayake http://www.esaliya.blogspot.com http://www.esaliya.wordpress.com
