Sagara,

Equivalence is only defined for components in the WSDL 2.0 spec. In
general, it does not make sense to test two elements for equivalence.
If an element maps to a component then it could be compared for
equivalence.

Note that not all elements in the info map to components.

Therefore, we should only add isEquivalentTo() to the Component interface.

-- Arthur

On Mon, Jul 7, 2008 at 4:48 PM, Jeremy Hughes <[EMAIL PROTECTED]> wrote:
> Arthur,
>
> In this posting [1] I set out a few scenarios where .equals() would be
> useful for comparing components. I think XML / element model
> comparison will be less likely - I can see most applications would be
> manipulating WSDL at the component level. It really only needs XML /
> element model manipulation at the (de)serialization stage to get the
> WSDL into the correct file layout. I mentioned in the previous post
> that if there is a use case for comparing at the element model level
> then this is really equivalent to comparing at the XML level and can
> be done using something like XMLUnit on an xml stream / DOM object.
>
> [1] 
> http://markmail.org/message/l6ors3ctmg4bjyco#query:+page:1+mid:l6ors3ctmg4bjyco+state:results
>
> Jeremy
>
> 2008/7/7 Arthur Ryman <[EMAIL PROTECTED]>:
>>
>> John,
>>
>> I suggest using equals() to mean element equality (on both the Element and
>> Component objects) and using isEquivalentTo() for component equivance.
>>
>> Is there any technical problem with that?
>>
>> Arthur Ryman, Technical Executive (IBM DE)
>> Project and Program Management, Rational Division
>>
>> phone:      +1-905-413-3077, TL 313-3077
>> assistant: +1-905-413-3831, TL 313-3831
>> fax:            +1-905-413-4920, TL 313-4920
>> mobile:     +1-416-939-5063
>>
>>
>> "John Kaputin (gmail)" <[EMAIL PROTECTED]>
>>
>> 07/07/2008 01:10 PM
>>
>> Please respond to
>> woden-dev@ws.apache.org
>> To
>> woden-dev@ws.apache.org
>> cc
>> Subject
>> Re: equals method (was: Re: Questions about tests)
>>
>>
>>
>>
>> Arthur,
>> there was some discussion last month on the original thread [1]. Basically,
>> we have one set of Impl objects which implement two APIs (the Component and
>> Element APIs) and if we implement equals(Object) to test for logical
>> equivalence, there's confusion about which equivalence we are checking -
>> Component or Element. The spec just refers to Component equivalence and
>> Jeremy presented an argument in favour of implementing equals(Object) to
>> check for Component equivalence only.
>>
>> Currently, we declare the method WSDLComponent.equals(WSDLComponent) for the
>> Component API. It defaults to equality of object references in
>> WSDLComponentImpl and currently is only overridden in InterfaceImpl to check
>> for logical equivalence of Interface components (to handle Interface
>> inheritance).  However, this equivalence checking for Interface inheritance
>> must still be implemented for InterfaceFault, InterfaceOperation,
>> InterfaceMessageReference and InterfaceFaultReference to complete the spec
>> requirements.
>>
>> I'm not so keen on equals(WSDLComponent) anymore. I think I prefer your
>> suggestion of WSDLComponent.isEquivalentTo(WSDLComponent). This would avoid
>> any confusion about what equals() methods mean in the Woden implementation.
>>  It won't permit the use of collection methods like contains(), that rely on
>> a suitable implementation of equals(Object), but we don't use those methods
>> in the Woden implementation anyway. See how the equals(WSDLComponent) method
>> is currently used - we just loop through the collection of components,
>> checking each one for equivalence with equals(WSDLComponent). We could do
>> this just as well with an isEquivalentTo() method instead and it would
>> probably be more obvious too.
>>
>> [1]
>> http://mail-archives.apache.org/mod_mbox/ws-woden-dev/200806.mbox/[EMAIL 
>> PROTECTED]
>>
>> regards,
>> John
>>
>> On Tue, Jul 8, 2008 at 12:31 AM, Arthur Ryman <[EMAIL PROTECTED]> wrote:
>>
>> Sagara,
>>
>> -1 on the use of the name Comparator. That should only be used for defining
>> a total ordering on objects, e.g. for when you sort them.
>>
>> Remind me why we can't have a standard equals() method? The topic of
>> component equivalence can be deferred and we can define an isEquivalentTo()
>> method later.
>>
>> Arthur Ryman, Technical Executive (IBM DE)
>> Project and Program Management, Rational Division
>>
>> phone:      +1-905-413-3077, TL 313-3077
>> assistant: +1-905-413-3831, TL 313-3831
>> fax:            +1-905-413-4920, TL 313-4920
>> mobile:     +1-416-939-5063
>>
>> "Sagara Gunathunga" <[EMAIL PROTECTED]>
>>
>> 07/07/2008 12:02 PM
>>
>> Please respond to
>> woden-dev@ws.apache.org
>>
>> To
>> woden-dev@ws.apache.org
>> cc
>> Subject
>> Re: equals method (was: Re: Questions about tests)
>>
>>
>>
>>
>>
>>
>> Hi guys,
>>
>> I like to add some ideas to this discussion, it seems like we couldn't come
>> up with a good solution for this dilemma quickly. But with our 1.0 version
>> it is not a good thing to tell that we don't have a method to compare
>> equality of two WSDL component/element, it's always nice to have a solution
>> based on Object.equal() method ,  but in the users point of view most
>> important question is " is there any way to check equality of  two WSDL
>> component/element …? " . So my suggestion is to provide an alternative way
>> to compare WSDL component/elements until we find the ultimate solution.
>>
>> We can have a utility class called "WSDLComparator" to achieve this,
>> following method can be good candidate methods for this class.
>>
>> Public Boolean compare (WSDLCompnent com1, WSDLCompnent com2)
>>
>> Public Boolean compare (WSDLElemt ele2, WSDLElement ele2)
>>
>>
>>
>>  Once we solve equal () method issue we can depreciate this class.
>> Meanwhile, I'm also facing this problem in my WSDLWritter test cases.  I'm
>> planning to develop such a "WSDLComparator" class inside the test package
>> because there is no other way to compare WSDL components in my test cases.
>>
>> Thanks,
>>
>> On Wed, Jun 25, 2008 at 12:31 AM, Arthur Ryman <[EMAIL PROTECTED]> wrote:
>>
>> Jeremy,
>>
>> I don't know off hand if we have test cases for that, but we should add them
>> if they are missing, and contribute them to W3C.
>>
>> There are a couple of assertions related to equivalence [1], [2]. There are
>> a total of 5 test cases that cover these [3].
>>
>> [1] http://www.w3.org/TR/2007/REC-wsdl20-20070626/#InterfaceFault-1015
>> [2] http://www.w3.org/TR/2007/REC-wsdl20-20070626/#InterfaceOperation-1020
>> [3] http://dev.w3.org/2002/ws/desc/test-suite/Assertion-coverage.html
>>
>> Arthur Ryman, Technical Executive (IBM DE)
>> Project and Program Management, Rational Division
>>
>> phone:      +1-905-413-3077, TL 313-3077
>> assistant: +1-905-413-3831, TL 313-3831
>> fax:            +1-905-413-4920, TL 313-4920
>> mobile:     +1-416-939-5063
>>
>> "Jeremy Hughes" <[EMAIL PROTECTED]>
>> Sent by: [EMAIL PROTECTED]
>>
>> 06/24/2008 09:55 AM
>>
>> Please respond to
>> woden-dev@ws.apache.org
>>
>> To
>> woden-dev@ws.apache.org
>> cc
>> Subject
>> Re: equals method (was: Re: Questions about tests)
>>
>>
>>
>>
>>
>>
>>
>>
>> Hi Arthur,
>>
>> 2008/6/24 Arthur Ryman <[EMAIL PROTECTED]>:
>>>
>>> Jeremy,
>>>
>>> The motivation for component equivalence was in fact the use case of
>>> "diamond" inheritence. Suppose you have four interfaces A, B, C, D, where
>>> B
>>> inherits A, C inherits A, and D inherits B and C. The D is getting all the
>>> operations from A twice, which is OK since they are equivalent. If B and C
>>> pointed to the same location for A there would be no problem, but if they
>>> point to different locations, then the parser must confirm that the
>>> definitions in each location are equivalent.
>>>
>>>   A
>>>  / \
>>> B   C
>>>  \ /
>>>   D
>>>
>>
>> I wonder if we have a test that looks like this where we B gets the A
>> document from a different location to where C gets it ... and also a
>> negative test variation on that where the two instances of the A
>> document are different. In woden today I believe an
>> InterfaceImpl.equals() will compare the object IDs as it delegates to
>> Object.equals() and not compare the content of the two objects
>> representing A.
>>
>>> Arthur Ryman, Technical Executive (IBM DE)
>>> Project and Program Management, Rational Division
>>>
>>> phone:      +1-905-413-3077, TL 313-3077
>>> assistant: +1-905-413-3831, TL 313-3831
>>> fax:            +1-905-413-4920, TL 313-4920
>>> mobile:     +1-416-939-5063
>>>
>>>
>>> "Jeremy Hughes" <[EMAIL PROTECTED]>
>>> Sent by: [EMAIL PROTECTED]
>>>
>>> 06/24/2008 06:36 AM
>>> Please respond to
>>> woden-dev@ws.apache.org
>>>
>>> To
>>> woden-dev@ws.apache.org
>>> cc
>>> Subject
>>> equals method (was: Re: Questions about tests)
>>>
>>>
>>>
>>>
>>> Hi John,
>>>
>>> 2008/6/23 John Kaputin (gmail) <[EMAIL PROTECTED]>:
>>>> The WSDL 2 spec talks about equivalence between components. This is to do
>>>> with collapsing equivalent components derived from different parts of the
>>>> XML infoset into a single component in the Component model. I think there
>>>> are some assertions about it too. If I remember correctly, that was the
>>>> requirement behind having an equals() implementation that tested for the
>>>> logical equivalence of components and the equals(WSDLComponent) method
>>>
>>> I guess you're referring to section 2.15 of the core spec. I guess
>>> there isn't an interop as I don't think that would make sense - hence
>>> we haven't needed to get this to work so far. Also, I don't think we
>>> can be testing for equivalence in Woden today as the
>>> equals(WSDLComponent) method just delegates to Object.equals()
>>>
>>>> resulted because of the problem with implementing equals(Object) in an
>>>> Impl
>>>> class that implements both the Component and Element interfaces.
>>>>
>>>> For example, we wanted to override equals(Object) in DescriptionImpl, but
>>>> this implements both the Description component and the DescriptionElement
>>>> interfaces. The equivalence checking behavioiur for a Description
>>>> component
>>>> and a DescriptionElement are different, but at the DescriptionImpl level
>>>> we
>>>> can't tell which 'view' of the object the caller is seeing (component or
>>>> element).
>>>
>>> We could just define equals(Object) as comparing the two objects at
>>> the component model level. Then if you really want to compare at the
>>> XML level then you need to serialize both objects under comparison to
>>> XML and compare them using something like XMLUnit. We might be able to
>>> do something to simplify this with a layer on XMLUnit.
>>>
>>>>
>>>> We do need some form of equivalence checking to satisfy the spec and
>>>> while
>>>> implementing equals(WSDLComponent) across Woden might achieve this, it
>>>> will
>>>> break the transitivity of the Object equals() method as Jeremy says,
>>>> which
>>>> will limit the ability to make use of some aspects of Java (e.g. in the
>>>> collection classes).
>>>
>>> I've been trying to think of the use cases for the equals() method.
>>> For me it boils down to: does this WSDL (in object form) describe the
>>> same service as this other WSDL (in object form). Likely reasons you'd
>>> do this:
>>>
>>> a) you've read the WSDL from disc / URL twice and you want to see if
>>> they're the same. The DescriptionImpl objects will always be
>>> different, but the content will be equal.
>>>
>>> b) you've read WSDLs from two different locations and you want to see
>>> if they're the same - describe the same service, same service endpoint
>>> etc. Again the DescriptionImpl objects will have different object IDs.
>>> The WSDLs describe the same service if the component models are the
>>> same. The way in which a web service client interacts with the web
>>> service is the same whether it is using WSDL #1 or WSDL #2. i.e. there
>>> is nothing in the element model of the WSDLs that would cause the web
>>> service client to behave differently. If there was, then this should
>>> have been surfaced at the component model in some way. At least this
>>> has been my understanding, so if this is a false statement, please
>>> say.
>>>
>>> c) you've read WSDLs from two different locations and you want to see
>>> if they describe two different instances of the same web service -
>>> i.e. you have a choice of which the request should be sent to. For me
>>> this, and further variations on this theme (e.g. same web service,
>>> different transport) require the web service client to dig around in
>>> the WSDL a bit further than just calling equals(). I think this is
>>> possible today using the accessor methods we have today.
>>>
>>> d) you've read a WSDL and you want to split the WSDL into 2 - an
>>> interface and a service endpoint WSDL. Then you want to check that
>>> when you've done that, the result is semantically the same as what you
>>> started with. This is really a variation of b).
>>>
>>> So, based on this I think it the equals(Object) method should compare
>>> at the component model only. If there is a use case for comparing at
>>> the element model level then this is really equivalent to comparing at
>>> the XML level and can be done using something like XMLUnit on an xml
>>> stream / DOM object.
>>>
>>> So I propsose equals(Object) should compare at the component model only.
>>>
>>>>
>>>> Don't forget the issue still pending on the Woden wiki [1] about merging
>>>> the
>>>> Component and Element APIs into one API. This might simplify implementing
>>>> the equals(Object) method, but we will still need to test for Component
>>>> equivalence to satisfy the spec.
>>>
>>> What will merging the APIs really give us. I think that would be less
>>> intuitive. I guess I'd like to see how users of Woden wish to use it
>>> and what the shortfalls of the current APIs are.
>>>
>>>>
>>>> [1] http://wiki.apache.org/ws/FrontPage/Woden/APIReview/OneWsdlApi
>>>>
>>>> regards,
>>>> John.
>>>>
>>>> On Fri, Jun 13, 2008 at 11:39 PM, Jeremy Hughes <[EMAIL PROTECTED]>
>>>> wrote:
>>>>>
>>>>> 2008/6/13 Jeff MAURY <[EMAIL PROTECTED]>:
>>>>> > Just to finish the discussion:
>>>>> >
>>>>> > 1) I agree that XMLUnint will solve the problem
>>>>> > 2) I think the equals method should work on the component level
>>>>> > because
>>>>> > Description is the component representation of the WSDL
>>>>> > 3) If the user wants to test equality at the element level, he should
>>>>> > use
>>>>> > the toElement methods and use equals on the results.
>>>>>
>>>>> That sounds like a nice idea, but both toElement() and toComponent()
>>>>> methods return 'this' ... so
>>>>>
>>>>> myDescription.toElement().equals(foo)
>>>>>
>>>>> will call the same equals() method on the same object as:
>>>>>
>>>>> myDescription.toComponent().equals(foo)
>>>>>
>>>>> but I can see your sentiment that the toElement() method should
>>>>> produce an object that effectively *is* the element model of the WSDL
>>>>> and so equals() method would test for equality at the element model
>>>>> level. I did have thoughts around the terminology we use - our meaning
>>>>> of the term "model" isn't quite the same (IMHO) as the meaning of the
>>>>> word "model" in the MVC pattern.
>>>>>
>>>>> I think if we starting thinking in terms of the MVC pattern then we
>>>>> would have a single model (in the MVC sense of the word) of the WSDL
>>>>> which would at least contain a representation of the XML (like
>>>>> DescriptionImpl does today) and optionally a calculated representation
>>>>> of WSDL in terms of what the spec calls *components*. This is pretty
>>>>> much what we have today in fact, except that we would just start
>>>>> saying we have *one* model. Then we would move to saying we have an
>>>>> "Element view" of the model and a "Component view" of the model. That
>>>>> way the equals() methods would be on the view and you would only ever
>>>>> compare an instance of one type of view of a WSDL with an instance of
>>>>> the same type of view of another WSDL.
>>>>>
>>>>> My only hesitation is that this is quite a significant change. Is it
>>>>> worth it just so that .equals() works? And we'd need hashCode() of
>>>>> course. It may provide further benefits - it would be easy enough to
>>>>> create other views on the model (if there was a use case for that).
>>>>>
>>>>> Regards,
>>>>> Jeremy
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: [EMAIL PROTECTED]
>> For additional commands, e-mail: [EMAIL PROTECTED]
>>
>>
>>
>>
>>
>> --
>> Sagara Gunathunga
>>
>> Blog - ssagara.blogspot.com
>> Web - http://sagaras.awardspace.com/
>>
>>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to