santuario-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Sean Mullan <Sean.Mul...@Sun.COM>
Subject Re: PATCH: String Comparison in ElementProxy
Date Thu, 05 Oct 2006 19:17:18 GMT
Wait, I spoke too soon, I see the test is != (instead of ==) so using 
!String.equals would be slower than != with interned Strings because it 
has to do the full String.equals test.

But what if we reversed the test, i.e.:

if (namespaceSHOULDBE.equals(namespaceIS) &&
     localnameSHOULDBE.equals(localnameIS) ) {
	//ok
	;
} else {
     Object exArgs[] = { namespaceIS +":"+ localnameIS,
     namespaceSHOULDBE +":"+ localnameSHOULDBE};
}

--Sean

Sean Mullan wrote:
> String.equals will work for both interned and non-interned Strings, 
> since it first checks if they are a reference to the same object. So 
> using String.equals seems safer and should be comparable performance I 
> would think. But maybe I'm missing something?
> 
> --Sean
> 
> Vishal Mahajan wrote:
>> Do others also have views on this discussion?
>>
>> Thanks,
>> Vishal
>>
>> Vishal Mahajan wrote:
>>> Hi Raul,
>>>
>>> The parser that I am working with clearly doesn't intern element 
>>> namespace strings which is the reason I ran into this problem. And 
>>> actually I am not sure whether it's a good idea for a parser to 
>>> intern element namespace strings given that there could be huge 
>>> number of elements being parsed and there's a potential risk of 
>>> running out of memory. Also you mention that xerces might be 
>>> interning namespace stings but looking at their code I was unable to 
>>> find that. Can you point me to the relevant piece of code?
>>>
>>> Thanks,
>>>
>>> Vishal
>>>
>>> Raul Benito wrote:
>>>> Vishal the problem is that this codes is called gazillion of times, 
>>>> and even it
>>>> seems a small thing, it takes a lot of accumulated time, I even think
>>>> in remove this checking altogether or control it by a property.
>>>> Perhaps there is a feature set in your DOM parser that interns the
>>>> namespaces. I have test with several DOM parsers (xerces, xmlbeans,
>>>> jaxb) and all of them the namespaces strings are interns.
>>>> If you are not able too toggle the behavior, We can begin to think in
>>>> other possibilities (create code on the fly, create an interface with
>>>> one implementation or the other a let the JVM inline it). But I think
>>>> will be the last resort.
>>>>
>>>> Regards,
>>>> Raul
>>>>
>>>> On 10/2/06, Vishal Mahajan <vmahajan@amberpoint.com> wrote:
>>>>> Any signature verification was failing for me, and I have a different
>>>>> DOM implementation in my environment, so probably you are right. It 
>>>>> was
>>>>> such a basic error that it had to be something like this. In any 
>>>>> case, I
>>>>> think we should keep string comparison safe.
>>>>>
>>>>> Vishal
>>>>>
>>>>> Raul Benito wrote:
>>>>> > Hi Vishal,
>>>>> >
>>>>> > The namespaces strings are intern, at least in xerces.
>>>>> >
>>>>> > Can you post the code that is failing?
>>>>> >
>>>>> > On 10/2/06, Vishal Mahajan <vmahajan@amberpoint.com> wrote:
>>>>> >> This problem was not allowing successful creation of signature

>>>>> space
>>>>> >> elements. Fix attached.
>>>>> >>
>>>>> >> Vishal
>>>>> >>
>>>>> >>
>>>>> >>
>>>>> >> Index: ElementProxy.java
>>>>> >> ===================================================================
>>>>> >> --- ElementProxy.java   (revision 451991)
>>>>> >> +++ ElementProxy.java   (working copy)
>>>>> >> @@ -281,7 +281,7 @@
>>>>> >>
>>>>> >>        String localnameIS = 
>>>>> this._constructionElement.getLocalName();
>>>>> >>        String namespaceIS = 
>>>>> this._constructionElement.getNamespaceURI();
>>>>> >> -      if ((namespaceSHOULDBE!=namespaceIS) ||
>>>>> >> +      if (!namespaceSHOULDBE.equals(namespaceIS) ||
>>>>> >>         !localnameSHOULDBE.equals(localnameIS) ) {
>>>>> >>           Object exArgs[] = { namespaceIS +":"+ localnameIS,
>>>>> >>             namespaceSHOULDBE +":"+ localnameSHOULDBE};
>>>>> >>
>>>>> >>
>>>>> >>
>>>>> >
>>>>> >
>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>>
>>>
>>
>>
> 


Mime
View raw message