You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@uima.apache.org by sc...@apache.org on 2013/12/09 17:27:24 UTC

svn commit: r1549608 - /uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/resource/metadata/impl/MetaDataObject_impl.java

Author: schor
Date: Mon Dec  9 16:27:24 2013
New Revision: 1549608

URL: http://svn.apache.org/r1549608
Log:
[UIMA-3477] allow xml serialization with plain content handlers, requested by some end user repackagers

Modified:
    uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/resource/metadata/impl/MetaDataObject_impl.java

Modified: uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/resource/metadata/impl/MetaDataObject_impl.java
URL: http://svn.apache.org/viewvc/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/resource/metadata/impl/MetaDataObject_impl.java?rev=1549608&r1=1549607&r2=1549608&view=diff
==============================================================================
--- uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/resource/metadata/impl/MetaDataObject_impl.java (original)
+++ uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/resource/metadata/impl/MetaDataObject_impl.java Mon Dec  9 16:27:24 2013
@@ -290,9 +290,9 @@ public abstract class MetaDataObject_imp
 
   /**
    * If the sourceURL of this object is non-null, returns its string representation. If it is null,
-   * returns "<unknown>". Useful for error messages.
+   * returns "<unknown>". Useful for error messages.
    * 
-   * @return the source URL as a string, or "<unknown>"
+   * @return the source URL as a string, or "<unknown>"
    */
   public String getSourceUrlString() {
     return mSourceUrl != null ? mSourceUrl.toString() : "<unknown>";
@@ -624,10 +624,13 @@ public abstract class MetaDataObject_imp
     }
 
     // start element
-    outputStartElement(aContentHandler, infoset, inf.namespace, inf.elementTagName, inf.elementTagName, attrs);    
-    CharacterValidatingContentHandler cc = (CharacterValidatingContentHandler) aContentHandler;
-    cc.setLastOutputNode(infoset);
-    cc.lastOutputNodeAddLevel();
+    outputStartElement(aContentHandler, infoset, inf.namespace, inf.elementTagName, inf.elementTagName, attrs);
+    CharacterValidatingContentHandler cc = maybeGetCharacterValidatingContentHandler(aContentHandler);
+    // https://issues.apache.org/jira/browse/UIMA-3477
+    if (cc != null) {
+      cc.setLastOutputNode(infoset);
+      cc.lastOutputNodeAddLevel();
+    }
     // write child elements
     try {
       for (int i = 0; i < inf.propertyInfo.length; i++) {
@@ -635,7 +638,9 @@ public abstract class MetaDataObject_imp
         writePropertyAsElement(propInf, inf.namespace, aContentHandler);
       }
     } finally {
-      cc.lastOutputNodeClearLevel();
+      if (cc != null) {
+        cc.lastOutputNodeClearLevel();
+      }
     }
      
     // end element
@@ -701,8 +706,8 @@ public abstract class MetaDataObject_imp
       return;
 
     // if XML element name was supplied, write a tag
-    String elementName = aPropInfo.xmlElementName;      
-    CharacterValidatingContentHandler cc = (CharacterValidatingContentHandler) aContentHandler;
+    String elementName = aPropInfo.xmlElementName; 
+    CharacterValidatingContentHandler cc = maybeGetCharacterValidatingContentHandler(aContentHandler);
     Node elementNode = null;
 
     if (null != elementName) { // can be null in this case:
@@ -714,7 +719,9 @@ public abstract class MetaDataObject_imp
       elementNode = findMatchingSubElement(aContentHandler, aPropInfo.xmlElementName);
       outputStartElement(aContentHandler, elementNode, aNamespace, aPropInfo.xmlElementName, aPropInfo.xmlElementName,
                 EMPTY_ATTRIBUTES);
-      cc.lastOutputNodeAddLevel();
+      if (cc != null) {
+        cc.lastOutputNodeAddLevel();
+      }
     }
     // get class of property
     Class propClass = getAttributeClass(aPropInfo.propertyName);
@@ -747,7 +754,9 @@ public abstract class MetaDataObject_imp
     }
     } finally {
       if (null != elementName) {
-        cc.lastOutputNodeClearLevel();
+        if (cc != null) {
+          cc.lastOutputNodeClearLevel();
+        }
       }
     }
 
@@ -778,7 +787,7 @@ public abstract class MetaDataObject_imp
   protected void writeArrayPropertyAsElement(String aPropName, Class aPropClass, Object aValue,
           String aArrayElementTagName, String aNamespace, ContentHandler aContentHandler)
           throws SAXException {
-    CharacterValidatingContentHandler cc = (CharacterValidatingContentHandler) aContentHandler;
+    CharacterValidatingContentHandler cc = maybeGetCharacterValidatingContentHandler(aContentHandler);
 
     // if aPropClass is generic Object, reader won't know whether to expect
     // an array, so we tell it be writing an "array" element here.
@@ -787,7 +796,9 @@ public abstract class MetaDataObject_imp
     if (aPropClass == Object.class) {  // skip writting <array> unless the property class (of objects in the array) is "Object"
                                        // skipped e.g. in <fixedFlow> values, where aPropClass is String
       outputStartElement(aContentHandler, arraySubElement, aNamespace, "array", "array", EMPTY_ATTRIBUTES);
-      cc.lastOutputNodeAddLevel();
+      if (null != cc) {
+        cc.lastOutputNodeAddLevel();
+      }
     }
 
     // iterate through elements of the array (at this point we don't allow
@@ -823,7 +834,9 @@ public abstract class MetaDataObject_imp
       }
     } finally {
       if (aPropClass == Object.class) {
-        cc.lastOutputNodeClearLevel();
+        if (null != cc) {
+          cc.lastOutputNodeClearLevel();
+        }
       }
     }
 
@@ -873,8 +886,10 @@ public abstract class MetaDataObject_imp
       // write start tag for attribute if desired
       outputStartElement(aContentHandler, matchingNode, aNamespace, aXmlElementName, aXmlElementName, EMPTY_ATTRIBUTES);        
 
-      CharacterValidatingContentHandler cc = (CharacterValidatingContentHandler) aContentHandler;
-      cc.lastOutputNodeAddLevel();
+      CharacterValidatingContentHandler cc = maybeGetCharacterValidatingContentHandler(aContentHandler);
+      if (null != cc) {
+        cc.lastOutputNodeAddLevel();
+      } 
       try {
         // iterate over entries in the Map
         for (Map.Entry<String, Object> curEntry : theMap.entrySet()) {
@@ -895,11 +910,15 @@ public abstract class MetaDataObject_imp
               elem.toXML(aContentHandler);
             }
           } else {
-            cc.lastOutputNodeAddLevel();
+            if (null != cc) {
+              cc.lastOutputNodeAddLevel();
+            }
             try {
             ((XMLizable) val).toXML(aContentHandler);
             } finally {
-              cc.lastOutputNodeClearLevel();              
+              if (null != cc) {
+                cc.lastOutputNodeClearLevel();
+              }
             }
           }
   
@@ -907,7 +926,9 @@ public abstract class MetaDataObject_imp
           outputEndElement(aContentHandler, innerMatchingNode, aNamespace, aValueTagName, aValueTagName);
         }
       } finally {
-        cc.lastOutputNodeClearLevel();
+        if (null != cc) {
+          cc.lastOutputNodeClearLevel();
+        }
       }
 
       // if we wrote start tag for attribute, now write end tag
@@ -1602,12 +1623,15 @@ public abstract class MetaDataObject_imp
     if (null == infoset || null == elementName) {
       return null;
     }
-    CharacterValidatingContentHandler c = (CharacterValidatingContentHandler) contentHandler;
-    Node lastOutput = c.getLastOutputNode();
+    CharacterValidatingContentHandler cc = maybeGetCharacterValidatingContentHandler(contentHandler);
+    if (null == cc) {
+      return null;
+    }
+    Node lastOutput = cc.getLastOutputNode();
     Node n = null;
     
     if (lastOutput == null) {
-      lastOutput = c.getLastOutputNodePrevLevel();
+      lastOutput = cc.getLastOutputNodePrevLevel();
       if (lastOutput == null) {
         return null;
       }
@@ -1618,7 +1642,7 @@ public abstract class MetaDataObject_imp
     for (; n != null; n = n.getNextSibling()) {
       if ((n instanceof Element) && 
           elementName.equals(((Element)n).getTagName())) {
-        c.setLastOutputNode(n);
+        cc.setLastOutputNode(n);
         return n;
       }
     }
@@ -1816,4 +1840,14 @@ public abstract class MetaDataObject_imp
     outputEndElement(aContentHandler, node, null, className, className);
 //    aContentHandler.endElement(null, className, className);
   }
+  
+  // https://issues.apache.org/jira/browse/UIMA-3477
+  private CharacterValidatingContentHandler maybeGetCharacterValidatingContentHandler(ContentHandler contentHandler) {
+    CharacterValidatingContentHandler cc = null;
+    try {
+      cc = (CharacterValidatingContentHandler) contentHandler;
+    } catch (ClassCastException e) {
+    }
+    return cc;
+  }
 }