axis-java-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Eran Chinthaka <chinth...@opensource.lk>
Subject Re: patch for org.apache.axiom.om.impl.serialize.StreamingOMSerializer
Date Mon, 05 Jun 2006 17:14:44 GMT
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