in shared-libraries/servicemix-soap2/src/main/java/org/apache/servicemix/soap/util/stax/StaxUtil.java [199:307]
private static void writeStartElement(XMLStreamReader reader, XMLStreamWriter writer)
throws XMLStreamException
{
String local = reader.getLocalName();
String uri = reader.getNamespaceURI();
String prefix = reader.getPrefix();
if (prefix == null)
{
prefix = "";
}
if (uri == null)
{
uri = "";
}
String boundPrefix = writer.getPrefix(uri);
boolean writeElementNS = false;
if ( boundPrefix == null || !prefix.equals(boundPrefix) )
{
writeElementNS = true;
}
// Write out the element name
if (uri != null)
{
if (prefix.length() == 0)
{
writer.writeStartElement(local);
writer.setDefaultNamespace(uri);
}
else
{
writer.writeStartElement(prefix, local, uri);
writer.setPrefix(prefix, uri);
}
}
else
{
writer.writeStartElement( local );
}
// Write out the namespaces
for ( int i = 0; i < reader.getNamespaceCount(); i++ )
{
String nsURI = reader.getNamespaceURI(i);
String nsPrefix = reader.getNamespacePrefix(i);
if (nsPrefix == null) nsPrefix = "";
if ( nsPrefix.length() == 0 )
{
writer.writeDefaultNamespace(nsURI);
}
else
{
writer.writeNamespace(nsPrefix, nsURI);
}
if (nsURI.equals(uri) && nsPrefix.equals(prefix))
{
writeElementNS = false;
}
}
// Check if the namespace still needs to be written.
// We need this check because namespace writing works
// different on Woodstox and the RI.
if (writeElementNS)
{
if ( prefix == null || prefix.length() == 0 )
{
writer.writeDefaultNamespace(uri);
}
else
{
writer.writeNamespace(prefix, uri);
}
}
// Write out attributes
for ( int i = 0; i < reader.getAttributeCount(); i++ )
{
String ns = reader.getAttributeNamespace(i);
String nsPrefix = reader.getAttributePrefix(i);
if ( ns == null || ns.length() == 0 )
{
writer.writeAttribute(
reader.getAttributeLocalName(i),
reader.getAttributeValue(i));
}
else if (nsPrefix == null || nsPrefix.length() == 0)
{
writer.writeAttribute(
reader.getAttributeNamespace(i),
reader.getAttributeLocalName(i),
reader.getAttributeValue(i));
}
else
{
writer.writeAttribute(reader.getAttributePrefix(i),
reader.getAttributeNamespace(i),
reader.getAttributeLocalName(i),
reader.getAttributeValue(i));
}
}
}