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 <[EMAIL PROTECTED]> 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 <[EMAIL PROTECTED]> 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};
>>
>>
>>
>
>











Reply via email to