Ability to obtain QName for xsi:type field, if set
--------------------------------------------------

                 Key: XMLBEANS-418
                 URL: https://issues.apache.org/jira/browse/XMLBEANS-418
             Project: XMLBeans
          Issue Type: New Feature
          Components: XmlObject
    Affects Versions: TBD
            Reporter: Wesley Leggette
             Fix For: TBD


In my schema, I am allowing extensibility using the xsi:type attribute. To 
faciliate code separation, I generally have schema components which define a 
particular inherited type (generally by extension of a base type) for which 
particular instances will be inserted into the document. These types have 
generic properties that I want all code to be able to understand, and only 
compile the schema into the more specific code which needs more information 
about the type.

However, for both debugging, logging, and for using in Map keys I'd like easy 
access to the QName defined in the xsi:type attribute even if that type is not 
understood by the compiled schema.

I have implemented the following utility method to accomplish this:

---


   public static QName getXsiType(final XmlObject object)
   {
      XmlCursor cursor = object.newCursor();
      final String xsiType =
            cursor.getAttributeText(new 
QName("http://www.w3.org/2001/XMLSchema-instance";, "type"));
      if (xsiType == null)
         return null;

      final String[] toks = xsiType.split(":");
      String prefix;
      String localName;
      if (toks.length > 1)
      {
         prefix = toks[0];
         localName = toks[1];
      }
      else
      {
         prefix = "";
         localName = toks[0];
      }

      QName namespace = null;
      cursor = object.newCursor();
      do
      {
         cursor.toNextToken();
         if (cursor.isNamespace() && 
cursor.getName().getLocalPart().equals(prefix))
            namespace = cursor.getName();
      } while (namespace == null && !cursor.isEnd());
      // final String namespace = cursor.toNextAttribute()
      // object.getDomNode().getAttributes().getNamedItem("xmlns:" + 
prefix).getNodeValue();

      // TODO: Obviously we don't support this too well here, we're borked
      // if xmlns isn't defined directly on the node. We should probably
      // be okay for the near future in any case.
      if (namespace == null)
         return new QName(localName);
      else
         return new QName(namespace.getNamespaceURI(), localName);
   }


--


I would think this sort of information would be ideal to be added onto the 
XmlObject base class.



-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to