[ https://issues.apache.org/jira/browse/TUSCANY-1293?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Kelvin Goodson updated TUSCANY-1293: ------------------------------------ Patch Info: [Patch Available] > SDO does not work with OSGi > --------------------------- > > Key: TUSCANY-1293 > URL: https://issues.apache.org/jira/browse/TUSCANY-1293 > Project: Tuscany > Issue Type: Bug > Components: Java SDO Implementation > Affects Versions: Java-SDO-beta1 > Environment: OS X Eclipse 3.3 M7 > Reporter: Bryan Hunt > Priority: Blocker > Fix For: Java-SDO-Next > > Attachments: sdo-osgi.txt > > > When I execute: > XSDHelper.INSTANCE.define(schema, null); > I end up with a NullPointerException. I've tracked down root cause ... > The static initializer of the HelperProvider executes this code: > provider = getInstance(HelperProvider.class.getClassLoader()); > which ends up calling: > HelperProvider provider = loadImplementation(cl, implName); > implName is null so > if (implName == null) { > implName = getImplementationName(cl); > } > ends up calling > implName = getImplementationName(cl); > which ends up calling: > InputStream is = cl.getResourceAsStream(SERVICE_RESOURCE_NAME); > where SERVICE_RESORUCE_NAME = > "META-INF/services/commonj.sdo.impl.HelperProvider" > getResourceAsStream() return null because META-INF/services does not exist in > the API bundle. It exists in the IMPL bundle and since you are using the > class loader from the API bundle, it won't work. > You can set > -Dcommonj.sdo.impl.HelperProvider=org.apache.tuscany.sdo.helper.HelperProviderImpl > to get around the above problem, but as soon as > return (HelperProvider) cl.loadClass(implName).newInstance(); > executes, you get a CalssNotFoundException. Again, this is because you are > trying to load a class outside the bundle with the wrong class loader. > tried modifying the API manifest by hand to add > Eclipse-BuddyPolicy: dependent > and > Eclipse-BuddyPolicy: global > Either of those buddy policies will get past the class loader problem > (although I believe this is specific to eclipse and won't work for OSGi in > general), but when HelperProvider is initializing, you get the following > exception: > java.lang.ExceptionInInitializerError > at org.apache.tuscany.sdo.impl.AttributeImpl.<clinit>(AttributeImpl.java:126) > at > org.apache.tuscany.sdo.impl.SDOFactoryImpl.createAttribute(SDOFactoryImpl.java:239) > at org.apache.tuscany.sdo.impl.ClassImpl.<clinit>(ClassImpl.java:68) > at > org.apache.tuscany.sdo.impl.SDOFactoryImpl$SDOEcoreFactory.createEClass(SDOFactoryImpl.java:76) > at > org.apache.tuscany.sdo.impl.SDOPackageImpl.createEClass(SDOPackageImpl.java:622) > at > org.apache.tuscany.sdo.impl.SDOPackageImpl.createPackageContents(SDOPackageImpl.java:550) > at org.apache.tuscany.sdo.impl.SDOPackageImpl.init(SDOPackageImpl.java:259) > at org.apache.tuscany.sdo.SDOPackage.<clinit>(SDOPackage.java:76) > at sun.misc.Unsafe.ensureClassInitialized(Native Method) > at > sun.reflect.UnsafeFieldAccessorFactory.newFieldAccessor(UnsafeFieldAccessorFactory.java:25) > at sun.reflect.ReflectionFactory.newFieldAccessor(ReflectionFactory.java:122) > at java.lang.reflect.Field.acquireFieldAccessor(Field.java:917) > at java.lang.reflect.Field.getFieldAccessor(Field.java:898) > at java.lang.reflect.Field.get(Field.java:357) > at org.apache.tuscany.sdo.util.SDOUtil.registerStaticTypes(SDOUtil.java:196) > at > org.apache.tuscany.sdo.model.impl.ModelFactoryImpl.init(ModelFactoryImpl.java:731) > at org.apache.tuscany.sdo.model.ModelFactory.<clinit>(ModelFactory.java:41) > at > org.apache.tuscany.sdo.helper.TypeHelperImpl.getBuiltInModels(TypeHelperImpl.java:61) > at org.apache.tuscany.sdo.helper.TypeHelperImpl.<init>(TypeHelperImpl.java:79) > at > org.apache.tuscany.sdo.helper.HelperContextImpl.<init>(HelperContextImpl.java:46) > at > org.apache.tuscany.sdo.helper.HelperProviderImpl.createDefaultHelpers(HelperProviderImpl.java:38) > at > org.apache.tuscany.sdo.rtlib.helper.HelperProviderBase.<init>(HelperProviderBase.java:78) > at > org.apache.tuscany.sdo.helper.HelperProviderImpl.<init>(HelperProviderImpl.java:31) > at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) > at > sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) > at > sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) > at java.lang.reflect.Constructor.newInstance(Constructor.java:494) > at java.lang.Class.newInstance0(Class.java:350) > at java.lang.Class.newInstance(Class.java:303) > at commonj.sdo.impl.HelperProvider.loadImplementation(HelperProvider.java:157) > at commonj.sdo.impl.HelperProvider.getInstance(HelperProvider.java:126) > at commonj.sdo.impl.HelperProvider.<clinit>(HelperProvider.java:69) > at commonj.sdo.helper.XSDHelper.<clinit>(XSDHelper.java:195) > at notification.sdo.Application.start(Application.java:23) > at > org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:153) > at > org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:106) > at > org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:76) > at > org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:363) > at > org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:176) > 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:585) > at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:497) > at org.eclipse.equinox.launcher.Main.basicRun(Main.java:436) > at org.eclipse.equinox.launcher.Main.run(Main.java:1162) > at org.eclipse.equinox.launcher.Main.main(Main.java:1137) > Caused by: java.lang.NullPointerException > at > org.apache.tuscany.sdo.impl.AttributeImpl.eStaticClass(AttributeImpl.java:73) > at org.eclipse.emf.ecore.impl.EObjectImpl.eClass(EObjectImpl.java:224) > at > org.eclipse.emf.ecore.impl.BasicEObjectImpl.eDynamicInverseAdd(BasicEObjectImpl.java:1413) > at > org.eclipse.emf.ecore.impl.EStructuralFeatureImpl.eInverseAdd(EStructuralFeatureImpl.java:514) > at > org.eclipse.emf.ecore.impl.BasicEObjectImpl.eInverseAdd(BasicEObjectImpl.java:1389) > at org.eclipse.emf.ecore.util.EcoreEList.inverseAdd(EcoreEList.java:282) > at > org.eclipse.emf.common.notify.impl.NotifyingListImpl.addUnique(NotifyingListImpl.java:318) > at org.eclipse.emf.common.util.BasicEList.add(BasicEList.java:626) > at > org.eclipse.emf.ecore.impl.EPackageImpl.createEAttribute(EPackageImpl.java:745) > at > org.apache.tuscany.sdo.impl.FactoryBase.createDocumentRoot(FactoryBase.java:301) > at org.apache.tuscany.sdo.impl.FactoryBase.initXSD(FactoryBase.java:156) > at > org.apache.tuscany.sdo.model.internal.impl.InternalFactoryImpl.createXSDMetaData(InternalFactoryImpl.java:211) > at > org.apache.tuscany.sdo.model.internal.impl.InternalFactoryImpl.initializeMetaData(InternalFactoryImpl.java:206) > at > org.apache.tuscany.sdo.model.internal.impl.InternalFactoryImpl.init(InternalFactoryImpl.java:172) > at > org.apache.tuscany.sdo.model.internal.InternalFactory.<clinit>(InternalFactory.java:41) > ... 47 more -- 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]