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;
+ }
}