Element childElement;
if (child instanceof CompositeMessagePartRef)
{
CompositeMessagePart referentPart = ((CompositeMessagePartRef)child).getRefPart();
Message referentMessage = ((RootXMLMessagePartMapping)referentPart.getMapping()).getRootMessage();
childType = createCompositeType(referentPart, referentMessage);
childElement = new Element(childMapping.getNodeName());
childElement.setType(childType);
childElement.setDescription(child.getDescription());
if (bEnvelopeHeaders)
{
addEnvelopeHeader(child, childElement, true);
}
}
else
{
XMLNamespace childNamespace = childMapping.getNamespace();
String sURI = (childNamespace == null) ? null : childNamespace.getURI();
if (sURI != null && !sURI.equals(m_sNamespaceURI))
{
// Element reference (different namespace)
String sCurrentNamespace = m_sNamespaceURI;
Schema otherNSSchema = m_universe.getSchema(sURI, childNamespace.getName());
m_sNamespaceURI = sURI;
childType = createCompositeType((CompositeMessagePart)child, null);
Element otherNSElement = new Element(childMapping.getNodeName());
setElementProperties(otherNSElement, (CompositeMessagePart)child);
otherNSElement.setType(childType);
otherNSElement.setDescription(child.getDescription());
otherNSSchema.addItem(otherNSElement);
childElement = new ElementRef(otherNSElement);
m_sNamespaceURI = sCurrentNamespace;
if (bEnvelopeHeaders)
{
addEnvelopeHeader(child, childElement, false);
}
}
else
{
// Anonymous type (same namespace)
childType = createCompositeType((CompositeMessagePart)child, null);
childElement = new Element(childMapping.getNodeName());
childElement.setType(childType);
childElement.setDescription(child.getDescription());
if (bEnvelopeHeaders)
{
addEnvelopeHeader(child, childElement, true);
}
}
}
setElementProperties(childElement, (CompositeMessagePart)child);
if (!bChildEnvelopeHeaders && !isEnvelopeMarkup(childElement))
{
type.addChild(childElement);
}
}
}
m_sNamespaceURI = sOldNamespaceURI;
// Export inheritance hierarchy
if (message != null)
{
// Export derived messages
if (message.getDerivation() != Message.DERIVATION_FINAL)
{
for (int i = 0, nCount = message.getDerivedMessageCount(); i < nCount; i++)
{
Message derived = message.getDerivedMessage(i);
CompositeType derivedType = createCompositeType(derived.getRoot(), derived);
derivedType.setBase(type);
}
}
// Export base message
Message base = message.getBaseMessage();
if (type.getBase() == null && base != null)
{
CompositeType baseType = createCompositeType(base.getRoot(), base);
type.setBase(baseType);
}
type.setAbstract(message.getDerivation() == Message.DERIVATION_ABSTRACT);