code: public static <T> ElementDescriptor<T> register(QualifiedName qname, IObjectBuilder<T> builder, XmlContext context)
  	{
  		if (context == null)
  		{
  			context = DEFAULT_CONTEXT;
  		}
  
  		synchronized (context)
  		{
  			Map<QualifiedName, ElementDescriptor<?>> descriptorMap = context.DESCRIPTOR_MAP;
  
  			if (descriptorMap.containsKey(qname))
  			{
  				throw new IllegalStateException("descriptor for " + qname + " already exists, use 'overload' to override the definition");
  			}
  
  			ElementDescriptor<T> descriptor = new ElementDescriptor<T>(qname, builder, context);
  			descriptorMap.put(qname, descriptor);
  			return descriptor;
  		}
  	}
docs: Register an element with the given {@link QualifiedName} using the given {@link IObjectBuilder} in the given {@link XmlContext}.
  
  @param qname
  The {@link QualifiedName} of the element.
  @param builder
  The {@link IObjectBuilder} to build and serialize this element.
  @param context
  An {@link XmlContext} or <code>null</code> to use the default {@link XmlContext}.
  @return The {@link ElementDescriptor}.