[364419] Adding default XMI content handler and avoiding duplicate
addition.
diff --git a/plugins/org.eclipse.uml2.uml.resources/src/org/eclipse/uml2/uml/resources/util/ResourcesUtil.java b/plugins/org.eclipse.uml2.uml.resources/src/org/eclipse/uml2/uml/resources/util/ResourcesUtil.java
index 8e40de4..d668104 100644
--- a/plugins/org.eclipse.uml2.uml.resources/src/org/eclipse/uml2/uml/resources/util/ResourcesUtil.java
+++ b/plugins/org.eclipse.uml2.uml.resources/src/org/eclipse/uml2/uml/resources/util/ResourcesUtil.java
@@ -23,6 +23,7 @@
 import org.eclipse.emf.ecore.resource.ResourceSet;
 import org.eclipse.emf.ecore.resource.URIConverter;
 import org.eclipse.emf.ecore.xmi.impl.RootXMLContentHandlerImpl;
+import org.eclipse.emf.ecore.xmi.impl.XMLContentHandlerImpl;
 import org.eclipse.uml2.types.TypesPackage;
 import org.eclipse.uml2.uml.UMLPackage;
 import org.eclipse.uml2.uml.UMLPlugin;
@@ -42,6 +43,84 @@
 public class ResourcesUtil
 		extends UMLUtil {
 
+	private static final ContentHandler XMI_CONTENT_HANDLER = new XMLContentHandlerImpl.XMI();
+
+	private static final ContentHandler UML2_1_0_0_CONTENT_HANDLER = new RootXMLContentHandlerImpl(
+		UML22UMLResource.UML2_CONTENT_TYPE_IDENTIFIER,
+		new String[]{"uml2"}, //$NON-NLS-1$
+		RootXMLContentHandlerImpl.XMI_KIND,
+		UML22UMLResource.UML2_METAMODEL_NS_URI, null);
+
+	private static final ContentHandler UML2_2_0_0_CONTENT_HANDLER = new RootXMLContentHandlerImpl(
+		UMLResource.UML_2_0_0_CONTENT_TYPE_IDENTIFIER,
+		new String[]{"uml"}, //$NON-NLS-1$
+		RootXMLContentHandlerImpl.XMI_KIND,
+		"http://www.eclipse.org/uml2/2.0.0/UML", null); //$NON-NLS-1$
+
+	private static final ContentHandler UML2_2_1_0_CONTENT_HANDLER = new RootXMLContentHandlerImpl(
+		UMLResource.UML_2_1_0_CONTENT_TYPE_IDENTIFIER,
+		new String[]{"uml"}, //$NON-NLS-1$
+		RootXMLContentHandlerImpl.XMI_KIND,
+		UML212UMLResource.UML_METAMODEL_NS_URI, null);
+
+	private static final ContentHandler UML2_3_0_0_CONTENT_HANDLER = new RootXMLContentHandlerImpl(
+		UMLResource.UML_3_0_0_CONTENT_TYPE_IDENTIFIER,
+		new String[]{"uml"}, //$NON-NLS-1$
+		RootXMLContentHandlerImpl.XMI_KIND,
+		UML302UMLResource.UML_METAMODEL_NS_URI, null);
+
+	private static final ContentHandler UML2_4_0_0_CONTENT_HANDLER = new RootXMLContentHandlerImpl(
+		UMLResource.UML_4_0_0_CONTENT_TYPE_IDENTIFIER, new String[]{"uml"}, //$NON-NLS-1$
+		RootXMLContentHandlerImpl.XMI_KIND, UMLPackage.eNS_URI, null);
+
+	private static final ContentHandler OMG_2_1_CONTENT_HANDLER = new RootXMLContentHandlerImpl(
+		XMI2UMLResource.UML_2_1_CONTENT_TYPE_IDENTIFIER,
+		new String[]{"xmi"}, //$NON-NLS-1$
+		RootXMLContentHandlerImpl.XMI_KIND,
+		XMI2UMLResource.UML_METAMODEL_2_1_NS_URI, null);
+
+	private static final ContentHandler OMG_2_1_1_CONTENT_HANDLER = new RootXMLContentHandlerImpl(
+		XMI2UMLResource.UML_2_1_1_CONTENT_TYPE_IDENTIFIER,
+		new String[]{"xmi"}, //$NON-NLS-1$
+		RootXMLContentHandlerImpl.XMI_KIND,
+		XMI2UMLResource.UML_METAMODEL_2_1_1_NS_URI, null);
+
+	private static final ContentHandler OMG_2_2_CONTENT_HANDLER = new RootXMLContentHandlerImpl(
+		XMI2UMLResource.UML_2_2_CONTENT_TYPE_IDENTIFIER,
+		new String[]{"xmi"}, //$NON-NLS-1$
+		RootXMLContentHandlerImpl.XMI_KIND,
+		XMI2UMLResource.UML_METAMODEL_2_2_NS_URI, null);
+
+	private static final ContentHandler OMG_2_4_CONTENT_HANDLER = new RootXMLContentHandlerImpl(
+		XMI2UMLResource.UML_2_4_CONTENT_TYPE_IDENTIFIER,
+		new String[]{"xmi"}, //$NON-NLS-1$
+		RootXMLContentHandlerImpl.XMI_KIND,
+		XMI2UMLResource.UML_METAMODEL_2_4_NS_URI, null);
+
+	private static final ContentHandler OMG_2_4_1_CONTENT_HANDLER = new RootXMLContentHandlerImpl(
+		XMI2UMLResource.UML_2_4_1_CONTENT_TYPE_IDENTIFIER,
+		new String[]{"xmi"}, //$NON-NLS-1$
+		RootXMLContentHandlerImpl.XMI_KIND,
+		XMI2UMLResource.UML_METAMODEL_2_4_1_NS_URI, null);
+
+	private static final ContentHandler CMOF_2_0_CONTENT_HANDLER = new RootXMLContentHandlerImpl(
+		CMOF2UMLResource.CMOF_2_0_CONTENT_TYPE_IDENTIFIER,
+		new String[]{"cmof", "xmi"}, //$NON-NLS-1$ //$NON-NLS-2$
+		RootXMLContentHandlerImpl.XMI_KIND,
+		CMOF2UMLResource.CMOF_2_0_METAMODEL_NS_URI, null);
+
+	private static final ContentHandler CMOF_2_4_CONTENT_HANDLER = new RootXMLContentHandlerImpl(
+		CMOF2UMLResource.CMOF_2_4_CONTENT_TYPE_IDENTIFIER,
+		new String[]{"cmof", "xmi"}, //$NON-NLS-1$ //$NON-NLS-2$
+		RootXMLContentHandlerImpl.XMI_KIND,
+		CMOF2UMLResource.CMOF_2_4_METAMODEL_NS_URI, null);
+
+	private static final ContentHandler CMOF_2_4_1_CONTENT_HANDLER = new RootXMLContentHandlerImpl(
+		CMOF2UMLResource.CMOF_2_4_1_CONTENT_TYPE_IDENTIFIER,
+		new String[]{"cmof", "xmi"}, //$NON-NLS-1$ //$NON-NLS-2$
+		RootXMLContentHandlerImpl.XMI_KIND,
+		CMOF2UMLResource.CMOF_2_4_1_METAMODEL_NS_URI, null);
+
 	/**
 	 * Initializes the registries for the specified resource set (or the global
 	 * registries if <code>null</code>) with the registrations needed to work
@@ -120,68 +199,61 @@
 				.getContentHandlers();
 		}
 
-		String[] extensions = new String[]{"uml2"}; //$NON-NLS-1$
+		if (!contentHandlers.contains(XMI_CONTENT_HANDLER)) {
+			contentHandlers.add(XMI_CONTENT_HANDLER);
+		}
 
-		contentHandlers.add(new RootXMLContentHandlerImpl(
-			UML22UMLResource.UML2_CONTENT_TYPE_IDENTIFIER, extensions,
-			RootXMLContentHandlerImpl.XMI_KIND,
-			UML22UMLResource.UML2_METAMODEL_NS_URI, null));
+		if (!contentHandlers.contains(UML2_1_0_0_CONTENT_HANDLER)) {
+			contentHandlers.add(UML2_1_0_0_CONTENT_HANDLER);
+		}
 
-		extensions = new String[]{"uml"}; //$NON-NLS-1$
+		if (!contentHandlers.contains(UML2_2_0_0_CONTENT_HANDLER)) {
+			contentHandlers.add(UML2_2_0_0_CONTENT_HANDLER);
+		}
 
-		contentHandlers.add(new RootXMLContentHandlerImpl(
-			UMLResource.UML_2_0_0_CONTENT_TYPE_IDENTIFIER, extensions,
-			RootXMLContentHandlerImpl.XMI_KIND,
-			"http://www.eclipse.org/uml2/2.0.0/UML", null)); //$NON-NLS-1$
-		contentHandlers.add(new RootXMLContentHandlerImpl(
-			UMLResource.UML_2_1_0_CONTENT_TYPE_IDENTIFIER, extensions,
-			RootXMLContentHandlerImpl.XMI_KIND,
-			UML212UMLResource.UML_METAMODEL_NS_URI, null));
-		contentHandlers.add(new RootXMLContentHandlerImpl(
-			UMLResource.UML_3_0_0_CONTENT_TYPE_IDENTIFIER, extensions,
-			RootXMLContentHandlerImpl.XMI_KIND,
-			UML302UMLResource.UML_METAMODEL_NS_URI, null));
-		contentHandlers.add(new RootXMLContentHandlerImpl(
-			UMLResource.UML_4_0_0_CONTENT_TYPE_IDENTIFIER, extensions,
-			RootXMLContentHandlerImpl.XMI_KIND, UMLPackage.eNS_URI, null));
+		if (!contentHandlers.contains(UML2_2_1_0_CONTENT_HANDLER)) {
+			contentHandlers.add(UML2_2_1_0_CONTENT_HANDLER);
+		}
 
-		extensions = new String[]{"xmi"}; //$NON-NLS-1$
+		if (!contentHandlers.contains(UML2_3_0_0_CONTENT_HANDLER)) {
+			contentHandlers.add(UML2_3_0_0_CONTENT_HANDLER);
+		}
 
-		contentHandlers.add(new RootXMLContentHandlerImpl(
-			XMI2UMLResource.UML_2_1_CONTENT_TYPE_IDENTIFIER, extensions,
-			RootXMLContentHandlerImpl.XMI_KIND,
-			XMI2UMLResource.UML_METAMODEL_2_1_NS_URI, null));
-		contentHandlers.add(new RootXMLContentHandlerImpl(
-			XMI2UMLResource.UML_2_1_1_CONTENT_TYPE_IDENTIFIER, extensions,
-			RootXMLContentHandlerImpl.XMI_KIND,
-			XMI2UMLResource.UML_METAMODEL_2_1_1_NS_URI, null));
-		contentHandlers.add(new RootXMLContentHandlerImpl(
-			XMI2UMLResource.UML_2_2_CONTENT_TYPE_IDENTIFIER, extensions,
-			RootXMLContentHandlerImpl.XMI_KIND,
-			XMI2UMLResource.UML_METAMODEL_2_2_NS_URI, null));
-		contentHandlers.add(new RootXMLContentHandlerImpl(
-			XMI2UMLResource.UML_2_4_CONTENT_TYPE_IDENTIFIER, extensions,
-			RootXMLContentHandlerImpl.XMI_KIND,
-			XMI2UMLResource.UML_METAMODEL_2_4_NS_URI, null));
-		contentHandlers.add(new RootXMLContentHandlerImpl(
-			XMI2UMLResource.UML_2_4_1_CONTENT_TYPE_IDENTIFIER, extensions,
-			RootXMLContentHandlerImpl.XMI_KIND,
-			XMI2UMLResource.UML_METAMODEL_2_4_1_NS_URI, null));
+		if (!contentHandlers.contains(UML2_4_0_0_CONTENT_HANDLER)) {
+			contentHandlers.add(UML2_4_0_0_CONTENT_HANDLER);
+		}
 
-		extensions = new String[]{"cmof", "xmi"}; //$NON-NLS-1$
+		if (!contentHandlers.contains(OMG_2_1_CONTENT_HANDLER)) {
+			contentHandlers.add(OMG_2_1_CONTENT_HANDLER);
+		}
 
-		contentHandlers.add(new RootXMLContentHandlerImpl(
-			CMOF2UMLResource.CMOF_2_0_CONTENT_TYPE_IDENTIFIER, extensions,
-			RootXMLContentHandlerImpl.XMI_KIND,
-			CMOF2UMLResource.CMOF_2_0_METAMODEL_NS_URI, null));
-		contentHandlers.add(new RootXMLContentHandlerImpl(
-			CMOF2UMLResource.CMOF_2_4_CONTENT_TYPE_IDENTIFIER, extensions,
-			RootXMLContentHandlerImpl.XMI_KIND,
-			CMOF2UMLResource.CMOF_2_4_METAMODEL_NS_URI, null));
-		contentHandlers.add(new RootXMLContentHandlerImpl(
-			CMOF2UMLResource.CMOF_2_4_1_CONTENT_TYPE_IDENTIFIER, extensions,
-			RootXMLContentHandlerImpl.XMI_KIND,
-			CMOF2UMLResource.CMOF_2_4_1_METAMODEL_NS_URI, null));
+		if (!contentHandlers.contains(OMG_2_1_1_CONTENT_HANDLER)) {
+			contentHandlers.add(OMG_2_1_1_CONTENT_HANDLER);
+		}
+
+		if (!contentHandlers.contains(OMG_2_2_CONTENT_HANDLER)) {
+			contentHandlers.add(OMG_2_2_CONTENT_HANDLER);
+		}
+
+		if (!contentHandlers.contains(OMG_2_4_CONTENT_HANDLER)) {
+			contentHandlers.add(OMG_2_4_CONTENT_HANDLER);
+		}
+
+		if (!contentHandlers.contains(OMG_2_4_1_CONTENT_HANDLER)) {
+			contentHandlers.add(OMG_2_4_1_CONTENT_HANDLER);
+		}
+
+		if (!contentHandlers.contains(CMOF_2_0_CONTENT_HANDLER)) {
+			contentHandlers.add(CMOF_2_0_CONTENT_HANDLER);
+		}
+
+		if (!contentHandlers.contains(CMOF_2_4_CONTENT_HANDLER)) {
+			contentHandlers.add(CMOF_2_4_CONTENT_HANDLER);
+		}
+
+		if (!contentHandlers.contains(CMOF_2_4_1_CONTENT_HANDLER)) {
+			contentHandlers.add(CMOF_2_4_1_CONTENT_HANDLER);
+		}
 
 		(resourceSet == null
 			? Resource.Factory.Registry.INSTANCE