You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by rf...@apache.org on 2006/09/09 18:26:04 UTC
svn commit: r441810 -
/incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/util/resource/DataObjectXMLStreamReader.java
Author: rfeng
Date: Sat Sep 9 09:26:01 2006
New Revision: 441810
URL: http://svn.apache.org/viewvc?view=rev&rev=441810
Log:
Fix the issue that the reader couldn't produce xsi:type for sub types
Modified:
incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/util/resource/DataObjectXMLStreamReader.java
Modified: incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/util/resource/DataObjectXMLStreamReader.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/util/resource/DataObjectXMLStreamReader.java?view=diff&rev=441810&r1=441809&r2=441810
==============================================================================
--- incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/util/resource/DataObjectXMLStreamReader.java (original)
+++ incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/util/resource/DataObjectXMLStreamReader.java Sat Sep 9 09:26:01 2006
@@ -43,6 +43,8 @@
import commonj.sdo.helper.XSDHelper;
public class DataObjectXMLStreamReader implements XMLFragmentStreamReader {
+ private static final QName XSI_TYPE_QNAME = new QName("http://www.w3.org/2001/XMLSchema-instance", "type", "xsi");
+ private Property rootElement = null;
private DataObject dataObject;
private String rootElementURI;
@@ -98,9 +100,20 @@
this.rootElementName = rootElementName;
this.typeHelper = typeHelper == null ? TypeHelper.INSTANCE : typeHelper;
this.xsdHelper = (xsdHelper != null) ? xsdHelper : ((typeHelper == null) ? XSDHelper.INSTANCE : SDOUtil.createXSDHelper(typeHelper));
+ rootElement = this.xsdHelper.getGlobalProperty(rootElmentURI, rootElementName, true);
populateProperties();
}
+ protected DataObjectXMLStreamReader(Property rootElement, DataObject dataObject, TypeHelper typeHelper, XSDHelper xsdHelper) {
+ this.typeHelper = typeHelper == null ? TypeHelper.INSTANCE : typeHelper;
+ this.xsdHelper = (xsdHelper != null) ? xsdHelper : ((typeHelper == null) ? XSDHelper.INSTANCE : SDOUtil.createXSDHelper(typeHelper));
+ this.rootElement = rootElement;
+ this.dataObject = dataObject;
+ this.rootElementURI = xsdHelper.getNamespaceURI(rootElement);
+ this.rootElementName = xsdHelper.getLocalName(rootElement);
+ populateProperties();
+ }
+
public DataObjectXMLStreamReader(XMLDocument document, TypeHelper typeHelper) {
this.dataObject = document.getRootObject();
this.rootElementName = document.getRootElementName();
@@ -205,7 +218,8 @@
Map.Entry entry = new NameValuePair(qname, SDOUtil.convertToString(propertyType, value));
propertyList.add(entry);
} else {
- DataObjectXMLStreamReader childReader = new DataObjectXMLStreamReader((DataObject) value, uri, name, typeHelper, xsdHelper);
+ DataObjectXMLStreamReader childReader = new DataObjectXMLStreamReader(property, (DataObject) value, typeHelper, xsdHelper);
+ childReader.rootElement = property;
Map.Entry entry = new NameValuePair(qname, childReader);
propertyList.add(entry);
}
@@ -222,6 +236,16 @@
List elementList = new ArrayList();
List attributeList = new ArrayList();
Type type = dataObject.getType();
+ if (rootElement != null) {
+ Type modelType = rootElement.getType();
+ if (type.getBaseTypes().contains(modelType)) {
+ QName realTypeName = namespaceContext.createQName(type.getURI(), xsdHelper.getLocalName(type));
+ String typeName = realTypeName.getPrefix() + ":" + realTypeName.getLocalPart();
+ NameValuePair pair = new NameValuePair(XSI_TYPE_QNAME, typeName);
+ attributeList.add(pair);
+ }
+ }
+
if (type.isSequenced()) {
Sequence sequence = dataObject.getSequence();
for (int i = 0; i < sequence.size(); i++) {
---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-commits-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-commits-help@ws.apache.org