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: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]