Yes, the HelperContext acts as a registry for the types, where the key
/ value pairs are namespaceuri->{set of types}. If you attempt to
register a second XSD of the same namespace uri you will see the
behaviour you report. You may have already found the SDOUtil class's
getTypes(HelperContext hc, String nsuri) method which helps you to get
a handle on what you really have available in a given context.
Regards, Kelvin.
2009/11/26 Malisetti, Ramanjaneyulu <[email protected]>:
> 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