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


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]

Reply via email to