[ https://issues.apache.org/jira/browse/TUSCANY-3708?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12930342#action_12930342 ]
Sebastian Millies commented on TUSCANY-3708: -------------------------------------------- Meantime I discovered why the XSD wins. It is registered first when the composite is loaded. When one afterwards tries to register a generated factory, that will have no effect, because the generated code for register() contains the following check: if (((HelperContextImpl)scope).getExtendedMetaData().getPackage(NAMESPACE_URI) != null) return; If one comments out that check, the static factory will replace the metadata from the XSD. > SDO created with wrong type & errors on deserialization > ------------------------------------------------------- > > Key: TUSCANY-3708 > URL: https://issues.apache.org/jira/browse/TUSCANY-3708 > Project: Tuscany > Issue Type: Bug > Components: Java SDO Implementation > Affects Versions: Java-SDO-1.1 > Environment: Tuscany 1.6 resp 1.7 snapshot, JDK 1.6.0_21, Eclipse > Helios, Windows XP > Reporter: Sebastian Millies > Attachments: test.zip > > > Creation of static SDOs for which classes have been generated from XSD does > not work as expected. > In particular, I created a data object for a type which has a statically > generated class, but unexpectedly > got back an instance of DynamicDataObjectImpl. > A trelated error maybe that even when I create the static SDO directly from > the factory, when I later > try to return it over an XMI binding, I get a PackageNotFoundException. > Here are the details: > I created the types using XSD2JavaGenerator from this XSD: > <?xml version="1.0" encoding="UTF-8"?> > <schema xmlns="http://www.w3.org/2001/XMLSchema" > targetNamespace="http://psp.softwareag.com/catalogBaseType" > xmlns:catalogBaseType="http://psp.softwareag.com/catalogBaseType"> > <complexType name="CatalogBaseType"> > <attribute name="id" type="string"></attribute> > <attribute name="catalogID" type="string"></attribute> > <attribute name="fileName" type="string"></attribute> > <attribute name="catalogName" type="string"></attribute> > <attribute name="catalogStatus" type="string"></attribute> > <attribute name="supplierID" type="string"></attribute> > <attribute name="eclassVersion" type="string"></attribute> > </complexType> > <element name="catalogBaseType" > type="catalogBaseType:CatalogBaseType"></element> > </schema> > The classes get generated in package com.softwareag.psp.catalog.base.type. I > generated no interfaces ( I > ran XSD2JavaGenerator with the following options: -noInterfaces > -noNotification -noUnsettable -prefix). > I have called the generated factory CatalogBaseTypeFactory. > Then in my coding (SCA service implementation) I do the following: > a) statically register the factory with the default context > static { > helperContext = HelperProvider.getDefaultContext(); > CatalogBaseTypeFactory.INSTANCE.register( helperContext ); > } > b) create a data object from the targetNamespace of the XSD and the type > name > DataObject obj = helperContext.getDataFactory().create( > "http://psp.softwareag.com/catalogBaseType", "CatalogBaseType"); > Unexpectedly obj is an instance of DynamicDataObjectImpl, where I would have > expected an instance > of CatalogBaseType instead. > When I call the service that returns this SDO using a Java RMI client, I also > get an exception when trying to > deserialize the dynamic data object: > org.eclipse.emf.ecore.resource.Resource$IOWrappedException: Package with uri > 'http://psp.softwareag.com/catalogBaseType' not found. (http:///temp.xml, 5, > 24) > which is caused by an underlying > org.eclipse.emf.ecore.xmi.PackageNotFoundException. > (see also my previous post with subject "SDO deserialization error") > This exception also occurs when I use a SDO of the correct type created with > a call to the CatalogBaseTypeFactory. > Frank Budinsky commented on this on the mailing list: > >From: Frank Budinsky [mailto:fra...@ca.ibm.com] > >Sent: Thursday, October 07, 2010 3:30 PM > >To: u...@tuscany.apache.org > >Subject: Re: SDO instance creation and deserialization error > > > >I think that should work, so my only guess is that maybe the SCA component > >and runtime are not using the same classLoader and/or >HelperContext > >(scope). Maybe someone with more SCA knowledge can help. > > > >Frank. > However, I suppose that the first problem (wrong type of SDO created) > probably is not connected to SCA, > because there is no SCA code involved. It doesn't matter for this problem > what context the SCA runtime > uses, because I use the default SDO context directly when registering the > Factory and creating > the SDO. > The second problem (the PackageNotFoundException upon deserialization) may > have to do with SCA, > because there is a mediating SCA transformer. > I attach an Eclipse project with the xsd, the generated classes and a test > case. > When you start the com.softwareag.DataServiceLauncher with assertions enabled > (-ea) and then run > com.softwareag.client.DataServiceRMITest, you will see > a) the AssertionError in com.softwareag.impl.DataServiceImpl for the SDO with > unexpected type in test case testGetData() > b) the Exception on the client side when trying to receive the static SDO in > test case testGetCatalogData() -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.