Now I understood the problem. It is happening in scenario like if we load two XSDs from different classes with same URI but different types in them, XSDHelper is keeping only types from first XSD. Here, two different classes mean their class loaders are different. If we load same two XSDs from single class then there is no issue. is this the expected behavior?
Regards Raman _____________________________________________ From: Malisetti, Ramanjaneyulu Sent: Wednesday, 25 November 2009 5:39 PM To: '[email protected]' Subject: RE: SDO UnmarshalException Hi Kelvin, << File: SDO-Marshall-Exception.zip >> After so many trails I found the problem. The issue is where we are loading Schemas and XML files with XMLHelpter.INSTANCE object. For example, if we write one facade class to encapsulate all calls to SDO Api, it is leading to issues like, "Feature not Found" while loading XML resource after loading XSDs or ClassCastException: The feature 'xxxx's type 'DataObject' does not permit a value of type 'xxx'. This is kind of issues can be avoided if we call XMLHelpter.INSTANCE.define/load in our implementation. Here I attached sample source which is slightly complex example. I have taken this scenario to replicate marshall error. However, I got symptoms of the issue before I reach to RMI. So, you can see the issue from very begining of the running Test from sdo.rmi.sample.hello RemoteDescriptor. To illustrate the issue w.r.t attached sample... - sdo.rmi.sampl.impl.util.BeanXmlHelper.java is a façade class which encapsulate SDO APIs - I load XSDs and XML with help of BeanXmlHelper in sdo.rmi.sample.hello.HelloDescriptor and sdo.rmi.sampl.impl.XMLDescriptor - I use HelloDescriptor in HelloConnector. What is the right way of loading XSDs and XMLs so that I can have dynamic types in my code and can use them without in issues across different classloaders? I don't have much exp in using SDO APIs, please bear me if these questions are very basic. I appreciate your help. Thanks in advance.. Regards Raman _____________________________________________ From: Malisetti, Ramanjaneyulu Sent: Monday, 23 November 2009 4:29 PM To: '[email protected]' Subject: RE: SDO UnmarshalException Thanks Kelvin for quick response. I am trying to reproduce with sample program so that I can share that with you. Apparently, no luck. It means there is something we are doing differently. I have been trying to identify that.. I'll post progress. Regards Raman to be sure about this, I'd need to be able to recreate the problem with a bit of test code, and I've not played with SDO using RMI calls, but the SDO metadata associated with the namespace URI must be available when the XML document is parsed. This would be made available when either the XSDHelper is used to load a schema or generated SDO classes are registered with the environment, and it is going to need to be available in the jvm that the xml parsing is happening. Kelvin. _____________________________________________ From: Malisetti, Ramanjaneyulu Sent: Friday, 20 November 2009 5:21 PM To: '[email protected]' Subject: SDO UnmarshalException Hi, We have a class called Descriptor that loads XML and XSD files to build SDO objects, this we are doing in its constructor. We have another class called Container that contains Descriptor class. If we make Container class object as Remotable (Exported as RMI object) and call a method on remotable object on RMI client side to get descriptor, it is throwing the following exception . The below "not found URI" is there in XML file. We are not getting what is the problem. Could you helps us here what is going wrong? BTW, we ensured all required interfaces as Remote so that there is nothing wrong on RMI side. java.rmi.UnmarshalException: error unmarshalling return; nested exception is: org.eclipse.emf.ecore.resource.Resource$IOWrappedException: Package with uri 'http://www.abc.com/connex' not found. (http:///temp.xml, 3, 106) at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:173) at java.rmi.server.RemoteObjectInvocationHandler.invokeRemoteMethod(RemoteObjectInvocationHandler.java:178) at java.rmi.server.RemoteObjectInvocationHandler.invoke(RemoteObjectInvocationHandler.java:132) at $Proxy8.getDescriptor(Unknown Source) at com.abc.connector.impl.infrastructure.rmi.RemoteRMIConnectorProxy.getDescriptor(RemoteRMIConnectorProxy.java:66) at com.abc.connector.impl.infrastructure.rmi.test.TestRMIConnector.setUpBeforeClass(TestRMIConnector.java:79) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.junit.internal.runners.BeforeAndAfterRunner.invokeMethod(BeforeAndAfterRunner.java:74) at org.junit.internal.runners.BeforeAndAfterRunner.runBefores(BeforeAndAfterRunner.java:50) at org.junit.internal.runners.BeforeAndAfterRunner.runProtected(BeforeAndAfterRunner.java:33) at org.junit.internal.runners.TestClassRunner.run(TestClassRunner.java:52) at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:45) 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) Caused by: org.eclipse.emf.ecore.resource.Resource$IOWrappedException: Package with uri 'http://www.abc.com/connex' not found. (http:///temp.xml, 3, 106) at org.eclipse.emf.ecore.xmi.impl.XMLLoadImpl.handleErrors(XMLLoadImpl.java:83) at org.eclipse.emf.ecore.xmi.impl.XMLLoadImpl.load(XMLLoadImpl.java:278) at org.eclipse.emf.ecore.xmi.impl.XMLResourceImpl.doLoad(XMLResourceImpl.java:666) at org.apache.tuscany.sdo.util.resource.SDOXMLResourceImpl.doLoad(SDOXMLResourceImpl.java:589) at org.eclipse.emf.ecore.xmi.impl.XMLResourceImpl.load(XMLResourceImpl.java:634) at org.apache.tuscany.sdo.helper.XMLDocumentImpl.load(XMLDocumentImpl.java:266) at org.apache.tuscany.sdo.helper.XMLDocumentImpl.load(XMLDocumentImpl.java:239) at org.apache.tuscany.sdo.helper.XMLHelperImpl.load(XMLHelperImpl.java:97) at org.apache.tuscany.sdo.helper.XMLHelperImpl.load(XMLHelperImpl.java:79) at org.apache.tuscany.sdo.spi.HelperProviderBase$ResolvableImpl.readDataObject(HelperProviderBase.java:229) at org.apache.tuscany.sdo.spi.HelperProviderBase$ResolvableImpl.readExternal(HelperProviderBase.java:161) at commonj.sdo.impl.ExternalizableDelegator.readExternal(ExternalizableDelegator.java:83) at java.io.ObjectInputStream.readExternalData(ObjectInputStream.java:1792) at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1751) at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329) at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351) at org.apache.tuscany.sdo.spi.HelperProviderBase$ResolvableImpl.readDataObject(HelperProviderBase.java:238) at org.apache.tuscany.sdo.spi.HelperProviderBase$ResolvableImpl.readExternal(HelperProviderBase.java:161) at commonj.sdo.impl.ExternalizableDelegator.readExternal(ExternalizableDelegator.java:83) at java.io.ObjectInputStream.readExternalData(ObjectInputStream.java:1792) at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1751) at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329) at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1947) at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1871) at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753) at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329) at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1947) at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1871) at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753) at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329) at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351) at sun.rmi.server.UnicastRef.unmarshalValue(UnicastRef.java:306) at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:155) ... 19 more Caused by: org.eclipse.emf.ecore.xmi.PackageNotFoundException: Package with uri 'http://www.abc.com/connex' not found. (http:///temp.xml, 3, 106) at org.eclipse.emf.ecore.xmi.impl.XMLHandler.getPackageForURI(XMLHandler.java:2350) at org.eclipse.emf.ecore.xmi.impl.XMLHandler.getFactoryForPrefix(XMLHandler.java:2188) at org.eclipse.emf.ecore.xmi.impl.XMLHandler.createObjectFromTypeName(XMLHandler.java:1828) at org.eclipse.emf.ecore.xmi.impl.XMLHandler.createObject(XMLHandler.java:1787) at org.eclipse.emf.ecore.xmi.impl.XMLHandler.handleFeature(XMLHandler.java:1569) at org.eclipse.emf.ecore.xmi.impl.XMLHandler.createDocumentRoot(XMLHandler.java:1237) at org.eclipse.emf.ecore.xmi.impl.XMLHandler.createObjectByType(XMLHandler.java:1165) at org.eclipse.emf.ecore.xmi.impl.XMLHandler.createTopObject(XMLHandler.java:1247) at org.eclipse.emf.ecore.xmi.impl.XMLHandler.processElement(XMLHandler.java:883) at org.eclipse.emf.ecore.xmi.impl.XMLHandler.startElement(XMLHandler.java:866) at org.eclipse.emf.ecore.xmi.impl.XMLHandler.startElement(XMLHandler.java:627) at org.apache.tuscany.sdo.util.resource.SDOXMLResourceImpl$SDOXMLLoadImpl$XmlHandler.startElement(SDOXMLResourceImpl.java:405) at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(AbstractSAXParser.java:501) at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(XMLNSDocumentScannerImpl.java:400) at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl$NSContentDriver.scanRootElementHook(XMLNSDocumentScannerImpl.java:626) at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:3088) at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:914) at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:647) at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:140) at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:508) at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:807) at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737) at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:107) at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1205) at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:522) at javax.xml.parsers.SAXParser.parse(SAXParser.java:395) at org.eclipse.emf.ecore.xmi.impl.XMLLoadImpl.load(XMLLoadImpl.java:268) ... 50 more Regards Raman
