You could try using extensible namespaces. Obtain your XSDHelper like this:
HelperContext scope = org.apache.tuscany.sdo.api.SDOUtil.createHelperContext(true); XSDHelper xsdHelper = scope.getXSDHelper(); Perhaps it would simplify things for you if you put the new types in a new file with the same namespace, instead of updating the file. Please have a look at the Tuscany SDO Java FAQ at http://tuscany.apache.org/tuscany-sdo-java-faq.html -- Sebastian From: Malisetti, Ramanjaneyulu [mailto:[email protected]] Sent: Wednesday, December 05, 2012 4:03 PM To: [email protected] Subject: RE: How to add types in SDO on the fly? Thanks a lot Sebastian, this is good. I have another question related to XSDHelper.define(XSD). Suppose if I load XSD say abc.xsd using XSDHelper.define() and then load same file with new types. New types are not available as loading XSD is skipped due XSDHelper thinking this schema is already loaded. How to overcome this problem? Regards Raman From: Millies, Sebastian [mailto:[email protected]] Sent: Wednesday, December 05, 2012 8:19 PM To: [email protected]<mailto:[email protected]> Subject: RE: How to add types in SDO on the fly? Hello Raman, here’s an example : private Type theType; private void createType() { HelperContext ctx = HelperProvider.getDefaultContext(); // define a new type DataObject typeDef = ctx.getDataFactory().create( "commonj.sdo", "Type" ); typeDef.set( "uri", "http://namespacei/file" ); typeDef.set( "name", "FileType" ); // add properties DataObject propDef; propDef = typeDef.createDataObject( "property" ); propDef.set( "name", "id" ); propDef.set( "type", ctx.getTypeHelper().getType( "commonj.sdo", "String" ) ); propDef = typeDef.createDataObject( "property" ); propDef.set( "name", "fileName" ); propDef.set( "type", ctx.getTypeHelper().getType( "commonj.sdo", "String" ) ); propDef = typeDef.createDataObject( "property" ); propDef.set( "name", "lastModified" ); propDef.set( "type", ctx.getTypeHelper().getType( "commonj.sdo", "Date" ) ); propDef = typeDef.createDataObject( "property" ); propDef.set( "name", "length" ); propDef.set( "type", ctx.getTypeHelper().getType( "commonj.sdo", "Long" ) ); // define the type theType = ctx.getTypeHelper().define( typeDef ); } SDOs can be created just like XSD-based ones, e.g. private DataObject createDataObject( File file ) { HelperContext ctx = HelperProvider.getDefaultContext(); DataFactory df = ctx.getDataFactory(); // create object of dynamically defined type DataObject sdo = df.create( theType ); sdo.setString( "id", file.getPath() ); sdo.setString( "fileName", file.getName() ); sdo.setDate( "lastModified", new Date() ); return sdo; } • Sebastian From: Malisetti, Ramanjaneyulu [mailto:[email protected]] Sent: Wednesday, December 05, 2012 1:32 PM To: [email protected]<mailto:[email protected]> Subject: How to add types in SDO on the fly? Hi, I am familiar with XSDHelper.define(XSD) to load types into SDO runtime. We have a requirement to add types at runtime without XSD file. How to achieve that? Any idea? Regards Raman IDS Scheer Consulting GmbH Geschäftsführer/Managing Directors: Michael Rehm, Ivo Totev Sitz/Registered office: Altenkesseler Straße 17, 66115 Saarbrücken, Germany - Registergericht/Commercial register: Saarbrücken HRB 19681 http://www.ids-scheer-consulting.com IDS Scheer Consulting GmbH Geschäftsführer/Managing Directors: Michael Rehm, Ivo Totev Sitz/Registered office: Altenkesseler Straße 17, 66115 Saarbrücken, Germany - Registergericht/Commercial register: Saarbrücken HRB 19681 http://www.ids-scheer-consulting.com
