axis-java-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Jeff Ling" <jeffl...@google.com>
Subject Re: patch for org.apache.axiom.om.impl.serialize.StreamingOMSerializer
Date Mon, 05 Jun 2006 17:43:04 GMT
Hi Eran,

Here is the diff:

In
StreamingOMSerializer::serializeAttributes

Original code:

            namespaceName = reader.getAttributeNamespace(i);
              writerPrefix
=writer.getNamespaceContext().getPrefix(namespaceName);


Here is my fix:

            namespaceName = reader.getAttributeNamespace(i);
            if (namespaceName != null)
              writerPrefix =writer.getNamespaceContext
().getPrefix(namespaceName);

            if (namespaceName != null && !"".equals(namespaceName)){
                //prefix has already being declared but this particular
attrib has a

Thanks!
Jeff

On 6/5/06, Eran Chinthaka <chinthaka@opensource.lk> wrote:
>
> Hi Jeff,
>
> I think I replied once. Let me re-reply :).
>
> The file you have attached is not a patch, rather a diff. Its the whole
> file, which make it hard to find the changes you have done. can you
> please create a diff and send it over.
>
> -- Chinthaka
>
> Jeff Ling wrote:
> > Hi Eran,
> >
> > Did you look at the file? Do you think it's a problem? If so, when can
> > it be patched?
> >
> > Thanks,
> > Jeff
> >
> >
> > On 6/4/06, *Jeff Ling* < jeffling@google.com
> > <mailto:jeffling@google.com>> wrote:
> >
> >     Hi Eran,
> >
> >     Here is the file again.
> >
> >     Thanks,
> >     Jeff
> >
> >
> >     On 6/3/06, *Eran Chinthaka * <chinthaka@opensource.lk
> >     <mailto:chinthaka@opensource.lk>> wrote:
> >
> >         Hi Jeff,
> >
> >         Thanks for reporting this.
> >
> >         But the file you have attached doesn't seemed to be a patch. Can
> >         you
> >         please re-create it and send it over.
> >
> >         -- Chinthaka
> >
> >         Jeff Ling wrote:
> >         > Hi guys,
> >         >
> >         > I got NullpointerException with the request content:
> >         >
> >         > <?xml version='1.0' encoding='utf-8'?><soapenv:Envelope
> >         xmlns:soapenv="
> >         > http://schemas.xmlsoap.org/soap/envelope/
> >         <
> http://www.google.com/url?sa=D&q=http%3A%2F%2Fschemas.xmlsoap.org%2Fsoap%2Fenvelope%2F
> >
> >         > <
> http://www.google.com/url?sa=D&q=http%3A%2F%2Fschemas.xmlsoap.org%2Fsoap%2Fenvelope%2F
> >         <
> http://www.google.com/url?sa=D&q=http%3A%2F%2Fschemas.xmlsoap.org%2Fsoap%2Fenvelope%2F
> >>"><soapenv:Header
> >         > /><soapenv:Body><ns1:GetListItems xmlns:ns1="
> >         > http://schemas.microsoft.com/sharepoint/soap/
> >         <
> http://www.google.com/url?sa=D&q=http%3A%2F%2Fschemas.microsoft.com%2Fsharepoint%2Fsoap%2F
> >
> >
> >         > <
> http://www.google.com/url?sa=D&q=http%3A%2F%2Fschemas.microsoft.com%2Fsharepoint%2Fsoap%2F
> >         <
> http://www.google.com/url?sa=D&q=http%3A%2F%2Fschemas.microsoft.com%2Fsharepoint%2Fsoap%2F
> >>"><listName
> >
> >         > xmlns=" http://schemas.microsoft.com/sharepoint/soap/
> >         <
> http://www.google.com/url?sa=D&q=http%3A%2F%2Fschemas.microsoft.com%2Fsharepoint%2Fsoap%2F
> >
> >         > <
> >
> http://www.google.com/url?sa=D&q=http%3A%2F%2Fschemas.microsoft.com%2Fsharepoint%2Fsoap%2F
> >         <
> http://www.google.com/url?sa=D&q=http%3A%2F%2Fschemas.microsoft.com%2Fsharepoint%2Fsoap%2F
> >>">{F8AC172B-2763-4898-B322-935BECA90900}</listName><Query
> >         > /><QueryOptions><ViewAttributes Scope="Recursive"
> >         >
> /></QueryOptions></ns1:GetListItems></soapenv:Body></soapenv:Envelope>
> >         >
> >         >
> >         > I traced down to StreamingOMSerializer::serializeAttributes
> >         >
> >         >             namespaceName = reader.getAttributeNamespace(i);
> >         >               writerPrefix
> >         > =writer.getNamespaceContext().getPrefix(namespaceName);
> >         > In this case, "ViewAttributes"'s attribute namspace is null,
> and
> >         > namspacecontext.getPrefix caused exception.
> >         >
> >         > Here is my fix:
> >         >
> >         >             namespaceName = reader.getAttributeNamespace(i);
> >         >             if (namespaceName != null)
> >         >               writerPrefix
> >         > =writer.getNamespaceContext().getPrefix(namespaceName);
> >         >
> >         >             if (namespaceName != null &&
> >         !"".equals(namespaceName)){
> >         >                 //prefix has already being declared but this
> >         particular
> >         > attrib has a
> >         >
> >         >
> >         > File is attached. I am not sure whether this group is
> >         responsible for
> >         > axiom, or I should submit to some other list? Please advice.
> >         (seems to
> >         > me ther only other list is "commons".)
> >         >
> >         > Thanks,
> >         > Jeff
> >         >
> >         >
> >         >
> ------------------------------------------------------------------------
> >         >
> >         > /*
> >         >  * Copyright 2004,2005 The Apache Software Foundation.
> >         >  *
> >         >  * Licensed under the Apache License, Version 2.0 (the
> "License");
> >         >  * you may not use this file except in compliance with the
> License.
> >         >  * You may obtain a copy of the License at
> >         >  *
> >         >  *      http://www.apache.org/licenses/LICENSE-2.0
> >         <
> http://www.google.com/url?sa=D&q=http%3A%2F%2Fwww.apache.org%2Flicenses%2FLICENSE-2.0
> >
> >         >  *
> >         >  * Unless required by applicable law or agreed to in writing,
> >         software
> >         >  * distributed under the License is distributed on an "AS IS"
> >         BASIS,
> >         >  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
> express
> >         or implied.
> >         >  * See the License for the specific language governing
> >         permissions and
> >         >  * limitations under the License.
> >         >  */
> >         >
> >         > package org.apache.axiom.om.impl.serialize;
> >         >
> >         > import org.apache.axiom.om.OMSerializer;
> >         >
> >         > import javax.xml.namespace.NamespaceContext;
> >         > import javax.xml.stream.XMLStreamConstants ;
> >         > import javax.xml.stream.XMLStreamException;
> >         > import javax.xml.stream.XMLStreamReader;
> >         > import javax.xml.stream.XMLStreamWriter;
> >         >
> >         > /**
> >         >  * Class StreamingOMSerializer
> >         >  */
> >         > public class StreamingOMSerializer implements
> >         XMLStreamConstants, OMSerializer {
> >         >
> >         >     private static int namespaceSuffix = 0;
> >         >     public static final String NAMESPACE_PREFIX = "ns";
> >         >
> >         >     /*
> >         >     * The behavior of the serializer is such that it returns
> >         when it encounters the
> >         >     * starting element for the second time. The depth variable
> >         tracks the depth of the
> >         >     * serilizer and tells it when to return.
> >         >     * Note that it is assumed that this serialization starts
> on
> >         an Element.
> >         >     */
> >         >
> >         >     /**
> >         >      * Field depth
> >         >      */
> >         >     private int depth = 0;
> >         >
> >         >     /**
> >         >      * Method serialize.
> >         >      *
> >         >      * @param node
> >         >      * @param writer
> >         >      * @throws XMLStreamException
> >         >      */
> >         >     public void serialize(XMLStreamReader node,
> XMLStreamWriter
> >         writer)
> >         >             throws XMLStreamException {
> >         >         serializeNode(node, writer);
> >         >     }
> >         >
> >         >     /**
> >         >      * Method serializeNode.
> >         >      *
> >         >      * @param reader
> >         >      * @param writer
> >         >      * @throws XMLStreamException
> >         >      */
> >         >     protected void serializeNode(XMLStreamReader reader,
> >         XMLStreamWriter writer)
> >         >             throws XMLStreamException {
> >         >         //TODO We get the StAXWriter at this point and uses it
> >         hereafter assuming that this is the only entry point to this
> class.
> >         >         // If there can be other classes calling methodes of
> >         this we might need to change methode signatures to OMOutputer
> >         >         while (reader.hasNext()) {
> >         >             int event = reader.next();
> >         >             if (event == START_ELEMENT) {
> >         >                 serializeElement(reader, writer);
> >         >                 depth++;
> >         >             } else if (event == ATTRIBUTE) {
> >         >                 serializeAttributes(reader, writer);
> >         >             } else if (event == CHARACTERS) {
> >         >                 serializeText(reader, writer);
> >         >             } else if (event == COMMENT) {
> >         >                 serializeComment(reader, writer);
> >         >             } else if (event == CDATA) {
> >         >                 serializeCData(reader, writer);
> >         >             } else if (event == END_ELEMENT) {
> >         >                 serializeEndElement(writer);
> >         >                 depth--;
> >         >             }else if (event == START_DOCUMENT) {
> >         >                 depth++; //if a start document is found then
> >         increment the depth
> >         >             } else if (event == END_DOCUMENT) {
> >         >                 if (depth!=0) depth--;  //for the end document
> >         - reduce the depth
> >         >                 try {
> >         >                     serializeEndElement(writer);
> >         >                 } catch (Exception e) {
> >         >                     //TODO: log exceptions
> >         >                 }
> >         >             }
> >         >             if (depth == 0) {
> >         >                 break;
> >         >             }
> >         >         }
> >         >     }
> >         >
> >         >     /**
> >         >      * @param reader
> >         >      * @param writer
> >         >      * @throws XMLStreamException
> >         >      */
> >         >     protected void serializeElement(XMLStreamReader reader,
> >         >                                     XMLStreamWriter writer)
> >         >             throws XMLStreamException {
> >         >         String prefix = reader.getPrefix();
> >         >         String nameSpaceName = reader.getNamespaceURI();
> >         >         if (nameSpaceName != null) {
> >         >             String writer_prefix = writer.getPrefix
> (nameSpaceName);
> >         >             if (writer_prefix != null) {
> >         >                 writer.writeStartElement(nameSpaceName,
> >         reader.getLocalName());
> >         >             } else {
> >         >                 if (prefix != null) {
> >         >                     writer.writeStartElement(prefix,
> >         reader.getLocalName(),
> >         >                             nameSpaceName);
> >         >                     writer.writeNamespace(prefix,
> nameSpaceName);
> >         >                     writer.setPrefix(prefix, nameSpaceName);
> >         >                 } else {
> >         >                     writer.writeStartElement(nameSpaceName,
> >         >                             reader.getLocalName());
> >         >                     writer.writeDefaultNamespace
> (nameSpaceName);
> >         >                     writer.setDefaultNamespace(nameSpaceName);
> >         >                 }
> >         >             }
> >         >         } else {
> >         >             writer.writeStartElement(reader.getLocalName());
> >         >         }
> >         >
> >         >
> >         >         // add the namespaces
> >         >         int count = reader.getNamespaceCount();
> >         >         String namespacePrefix;
> >         >         for (int i = 0; i < count; i++) {
> >         >             namespacePrefix = reader.getNamespacePrefix(i);
> >         >             if(namespacePrefix != null &&
> >         namespacePrefix.length()==0)
> >         >                 continue;
> >         >
> >         >             serializeNamespace(namespacePrefix,
> >         >                     reader.getNamespaceURI(i), writer);
> >         >         }
> >         >
> >         >         // add attributes
> >         >         serializeAttributes(reader, writer);
> >         >
> >         >     }
> >         >
> >         >     /**
> >         >      * Method serializeEndElement.
> >         >      *
> >         >      * @param writer
> >         >      * @throws XMLStreamException
> >         >      */
> >         >     protected void serializeEndElement(XMLStreamWriter writer)
> >         >             throws XMLStreamException {
> >         >         writer.writeEndElement();
> >         >     }
> >         >
> >         >     /**
> >         >      * @param reader
> >         >      * @param writer
> >         >      * @throws XMLStreamException
> >         >      */
> >         >     protected void serializeText(XMLStreamReader reader,
> >         >                                  XMLStreamWriter writer)
> >         >             throws XMLStreamException {
> >         >         writer.writeCharacters(reader.getText());
> >         >     }
> >         >
> >         >     /**
> >         >      * Method serializeCData.
> >         >      *
> >         >      * @param reader
> >         >      * @param writer
> >         >      * @throws XMLStreamException
> >         >      */
> >         >     protected void serializeCData(XMLStreamReader reader,
> >         >                                   XMLStreamWriter writer)
> >         >             throws XMLStreamException {
> >         >         writer.writeCData(reader.getText());
> >         >     }
> >         >
> >         >     /**
> >         >      * Method serializeComment.
> >         >      *
> >         >      * @param reader
> >         >      * @param writer
> >         >      * @throws XMLStreamException
> >         >      */
> >         >     protected void serializeComment(XMLStreamReader reader,
> >         >                                     XMLStreamWriter writer)
> >         >             throws XMLStreamException {
> >         >         writer.writeComment(reader.getText());
> >         >     }
> >         >
> >         >     /**
> >         >      * @param reader
> >         >      * @param writer
> >         >      * @throws XMLStreamException
> >         >      */
> >         >     protected void serializeAttributes(XMLStreamReader reader,
> >         >                                        XMLStreamWriter writer)
> >         >             throws XMLStreamException {
> >         >         int count = reader.getAttributeCount();
> >         >         String prefix = null;
> >         >         String namespaceName = null;
> >         >         String writerPrefix=null;
> >         >         for (int i = 0; i < count; i++) {
> >         >             prefix = reader.getAttributePrefix(i);
> >         >             namespaceName = reader.getAttributeNamespace(i);
> >         >             if (namespaceName != null)
> >         >               writerPrefix
> >         =writer.getNamespaceContext().getPrefix(namespaceName);
> >         >
> >         >             if (namespaceName != null &&
> >         !"".equals(namespaceName)){
> >         >                 //prefix has already being declared but this
> >         particular attrib has a
> >         >                 //no prefix attached. So use the prefix
> >         provided by the writer
> >         >                 if (writerPrefix!=null && (prefix==null ||
> >         prefix.equals(""))){
> >         >                     writer.writeAttribute(writerPrefix,
> >         namespaceName,
> >         >                             reader.getAttributeLocalName(i),
> >         >                             reader.getAttributeValue(i));
> >         >
> >         >                     //writer prefix is available but different
> >         from the current
> >         >                     //prefix of the attrib. We should be
> >         decalring the new prefix
> >         >                     //as a namespace declaration
> >         >                 }else if (prefix!=null && !"".equals(prefix)&&
> >         !prefix.equals(writerPrefix)){
> >         >                     writer.writeNamespace(prefix,namespaceName);
> >         >                     writer.writeAttribute(prefix,
> namespaceName,
> >         >                             reader.getAttributeLocalName(i),
> >         >                             reader.getAttributeValue (i));
> >         >
> >         >                     //prefix is null (or empty), but the
> >         namespace name is valid! it has not
> >         >                     //being written previously also. So we
> need
> >         to generate a prefix
> >         >                     //here
> >         >                 }else{
> >         >                     prefix =
> >         generateUniquePrefix(writer.getNamespaceContext());
> >         >                     writer.writeNamespace
> (prefix,namespaceName);
> >         >                     writer.writeAttribute(prefix,
> namespaceName,
> >         >                             reader.getAttributeLocalName(i),
> >         >                             reader.getAttributeValue(i));
> >         >                 }
> >         >             }else{
> >         >                 //empty namespace is equal to no namespace!
> >         >
> >         writer.writeAttribute(reader.getAttributeLocalName(i),
> >         >                         reader.getAttributeValue(i));
> >         >             }
> >         >
> >         >
> >         >         }
> >         >     }
> >         >
> >         >     /**
> >         >      * Generates a unique namespace prefix that is not in the
> >         >      * scope of the NamespaceContext
> >         >      * @param nsCtxt
> >         >      * @return string
> >         >      */
> >         >     private String generateUniquePrefix(NamespaceContext
> nsCtxt){
> >         >         String prefix = NAMESPACE_PREFIX + namespaceSuffix++;
> >         >         //null should be returned if the prefix is not bound!
> >         >         while(nsCtxt.getNamespaceURI(prefix)!=null){
> >         >             prefix = NAMESPACE_PREFIX + namespaceSuffix++;
> >         >         }
> >         >
> >         >         return prefix;
> >         >     }
> >         >     /**
> >         >      * Method serializeNamespace.
> >         >      * @param prefix
> >         >      * @param URI
> >         >      * @param writer
> >         >      * @throws XMLStreamException
> >         >      */
> >         >     private void serializeNamespace(String prefix,
> >         >                                     String URI,
> >         >                                     XMLStreamWriter writer)
> >         >             throws XMLStreamException {
> >         >         String prefix1 = writer.getPrefix(URI);
> >         >         if (prefix1 == null) {
> >         >             writer.writeNamespace(prefix, URI);
> >         >             writer.setPrefix(prefix, URI);
> >         >         }
> >         >     }
> >         > }
> >         >
> >         >
> >         >
> >         >
> >         >
> ------------------------------------------------------------------------
> >
> >         >
> >         >
> ---------------------------------------------------------------------
> >         > To unsubscribe, e-mail: axis-dev-unsubscribe@ws.apache.org
> >         <mailto:axis-dev-unsubscribe@ws.apache.org>
> >         > For additional commands, e-mail: axis-dev-help@ws.apache.org
> >         <mailto:axis-dev-help@ws.apache.org>
> >
> >
> >
> >
> >
> >
> >
>
>
>
>
>

Mime
View raw message