[ 
https://issues.apache.org/jira/browse/TUSCANY-1528?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12519131
 ] 

Fuhwei Lwo commented on TUSCANY-1528:
-------------------------------------

Here is what I found out so far.

Without defining a global element in the XSD, a DocumentRoot object won't be 
created and a different demand create path was taken. In this case, 
org.eclipse.emf.ecore.xmi.impl.validateCreateObjectFromFactory() will be 
invoked to demand creating a new package, type and data object. I think the 
problem lies on the demand creating type was not set up correctly. (See 
BaseSDOExtendedMetaDataImpl.demandType(String namespace, String name))

I tried to add the line below after demandPackage to set up the right 
eFactoryInstance for the package but it's no use.
ePackage.setEFactoryInstance(new DynamicDataObjectImpl.FactoryImpl());

because later on
eClass.getESuperTypes().add(demandMetaData.getAnyType());
will set the new type's super type to be XMLTypePackage.eINSTANCE.getAnyType() 
which will be used to create EMF's AnyTypeImpl instead of SDO's any type impl.

I found the following method in SDOExtendedMetaDataImpl.java doesn't define the 
type for SDO's any type. Does anyone know what it should be mapped to?  Am I on 
the right track?

public static class SDODemandMetaData extends DemandMetaData {
    EClassifier getEObject() { return 
(EClassifier)((ModelFactoryImpl)ModelFactory.INSTANCE).getDataObject(); }
    EClassifier getAnySimpleType() { return 
(EClassifier)((ModelFactoryImpl)ModelFactory.INSTANCE).getObject(); }
  }


> ClassCastException thrown when trying to deserializing an XML with undefined 
> global element
> -------------------------------------------------------------------------------------------
>
>                 Key: TUSCANY-1528
>                 URL: https://issues.apache.org/jira/browse/TUSCANY-1528
>             Project: Tuscany
>          Issue Type: Bug
>          Components: Java SDO Implementation
>    Affects Versions: Java-SDO-1.0
>         Environment: WinXP
>            Reporter: Fuhwei Lwo
>             Fix For: Java-SDO-Next
>
>         Attachments: 1528-testcase.patch
>
>
> Using simple.xsd, I can serialize and deserialize an XML with a undefined 
> global element. If I removed the global element definition from the 
> simple.xsd, a ClassCastException will be thrown. It seems without the global 
> element definition's presence some required step was not done.  Here is the 
> stack trace and test case.
> junit.framework.AssertionFailedError: java.lang.ClassCastException: 
> org.eclipse.emf.ecore.xml.type.impl.AnyTypeImpl incompatible with 
> commonj.sdo.DataObject
>       at junit.framework.Assert.fail(Assert.java:47)
>       at 
> org.apache.tuscany.sdo.test.XMLHelperTestCase.testDemandCreateRootObject(XMLHelperTestCase.java:248)
>       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>       at 
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:64)
>       at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>       at java.lang.reflect.Method.invoke(Method.java:615)
>       at junit.framework.TestCase.runTest(TestCase.java:154)
>       at junit.framework.TestCase.runBare(TestCase.java:127)
>       at junit.framework.TestResult$1.protect(TestResult.java:106)
>       at junit.framework.TestResult.runProtected(TestResult.java:124)
>       at junit.framework.TestResult.run(TestResult.java:109)
>       at junit.framework.TestCase.run(TestCase.java:118)
>       at junit.framework.TestSuite.runTest(TestSuite.java:208)
>       at junit.framework.TestSuite.run(TestSuite.java:203)
>       at 
> org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:128)
>       at 
> org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
>       at 
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
>       at 
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
>       at 
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
>       at 
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to