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;