Hi Raul,

Could you think of a way we can fix the problem without having a significant performance hit. This clearly is a blocking issue for me. If eventually we decide to change the comparisons to use String.equals() I could give you the list of all relevant occurrences in the code.

Thanks,
Vishal

Raul Benito wrote:
Hi Sean,

The penalty hit is taken when the strings are not equal, sadly of the
same length.
And have a lot of common begging characters. That is sadly a common
problem with namespaces URI, they are more or less equal in length and
have a lot of damn http://.../... or urn:....: whatever at the
begining. And that is why Xerces and other DOM implementations  intern
namespaces URI.

I have profile and it takes a lot of time.
My point is that all the parsers I know do the intern (or it did when
I do the implementation). And this is an old commit 8 months old(it is
true that it is not yet on a official release), and it takes a
measurable hit if not use in small messages(the kind of one that are
in xml protocols).

So I will first check other options (change the configuration of the
offending parser with a
feature[http://xerces.apache.org/xerces2-j/features.html] ).
If it does not work I will change from == to equals, but I will let
this as last resort.

On 10/5/06, Sean Mullan <[EMAIL PROTECTED]> 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