Unfortunately, I was not able to reproduce this in a stand-alone example so far (tried simply adding all involved files to one bundle). I can share the code on Dropbox if needed.
Yours, Alexey Romanov On Sat, May 12, 2012 at 4:38 PM, Alexey Romanov <[email protected]> wrote: > Additional information. This works: > > @Bind > public synchronized void bindDriver(Driver driver) { > if (getCurrentDriverByName(driver) == null) { > // drivers.put(driver.getName(), driver); > // logger.info("Driver '{}' added", driver.getName()); > // for (OdpObjectClass objectClass : > driver.getSupportedClasses()) { > // objectRegistry.addObjectClass(objectClass); > // } > } > } > > but uncommenting > > drivers.put(driver.getName(), driver); > > restores the error. > > Yours, Alexey Romanov > > > On Sat, May 12, 2012 at 4:24 PM, Alexey Romanov > <[email protected]> wrote: >> For some reason PojoizationPlugin is failing to handle this class: >> >> package ru.focusmedia.odp.server.sspd.impl; >> >> import java.util.Map; >> >> import org.apache.felix.ipojo.annotations.Bind; >> import org.apache.felix.ipojo.annotations.Component; >> import org.apache.felix.ipojo.annotations.Instantiate; >> import org.apache.felix.ipojo.annotations.Provides; >> import org.apache.felix.ipojo.annotations.Requires; >> import org.apache.felix.ipojo.annotations.Unbind; >> import org.slf4j.Logger; >> import org.slf4j.LoggerFactory; >> >> import com.google.common.collect.Maps; >> >> import ru.focusmedia.odp.server.api.objects.OdpObjectClass; >> import ru.focusmedia.odp.server.drivers.api.Driver; >> import ru.focusmedia.odp.server.sspd.api.DriverRegistry; >> import ru.focusmedia.odp.server.sspd.api.ObjectRegistry; >> >> @Component >> //@Provides >> //@Instantiate >> public class DriverRegistryImpl implements DriverRegistry { >> private final Logger logger = LoggerFactory.getLogger(getClass()); >> private Map<String, Driver> drivers = Maps.newHashMap(); >> >> // @Requires >> private ObjectRegistry objectRegistry; >> >> @Override >> public Driver getDriver(String name) { >> return drivers.get(name); >> } >> >> // @Bind >> public synchronized void bindDriver(Driver driver) { >> if (getCurrentDriverByName(driver) == null) { >> drivers.put(driver.getName(), driver); >> logger.info("Driver '{}' added", driver.getName()); >> for (OdpObjectClass objectClass : >> driver.getSupportedClasses()) { >> objectRegistry.addObjectClass(objectClass); >> } >> } >> } >> >> // @Unbind >> public synchronized void unbindDriver(Driver driver) { >> if (getCurrentDriverByName(driver) == driver) { >> drivers.remove(driver.getName()); >> logger.info("Driver '{}' removed", driver.getName()); >> } else { >> logger.debug( >> "Driver with name '{}' removed, but >> it isn't currently the one >> registered for this name", >> driver.getName()); >> } >> } >> >> private Driver getCurrentDriverByName(Driver driver) { >> return drivers.get(driver.getName()); >> } >> } >> >> >> Same exception happens in Eclipse and from the command line: >> >> java.lang.IllegalStateException: ClassReader.accept() should be called >> with EXPAND_FRAMES flag >> at org.objectweb.asm.commons.LocalVariablesSorter.visitFrame(Unknown >> Source) >> at org.objectweb.asm.ClassReader.accept(Unknown Source) >> at org.objectweb.asm.ClassReader.accept(Unknown Source) >> at >> org.apache.felix.ipojo.manipulation.Manipulator.manipulate(Manipulator.java:100) >> at >> org.apache.felix.ipojo.manipulator.ManipulationEngine.generate(ManipulationEngine.java:111) >> at >> org.apache.felix.ipojo.manipulator.Pojoization.pojoization(Pojoization.java:312) >> at >> org.apache.felix.ipojo.bnd.PojoizationPlugin.analyzeJar(PojoizationPlugin.java:118) >> at aQute.lib.osgi.Analyzer.analyze(Analyzer.java:130) >> at aQute.lib.osgi.Builder.analyze(Builder.java:306) >> at aQute.lib.osgi.Analyzer.calcManifest(Analyzer.java:301) >> at aQute.lib.osgi.Builder.build(Builder.java:73) >> at >> org.apache.felix.bundleplugin.BundlePlugin.buildOSGiBundle(BundlePlugin.java:547) >> at >> org.apache.felix.bundleplugin.BundlePlugin.execute(BundlePlugin.java:347) >> at >> org.apache.felix.bundleplugin.BundlePlugin.execute(BundlePlugin.java:264) >> at >> org.apache.felix.bundleplugin.BundlePlugin.execute(BundlePlugin.java:255) >> at >> org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101) >> at >> org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:209) >> at >> org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153) >> at >> org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145) >> at >> org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84) >> at >> org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59) >> at >> org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183) >> at >> org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161) >> at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:320) >> at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:156) >> at org.apache.maven.cli.MavenCli.execute(MavenCli.java:537) >> at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:196) >> at org.apache.maven.cli.MavenCli.main(MavenCli.java:141) >> 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.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290) >> at >> org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:230) >> at >> org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:409) >> at >> org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352) >> >> >> The error goes away after commenting out @Component or bindDriver and >> unbindDriver methods. >> >> >> Relevant part of pom.xml: >> >> <build> >> <plugins> >> <plugin> >> <groupId>org.apache.felix</groupId> >> <artifactId>maven-bundle-plugin</artifactId> >> <extensions>true</extensions> >> <configuration> >> <instructions> >> <_include>bnd.bnd</_include> >> </instructions> >> </configuration> >> </plugin> >> </plugins> >> </build> >> >> >> bnd.bnd: >> >> -src: src/main/java >> -classpath: target/classes >> -plugin: >> org.apache.felix.ipojo.bnd.PojoizationPlugin;path:="${basedir}/../cnf/plugins/bnd-ipojo-plugin-1.8.4-fat.jar";metadata=${basedir}/src/main/resources/metadata.xml;use-local-schemas=true >> >> Bundle-SymbolicName: ru.focusmedia.odp.server.sspd.impl >> Bundle-Version: 0.1.0 >> Private-Package: ru.focusmedia.odp.server.sspd.impl.* >> >> >> bnd-ipojo-plugin-1.8.4-fat.jar mentioned in bnd.bnd is a single file >> containing bnd-ipojo-plugin and its dependencies. >> >> Yours, Alexey Romanov --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]

