YANG, BongYeol created FELIX-3990:
-------------------------------------

             Summary: iPOJO 1.8.6 manipulator removes custom annotations
                 Key: FELIX-3990
                 URL: https://issues.apache.org/jira/browse/FELIX-3990
             Project: Felix
          Issue Type: Bug
          Components: iPOJO
    Affects Versions: ipojo-runtime-1.8.6, ipojo-manipulator-1.8.6
         Environment: JDK 1.7.0_17, felix framework 4.2.0
            Reporter: YANG, BongYeol


I want to migrate from iPOJO 1.4.0 to 1.8.6 and tested my bundles.

In ipojo 1.4.0, custom (user-defined) runtime annotations are moved to ipojo 
generated proxy class, but ipojo 1.8.6 does not care about it.

For example:

# TestMethod.java
package org.araqne.test;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface TestMethod {
        String name();
}

# TestService.java

package org.araqne.test;

public interface TestService {

        void stop();
        void start();
        
}

# TestServiceImpl.java

package org.araqne.test.impl;

import org.apache.felix.ipojo.annotations.Component;
import org.apache.felix.ipojo.annotations.Provides;
import org.araqne.test.TestMethod;
import org.araqne.test.TestService;

@Component(name = "test-service")
@Provides
public class TestServiceImpl implements TestService {
        
        public TestServiceImpl(String guid) {
        }
        
        @Override
        @TestMethod(name = "start")
        public void start() {
                
        }

        @Override
        @TestMethod(name = "stop")
        public void stop() {
        }

}

# OtherServiceImpl.java

package org.araqne.test.impl;

import java.lang.reflect.Method;

import org.apache.felix.ipojo.annotations.Component;
import org.apache.felix.ipojo.annotations.Requires;
import org.apache.felix.ipojo.annotations.Validate;
import org.araqne.test.TestMethod;
import org.araqne.test.TestService;

@Component(name = "test-base-service")
public class OtherServiceImpl {
        
        @Requires
        private TestService testService;

        public OtherServiceImpl(String guid) {
        }
        
        @Validate
        public void s() {
                Method[] methods = testService.getClass().getDeclaredMethods();
                for (Method m : methods) {
                        TestMethod rpcMethod = 
m.getAnnotation(TestMethod.class);
                        if (rpcMethod == null) {
                                System.out.println(String.format("annotation 
not found: method [%s], class=[%s]", m.getName(), 
testService.getClass().getName()));
                        } else {
                                System.out.println(String.format("annotation 
found: method [%s], class=[%s]", m.getName(), 
testService.getClass().getName()));
                        }
                }
        }
}


In iPOJO 1.4.0, bundle print out like this:

annotation found: method [start], class=[org.araqne.test.impl.TestServiceImpl]
annotation found: method [stop], class=[org.araqne.test.impl.TestServiceImpl]
annotation not found: method [__start], 
class=[org.araqne.test.impl.TestServiceImpl]
annotation not found: method [__stop], 
class=[org.araqne.test.impl.TestServiceImpl]
annotation not found: method [_setInstanceManager], 
class=[org.araqne.test.impl.TestServiceImpl]
annotation not found: method [getComponentInstance], 
class=[org.araqne.test.impl.TestServiceImpl]

In iPOJO 1.8.6, bundle print out like this:

annotation not found: method [start], class=[org.araqne.test.TestService$$Proxy]
annotation not found: method [stop], class=[org.araqne.test.TestService$$Proxy]

Are there any other workaround for this? or just bug?


--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to