atom feed15 messages in org.apache.ws.commons-devRe: Stax parsers - one more variation
FromSent OnAttachments
Davanum SrinivasJul 27, 2009 3:45 pm 
Andreas VeithenJul 28, 2009 12:21 am 
Andreas VeithenJul 28, 2009 5:33 am 
R J Scheuerle JrJul 28, 2009 5:52 am 
Davanum SrinivasJul 28, 2009 6:04 am 
R J Scheuerle JrJul 28, 2009 6:35 am 
Andreas VeithenJul 28, 2009 7:09 am 
R J Scheuerle JrJul 28, 2009 7:14 am 
Andreas VeithenAug 2, 2009 2:07 am.zip
Davanum SrinivasAug 2, 2009 6:42 pm 
Andreas VeithenAug 3, 2009 12:26 am 
Davanum SrinivasAug 3, 2009 4:43 am 
Andreas VeithenAug 8, 2009 8:24 am.zip
Andreas VeithenAug 8, 2009 11:44 am 
Davanum SrinivasAug 9, 2009 4:15 pm 
Subject:Re: Stax parsers - one more variation
From:Andreas Veithen (andr@gmail.com)
Date:Jul 28, 2009 12:21:44 am
List:org.apache.ws.commons-dev

Dims,

Actually I initially developed the idea to have the concept of a "StAX dialect" in Axiom when I saw this piece of code. I started to implement this feature when trying to solve the thread safety issue, but the aim is clearly to get rid of the isSetPrefixBeforeStartElement hack(s).

I had a closer look at the code during the weekend, but I fail to see in which case we would actually need/have isSetPrefixBeforeStartElement == true. In my opinion, the StAX specifications don't leave enough room for the second interpretation (that setPrefix would apply to the next writeStartElement) [1]. Also, of all the StAX implementations I've seen, none expects this. Do you have any idea which "user community" "believes" this?

Andreas

[1] http://people.apache.org/~veithen/axiom/devguide/ch02.html#d0e69

On Tue, Jul 28, 2009 at 00:45, Davanum Srinivas<dava@gmail.com> wrote:

Andreas,

Not sure if you have seen this already. There's some convoluted code in org/apache/axiom/om/impl/util/OMSerializerUtil.java (method isSetPrefixBeforeStartElement) which basically has a toggle based on the parsers.

           // Fallback: Toggle based on sun or woodstox implementation.            NamespaceContext nc = writer.getNamespaceContext();            ret = (nc == null ||                    (nc.getClass().getName().indexOf("wstx") == -1 &&                            nc.getClass().getName().indexOf("weblogic") == -1 &&                            nc.getClass().getName().indexOf("sun") == -1));

The javadoc has more information:

   /**     * Unfortunately there is disagreement in the user community about the semantics of setPrefix on     * the XMLStreamWriter.  An example will explain the difference: writer.startElement("a")     * writer.setPrefix("pre", "urn://sample") writer.startElement("b")     * <p/>     * Some user communities (woodstox) believe that the setPrefix is associate with the scope for     * "a" and thus remains in scope until the end of a.  The basis for this believe is     * XMLStreamWriter javadoc (which some would argue is incomplete).     * <p/>     * Some user communities believe that the setPrefix is associated with the "b" element. These     * communities reference an example in the specification and historical usage of SAX.     * <p/>     * This method will return true if the setPrefix is associated with the next writeStartElement.     *     * @param writer     * @return true if setPrefix should be generated before startElement     */

Can you please take a look?

If we can find a way to totally remove the need for caching the boolean after checking the xmlstreamwriter, that would be a big bonus.

thanks, dims