@Override public void writeXsiTypeAttribute( Descriptor descriptor, String typeUri, String typeLocal, String typePrefix, boolean addToNamespaceResolver) { if (typeLocal == null) { return; } String typeValue = typeLocal; if (isNamespaceAware() && typeUri != null && !typeUri.equals(Constants.EMPTY_STRING) && !typeUri.equals(namespaceResolver.getDefaultNamespaceURI())) { String prefix = namespaceResolver.resolveNamespaceURI(typeUri); if (prefix != null && !prefix.equals(Constants.EMPTY_STRING)) { typeValue = prefix + getNamespaceSeparator() + typeValue; } else if (typeUri.equals(javax.xml.XMLConstants.W3C_XML_SCHEMA_NS_URI)) { prefix = namespaceResolver.generatePrefix(Constants.SCHEMA_PREFIX); typeValue = prefix + getNamespaceSeparator() + typeValue; namespaceDeclaration(prefix, typeUri); } else if (typePrefix != null && !typePrefix.equals(Constants.EMPTY_STRING)) { String existingUri = namespaceResolver.resolveNamespacePrefix(typePrefix); if (existingUri != null) { prefix = namespaceResolver.generatePrefix(); } else { prefix = typePrefix; } typeValue = prefix + getNamespaceSeparator() + typeValue; namespaceDeclaration(prefix, typeUri); } else { prefix = namespaceResolver.generatePrefix(); typeValue = prefix + getNamespaceSeparator() + typeValue; namespaceDeclaration(prefix, typeUri); } } String xsiPrefix = null; if (isNamespaceAware()) { xsiPrefix = namespaceResolver.resolveNamespaceURI( javax.xml.XMLConstants.W3C_XML_SCHEMA_INSTANCE_NS_URI); if (xsiPrefix == null) { xsiPrefix = namespaceResolver.generatePrefix(Constants.SCHEMA_INSTANCE_PREFIX); namespaceDeclaration(xsiPrefix, javax.xml.XMLConstants.W3C_XML_SCHEMA_INSTANCE_NS_URI); if (addToNamespaceResolver) { namespaceResolver.put(xsiPrefix, javax.xml.XMLConstants.W3C_XML_SCHEMA_INSTANCE_NS_URI); } } } attributeWithoutQName( javax.xml.XMLConstants.W3C_XML_SCHEMA_INSTANCE_NS_URI, Constants.SCHEMA_TYPE_ATTRIBUTE, xsiPrefix, typeValue); }