public void serialize()

in src/main/java/org/apache/neethi/Policy.java [123:209]


    public void serialize(XMLStreamWriter writer) throws XMLStreamException {
        String nspace = namespace;
        if (namespace == null) {
            nspace = Constants.findPolicyNamespace(writer);
        }
        String wspPrefix = writer.getPrefix(nspace);

        if (wspPrefix == null) {
            wspPrefix = Constants.ATTR_WSP;
            writer.setPrefix(wspPrefix, nspace);
        }

        String wsuPrefix = writer.getPrefix(Constants.URI_WSU_NS);
        if (wsuPrefix == null) {
            wsuPrefix = Constants.ATTR_WSU;
            writer.setPrefix(wsuPrefix, Constants.URI_WSU_NS);
        }

        writer.writeStartElement(wspPrefix, Constants.ELEM_POLICY,
                nspace);

        QName key;
        
        String prefix = null;
        String namespaceURI = null;
        String localName = null;

        Map<String, String> prefix2ns = new HashMap<String, String>();
        boolean writeNS = true;

        for (Map.Entry<QName, String> ents : attributes.entrySet()) {
            
            key = ents.getKey();
            localName = key.getLocalPart();
            
            namespaceURI = key.getNamespaceURI();
            namespaceURI = (namespaceURI == null || namespaceURI.length() == 0) ? null : namespaceURI;
                        
            if (namespaceURI != null && XMLConstants.XMLNS_ATTRIBUTE_NS_URI.equals(namespaceURI)) {
                writer.writeNamespace(localName, ents.getValue());
                if (nspace.equals(ents.getValue())) {
                    writeNS = false;
                }
            } else if (namespaceURI != null) {
                String writerPrefix = writer.getPrefix(namespaceURI);
                writerPrefix = (writerPrefix == null || writerPrefix.length() == 0) ? null : writerPrefix;
                
                if (writerPrefix == null) {
                    prefix = key.getPrefix();
                    prefix = (prefix == null || prefix.length() == 0) ? null : prefix;
                    
                } else {
                    prefix = writerPrefix;
                }
                
                if (prefix != null) {
                    writer.writeAttribute(prefix, namespaceURI, localName, ents.getValue());
                    prefix2ns.put(prefix, key.getNamespaceURI());

                } else {
                    writer.writeAttribute(namespaceURI, localName, ents.getValue());
                }
                    
            } else {
                writer.writeAttribute(localName, getAttribute(key));
            }

            
        }

        if (writeNS) {
            // writes xmlns:wsp=".."
            writer.writeNamespace(wspPrefix, nspace);
        }


        for (String pfx :prefix2ns.keySet()) {
            writer.writeNamespace(pfx, prefix2ns.get(pfx));
        }

        for (PolicyComponent policyComponent : getPolicyComponents()) {
            policyComponent.serialize(writer);
        }

        writer.writeEndElement();

    }