[
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]