Hi,

So first it was an iPOJO issue 
(https://issues.apache.org/jira/browse/FELIX-2664). I've fixed it in the trunk. 
To check,  compile the manipulator form the iPOJO trunk and configure the 
maven-ipojo-plugin with:
<plugin>
        <groupId>org.apache.felix</groupId>
        <artifactId>maven-ipojo-plugin</artifactId>
        <executions>
                <execution>
                        <goals>
                                <goal>ipojo-bundle</goal>
                        </goals>
                </execution>
        </executions>
        <dependencies>
                <dependency>
                        
<artifactId>org.apache.felix.ipojo.manipulator</artifactId>
                        <groupId>org.apache.felix</groupId>
                        <version>1.7.0-SNAPSHOT</version>
                </dependency>
        </dependencies>
</plugin>

Regards,

Clement

On 12.10.2010, at 19:48, Clement Escoffier wrote:

> Hi,
> 
> Could you send me your code or (better) a simplified version. We have code 
> using JNI and iPOJO but it's not integrated in the test suite (shame on 
> me...).
> It probably comes from an issue during the manipulation of the native 
> methods. 
> 
> Regards,
> 
> Clement
> 
> On 12.10.2010, at 14:51, Thiébault Benoît wrote:
> 
>> I tried.
>> Still got the same error.
>> 
>> Ben
>> 
>> Le 12 oct. 2010 à 14:44, Derek Baum a écrit :
>> 
>>> Try putting System.loadLibrary() in a static block, rather than in the
>>> start() method.
>>> 
>>> public class HelloWorld {
>>> static {
>>>   System.loadLibrary("HelloWorld");
>>> }
>>> ...
>>> }
>>> 
>>> Derek
>>> 
>>> 
>>> 2010/10/12 Thiébault Benoît <[email protected]>
>>> 
>>>> This is definitely an iPOJO problem: I just used an OSGi BundleActivator
>>>> and it works...
>>>> 
>>>> Ben
>>>> 
>>>> Le 12 oct. 2010 à 12:30, Derek Baum a écrit :
>>>> 
>>>>> I doubt this problem is related to iPOJO, but it may be worth factoring
>>>> this
>>>>> out of the equation by testing with a BundleActivator instead of iPOJO.
>>>> It
>>>>> may still fail, but you may get a more meaningful exception.
>>>>> 
>>>>> I created a Mac native bundle about 6 months ago, and was caught out by
>>>> the
>>>>> .jnilib extension, which was required on OSX 10.6.3.
>>>>> 
>>>>> Derek
>>>>> 
>>>>> 
>>>>> 2010/10/12 Thiébault Benoît <[email protected]>
>>>>> 
>>>>>> Hi Derek,
>>>>>> 
>>>>>> I tried to run it under Linux (changing the Bundle-NativeCode
>>>> accordingly)
>>>>>> and got the same result.
>>>>>> 
>>>>>> The jnilib extension was mandatory in MacOSX early days, it is now
>>>> supposed
>>>>>> to supports both (
>>>>>> 
>>>> http://markmail.org/message/cksb24oiwjszohvl#query:jnilib%20dylib+page:1+mid:nvmhqaimybukzg4l+state:results
>>>>>> ).
>>>>>> 
>>>>>> Anyway, if the problem was here, it would crash when using "java
>>>>>> -Djava.library.path=./lib org.test.jni.HelloWorld" as well, which is not
>>>> the
>>>>>> case.
>>>>>> 
>>>>>> Regarding the OS name, I tried to use MacOSX instead of "Mac OS X" and
>>>>>> still got the same error. On old equinox versions (prior 3.3 I think),
>>>> the
>>>>>> MacOSX alias was not recognized, this is why I chose to be conservative
>>>> at
>>>>>> first and used "Mac OS X" instead, which was supported.
>>>>>> 
>>>>>> Kind regards,
>>>>>> 
>>>>>> Ben
>>>>>> 
>>>>>> Le 12 oct. 2010 à 11:57, Derek Baum a écrit :
>>>>>> 
>>>>>>> System.loadLibrary() on OSX expects the shared library to have a
>>>> .jnilib
>>>>>>> extension.
>>>>>>> 
>>>>>>> So try renaming libHelloWorld.dylib to libHelloWorld.jnilib and adjust
>>>>>> the
>>>>>>> Bundle-NativeCode header accordingly. I actually use osname=MacOSX, but
>>>>>> "Mac
>>>>>>> OS X" may work too.
>>>>>>> 
>>>>>>> regards,
>>>>>>> 
>>>>>>> Derek
>>>>>>> 
>>>>>>> 2010/10/12 Thiébault Benoît <[email protected]>
>>>>>>> 
>>>>>>>> Hi everyone,
>>>>>>>> 
>>>>>>>> I'm trying a very simple JNI example with iPOJO and OSGi.
>>>>>>>> Basically, I implemented the HelloWorld example provided by SUN (
>>>>>>>> http://java.sun.com/docs/books/jni/html/start.html) and packaged it
>>>> as
>>>>>> an
>>>>>>>> iPOJO bundle. The HelloWorld.java file looks like this:
>>>>>>>> 
>>>>>>>>> package org.test.jni;
>>>>>>>>> 
>>>>>>>>> public class HelloWorld {
>>>>>>>>> public native void nativePrint();
>>>>>>>>> 
>>>>>>>>> public static void main(String[] args) {
>>>>>>>>>  (new HelloWorld()).start();
>>>>>>>>> }
>>>>>>>>> 
>>>>>>>>> public void start() {
>>>>>>>>>  System.loadLibrary("HelloWorld");
>>>>>>>>> 
>>>>>>>>>  nativePrint();
>>>>>>>>> }
>>>>>>>>> 
>>>>>>>>> public void stop() {
>>>>>>>>>  System.out.println("Goodbye");
>>>>>>>>> }
>>>>>>>>> }
>>>>>>>> 
>>>>>>>> 
>>>>>>>> While the HelloWorld.c is:
>>>>>>>> 
>>>>>>>>> #include <jni.h>
>>>>>>>>> #include <stdio.h>
>>>>>>>>> #include "org_test_jni_HelloWorld.h"
>>>>>>>>> 
>>>>>>>>> JNIEXPORT void JNICALL
>>>>>>>>> Java_org_test_jni_HelloWorld_nativePrint(JNIEnv *env, jobject obj)
>>>>>>>>> {
>>>>>>>>> printf("Hello World!\n");
>>>>>>>>> return;
>>>>>>>>> }
>>>>>>>> 
>>>>>>>> 
>>>>>>>> The BND configuration is:
>>>>>>>> 
>>>>>>>>> <plugin>
>>>>>>>>>  <groupId>org.apache.felix</groupId>
>>>>>>>>>  <artifactId>maven-bundle-plugin</artifactId>
>>>>>>>>>  <version>1.4.3</version>
>>>>>>>>>  <extensions>true</extensions>
>>>>>>>>>  <configuration>
>>>>>>>>>          <instructions>
>>>>>>>>> 
>>>>>>>> <Bundle-SymbolicName>${pom.artifactId}</Bundle-SymbolicName>
>>>>>>>>>                  <Private-Package>org.test.jni</Private-Package>
>>>>>>>>>                  <Import-Package></Import-Package>
>>>>>>>>>                  <Export-Package></Export-Package>
>>>>>>>>>                  <Include-Resource>
>>>>>>>>>                          {maven-resources},
>>>>>>>>>                          lib=src/main/c/lib
>>>>>>>>>                 </Include-Resource>
>>>>>>>>>                  <Bundle-NativeCode>
>>>>>>>>>                          lib/libHelloWorld.dylib;
>>>>>>>>>                          osname="Mac OS X"
>>>>>>>>>                    </Bundle-NativeCode>
>>>>>>>>>          </instructions>
>>>>>>>>>  </configuration>
>>>>>>>>> </plugin>
>>>>>>>> 
>>>>>>>> 
>>>>>>>> and the iPOJO metadata.xml:
>>>>>>>>> <ipojo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
>>>>>>>>>  xsi:schemaLocation="org.apache.felix.ipojo
>>>>>>>> http://felix.apache.org/ipojo/schemas/CURRENT/core.xsd";
>>>>>>>>>  xmlns="org.apache.felix.ipojo">
>>>>>>>>>  <component classname="org.test.jni.HelloWorld">
>>>>>>>>>          <callback transition="validate" method="start"/>
>>>>>>>>>    <callback transition="invalidate" method="stop"/>
>>>>>>>>>  </component>
>>>>>>>>>  <instance component="org.test.jni.HelloWorld" />
>>>>>>>>> </ipojo>
>>>>>>>> 
>>>>>>>> 
>>>>>>>> When I run this sample application via command line, it works:
>>>>>>>>> java -Djava.library.path=./lib org.test.jni.HelloWorld
>>>>>>>>> Hello World!
>>>>>>>> 
>>>>>>>> But when I load it in OSGi (equinox), I have the following error:
>>>>>>>>> [ERROR] org.test.jni.HelloWorld : Code attribute in native or
>>>> abstract
>>>>>>>> methods in class file org/test/jni/HelloWorld
>>>>>>>>> java.lang.ClassFormatError: Code attribute in native or abstract
>>>>>> methods
>>>>>>>> in class file org/test/jni/HelloWorld
>>>>>>>>>  at java.lang.ClassLoader.defineClass1(Native Method)
>>>>>>>>>  at java.lang.ClassLoader.defineClassCond(ClassLoader.java:632)
>>>>>>>>>  at java.lang.ClassLoader.defineClass(ClassLoader.java:616)
>>>>>>>>>  at
>>>>>>>> 
>>>>>> 
>>>> org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.defineClass(DefaultClassLoader.java:188)
>>>>>>>>>  at
>>>>>>>> 
>>>>>> 
>>>> org.eclipse.osgi.baseadaptor.loader.ClasspathManager.defineClass(ClasspathManager.java:580)
>>>>>>>>>  at
>>>>>>>> 
>>>>>> 
>>>> org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findClassImpl(ClasspathManager.java:550)
>>>>>>>>>  at
>>>>>>>> 
>>>>>> 
>>>> org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClassImpl(ClasspathManager.java:481)
>>>>>>>>>  at
>>>>>>>> 
>>>>>> 
>>>> org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass_LockClassLoader(ClasspathManager.java:469)
>>>>>>>>>  at
>>>>>>>> 
>>>>>> 
>>>> org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass(ClasspathManager.java:449)
>>>>>>>>>  at
>>>>>>>> 
>>>>>> 
>>>> org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.findLocalClass(DefaultClassLoader.java:216)
>>>>>>>>>  at
>>>>>>>> 
>>>>>> 
>>>> org.eclipse.osgi.internal.loader.BundleLoader.findLocalClass(BundleLoader.java:393)
>>>>>>>>>  at
>>>>>>>> 
>>>>>> 
>>>> org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:469)
>>>>>>>>>  at
>>>>>>>> 
>>>>>> 
>>>> org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:422)
>>>>>>>>>  at
>>>>>>>> 
>>>>>> 
>>>> org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:410)
>>>>>>>>>  at
>>>>>>>> 
>>>>>> 
>>>> org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107)
>>>>>>>>>  at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
>>>>>>>>>  at
>>>>>>>> 
>>>>>> 
>>>> org.eclipse.osgi.internal.loader.BundleLoader.loadClass(BundleLoader.java:338)
>>>>>>>>>  at
>>>>>>>> 
>>>>>> 
>>>> org.eclipse.osgi.framework.internal.core.BundleHost.loadClass(BundleHost.java:232)
>>>>>>>>>  at
>>>>>>>> 
>>>>>> 
>>>> org.eclipse.osgi.framework.internal.core.AbstractBundle.loadClass(AbstractBundle.java:1197)
>>>>>>>>>  at
>>>>>>>> 
>>>>>> 
>>>> org.apache.felix.ipojo.ComponentFactory.loadClass(ComponentFactory.java:220)
>>>>>>>>>  at
>>>>>>>> org.apache.felix.ipojo.InstanceManager.load(InstanceManager.java:542)
>>>>>>>>>  at
>>>>>>>> 
>>>>>> 
>>>> org.apache.felix.ipojo.InstanceManager.createObject(InstanceManager.java:574)
>>>>>>>>>  at
>>>>>>>> 
>>>>>> 
>>>> org.apache.felix.ipojo.InstanceManager.getPojoObject(InstanceManager.java:777)
>>>>>>>>>  at
>>>>>>>> 
>>>>>> 
>>>> org.apache.felix.ipojo.handlers.lifecycle.callback.LifecycleCallbackHandler.__stateChanged(LifecycleCallbackHandler.java:156)
>>>>>>>>>  at
>>>>>>>> 
>>>>>> 
>>>> org.apache.felix.ipojo.handlers.lifecycle.callback.LifecycleCallbackHandler.stateChanged(LifecycleCallbackHandler.java)
>>>>>>>>>  at
>>>>>>>> 
>>>>>> 
>>>> org.apache.felix.ipojo.InstanceManager.setState(InstanceManager.java:441)
>>>>>>>>>  at
>>>>>>>> org.apache.felix.ipojo.InstanceManager.start(InstanceManager.java:322)
>>>>>>>>>  at
>>>>>>>> 
>>>>>> 
>>>> org.apache.felix.ipojo.ComponentFactory.createInstance(ComponentFactory.java:155)
>>>>>>>>>  at
>>>>>>>> 
>>>>>> 
>>>> org.apache.felix.ipojo.IPojoFactory.createComponentInstance(IPojoFactory.java:301)
>>>>>>>>>  at
>>>>>>>> 
>>>>>> 
>>>> org.apache.felix.ipojo.IPojoFactory.createComponentInstance(IPojoFactory.java:238)
>>>>>>>>>  at
>>>>>>>> 
>>>>>> 
>>>> org.apache.felix.ipojo.InstanceCreator$ManagedInstance.create(InstanceCreator.java:343)
>>>>>>>>>  at
>>>>>>>> 
>>>>>> 
>>>> org.apache.felix.ipojo.InstanceCreator.addInstance(InstanceCreator.java:89)
>>>>>>>>>  at org.apache.felix.ipojo.Extender.parse(Extender.java:269)
>>>>>>>>>  at
>>>>>>>> org.apache.felix.ipojo.Extender.startManagementFor(Extender.java:208)
>>>>>>>>>  at org.apache.felix.ipojo.Extender.access$600(Extender.java:52)
>>>>>>>>>  at
>>>>>>>> org.apache.felix.ipojo.Extender$CreatorThread.run(Extender.java:682)
>>>>>>>>>  at java.lang.Thread.run(Thread.java:637)
>>>>>>>>> [ERROR] org.test.jni.HelloWorld : Code attribute in native or
>>>> abstract
>>>>>>>> methods in class file org/test/jni/HelloWorld
>>>>>>>>> [ERROR] iPOJO Instance Creator : A matching factory was found for
>>>>>>>> {component=org.test.jni.HelloWorld, instance.name
>>>>>> =org.test.jni.HelloWorld-0},
>>>>>>>> but the instantiation failed : The configuration is not correct for
>>>> the
>>>>>> type
>>>>>>>> org.test.jni.HelloWorld : Code attribute in native or abstract methods
>>>>>> in
>>>>>>>> class file org/test/jni/HelloWorld
>>>>>>>>> 
>>>>>>>> 
>>>>>>>> 
>>>>>>>> What did go wrong?
>>>>>>>> 
>>>>>>>> Kind regards,
>>>>>>>> Ben
>>>>>>>> ---------------------------------------------------------------------
>>>>>>>> To unsubscribe, e-mail: [email protected]
>>>>>>>> For additional commands, e-mail: [email protected]
>>>>>>>> 
>>>>>>>> 
>>>>>> 
>>>>>> 
>>>>>> ---------------------------------------------------------------------
>>>>>> To unsubscribe, e-mail: [email protected]
>>>>>> For additional commands, e-mail: [email protected]
>>>>>> 
>>>>>> 
>>>> 
>>>> 
>>>> ---------------------------------------------------------------------
>>>> To unsubscribe, e-mail: [email protected]
>>>> For additional commands, e-mail: [email protected]
>>>> 
>>>> 
>> 
>> 
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: [email protected]
>> For additional commands, e-mail: [email protected]
>> 
> 

Reply via email to