gdaniels    02/04/03 13:44:41

  Modified:    java/src/org/apache/axis/deployment/wsdd WSDDService.java
               java/src/org/apache/axis/encoding
                        SerializationContextImpl.java
               java/src/org/apache/axis/utils NSStack.java Mapping.java
  Log:
  * Fix SerializationContextImpl to handle unqualified elements correctly.
    If there's an in-scope default namespace, use xmlns="" to shut it off.
    Later we should be smart about setting xmlns="" on elements whose
    schema indicates that they contain unqualified local elements.
  
  * Emit elements this way, do not emit attributes this way yet
  
  * Fix NSStack to avoid duplicate prefix mappings - currently last one
    wins, but we might also consider faulting...?
  
  Revision  Changes    Path
  1.52      +2 -1      
xml-axis/java/src/org/apache/axis/deployment/wsdd/WSDDService.java
  
  Index: WSDDService.java
  ===================================================================
  RCS file: 
/home/cvs/xml-axis/java/src/org/apache/axis/deployment/wsdd/WSDDService.java,v
  retrieving revision 1.51
  retrieving revision 1.52
  diff -u -r1.51 -r1.52
  --- WSDDService.java  3 Apr 2002 06:09:55 -0000       1.51
  +++ WSDDService.java  3 Apr 2002 21:44:41 -0000       1.52
  @@ -486,7 +486,8 @@
           }
   
           for (int i=0; i < namespaces.size(); i++ ) {
  -            context.startElement(new QName("", "namespace"), null);
  +            context.startElement(new QName(WSDDConstants.WSDD_NS, "namespace"),
  +                                 null);
               context.writeString((String)namespaces.get(i));
               context.endElement();
           }
  
  
  
  1.16      +35 -11    
xml-axis/java/src/org/apache/axis/encoding/SerializationContextImpl.java
  
  Index: SerializationContextImpl.java
  ===================================================================
  RCS file: 
/home/cvs/xml-axis/java/src/org/apache/axis/encoding/SerializationContextImpl.java,v
  retrieving revision 1.15
  retrieving revision 1.16
  diff -u -r1.15 -r1.16
  --- SerializationContextImpl.java     1 Apr 2002 20:12:16 -0000       1.15
  +++ SerializationContextImpl.java     3 Apr 2002 21:44:41 -0000       1.16
  @@ -364,19 +364,38 @@
   
       /**
        * Convert QName to a string of the form <prefix>:<localpart>
  -     * @param QName
  +     * @param qName
        * @return prefixed qname representation for serialization.
        */
  -    public String qName2String(QName qName)
  +    public String qName2String(QName qName, boolean writeNS)
       {
  -        String prefix = getPrefixForURI(qName.getNamespaceURI());
  -        return (((prefix != null)&&(!prefix.equals(""))) ? prefix + ":" : "") +
  -               qName.getLocalPart();
  +        String prefix = null;
  +
  +        if (qName.getNamespaceURI().equals("")) {
  +            if (writeNS) {
  +                // If this is unqualified (i.e. prefix ""), set the default
  +                // namespace to ""
  +                String defaultNS = nsStack.getNamespaceURI("");
  +                if (defaultNS != null) {
  +                    registerPrefixForURI("", "");
  +                }
  +            }
  +        } else {
  +            prefix = getPrefixForURI(qName.getNamespaceURI());
  +        }
  +
  +        return (((prefix != null) && (!prefix.equals(""))) ?
  +                      prefix + ":" : "") +
  +           qName.getLocalPart();
       }
   
  +    public String qName2String(QName qName)
  +    {
  +        return qName2String(qName, false);
  +    }
       /**
        * Get the QName associated with the specified class.
  -     * @param Class of an object requiring serialization.
  +     * @param cls Class of an object requiring serialization.
        * @return appropriate QName associated with the class.
        */
       public QName getQNameForClass(Class cls)
  @@ -617,7 +636,7 @@
           }
   
           if (pretty) for (int i=0; i<indent; i++) writer.write(' ');
  -        String elementQName = qName2String(qName);
  +        String elementQName = qName2String(qName, true);
           writer.write("<");
   
           writer.write(elementQName);
  @@ -875,15 +894,20 @@
        * associated java.lang class.  So the javaType is needed to know that the value
        * is really a wrapped primitive.
        */
  -    public void serializeActual(QName name, Attributes attributes, Object value, 
Class javaType)
  +    public void serializeActual(QName qName,
  +                                Attributes attributes,
  +                                Object value,
  +                                Class javaType)
           throws IOException
       {
           if (value != null) {
               TypeMapping tm = getTypeMapping();
   
               if (tm == null) {
  -                throw new IOException(JavaUtils.getMessage("noSerializer00",
  -                                                           
value.getClass().getName(), "" + this));
  +                throw new IOException(
  +                        JavaUtils.getMessage("noSerializer00",
  +                                             value.getClass().getName(),
  +                                             "" + this));
               }
   
               Class_Serializer pair = getSerializer(javaType, value);
  @@ -897,7 +921,7 @@
                   // in the interop tests.
                   //if (name.equals(multirefQName) && type != null)
                   //    name = type;
  -                pair.ser.serialize(name, attributes, value, this);
  +                pair.ser.serialize(qName, attributes, value, this);
                   return;
               }
   
  
  
  
  1.21      +9 -0      xml-axis/java/src/org/apache/axis/utils/NSStack.java
  
  Index: NSStack.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/utils/NSStack.java,v
  retrieving revision 1.20
  retrieving revision 1.21
  diff -u -r1.20 -r1.21
  --- NSStack.java      13 Mar 2002 16:07:56 -0000      1.20
  +++ NSStack.java      3 Apr 2002 21:44:41 -0000       1.21
  @@ -60,6 +60,7 @@
   import java.util.ArrayList;
   import java.util.Enumeration;
   import java.util.Stack;
  +import java.util.Iterator;
   
   /**
    * @author: James Snell
  @@ -144,6 +145,14 @@
               table = new ArrayList();
               stack.pop();
               stack.push(table);
  +        }
  +        // Replace duplicate prefixes (last wins - this could also fault)
  +        for (Iterator i = table.iterator(); i.hasNext();) {
  +            Mapping mapping = (Mapping)i.next();
  +            if (mapping.getPrefix().equals(prefix)) {
  +                mapping.setNamespaceURI(namespaceURI);
  +                return;
  +            }
           }
           table.add(new Mapping(namespaceURI, prefix));
       }
  
  
  
  1.3       +5 -0      xml-axis/java/src/org/apache/axis/utils/Mapping.java
  
  Index: Mapping.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/utils/Mapping.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- Mapping.java      30 Oct 2001 14:19:32 -0000      1.2
  +++ Mapping.java      3 Apr 2002 21:44:41 -0000       1.3
  @@ -68,6 +68,11 @@
       {
           return namespaceURI;
       }
  +
  +    public void setNamespaceURI(String namespaceURI) {
  +        this.namespaceURI = namespaceURI;
  +    }
  +
       public String getPrefix()
       {
           return prefix;
  
  
  


Reply via email to