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};
>>
>>
>>
>
>