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