felix-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Karl Pauls (Resolved) (JIRA)" <j...@apache.org>
Subject [jira] [Resolved] (FELIX-3220) Multiple ClassCastException(s) when invoking OSGi Service-Hooks (EventHook, FindHook)
Date Fri, 18 Nov 2011 11:04:51 GMT

     [ https://issues.apache.org/jira/browse/FELIX-3220?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]

Karl Pauls resolved FELIX-3220.
-------------------------------

    Resolution: Fixed

Yes, I think you are correct. I commited a fix (actually, I did go over all hook callbacks
and did find some more of this kind of problems). Thanks a lot. Can you please test with the
latest trunk and close this issue if it works for you.
                
> Multiple ClassCastException(s) when invoking OSGi Service-Hooks (EventHook, FindHook)
> -------------------------------------------------------------------------------------
>
>                 Key: FELIX-3220
>                 URL: https://issues.apache.org/jira/browse/FELIX-3220
>             Project: Felix
>          Issue Type: Bug
>          Components: Framework
>    Affects Versions: framework-4.0.1
>         Environment: Enable OSGi Security, using Felix security bundle version 2.0.0
>            Reporter: Michael Hirsch
>            Assignee: Karl Pauls
>            Priority: Critical
>             Fix For: framework-4.2.0
>
>
> *Scenario:*
> - Register a EventHook in the OSGi service registry as described in the OSGi core specification
4.2. 
> - Run felix with a SecurityManager
> - The framework is not calling the EventHook during framework service (register, modify,
and unregister service) operations.
> *Expected Behavior*
> - The framework code calls the EventHook during framework service (register, modify,
and unregister service) operations. 
> *Current Behavior:*
> - A ClassCastException occurs in the framework code org.apache.felix.framework.util.SecureAction:1628
> - Logged on "WARNING" Level
> *Probably Caused By:*
> The ClassCastException is caused by calling the wrong setter-method within the org.apache.felix.framework.util.SecureAction:1135
class. 
> The ServiceEvent will never be set which causes that in line 1628 when invoking the EventHook
the ServiceEvent argument is missing and parameters for the EventHook will be casted wrong.
> Method: org.apache.felix.framework.util.SecureAction # invokeServiceEventHook
> {code}
> public void invokeServiceEventHook(
>         org.osgi.framework.hooks.service.EventHook eh,
>         ServiceEvent event, Collection<BundleContext> contexts)
>         throws Exception
>     { ....
>       actions.set(Actions.INVOKE_SERVICE_EVENT_HOOK, eh, contexts);
>      ....
>     }
> {code}
> Method: org.apache.felix.framework.util.SecureAction.Actions # run
> has wrong arguments: 
> arg1 = EventHook
> arg2 = Collection<BundleContext>
> arg3 = null
> {code}
> case INVOKE_SERVICE_EVENT_HOOK:
>                     ((org.osgi.framework.hooks.service.EventHook) arg1).event(
>                         (ServiceEvent) arg2, (Collection<BundleContext>) arg3);
>                     return null;
> {code}
> *Solution:*
> Changing the method of setting the arguments for the Action class. Set also the ServiceEvent!
> {code}
> public void invokeServiceEventHook(
>         org.osgi.framework.hooks.service.EventHook eh,
>         ServiceEvent event, Collection<BundleContext> contexts)
>         throws Exception
>     { ....
>       actions.set(Actions.INVOKE_SERVICE_EVENT_HOOK, eh, event, contexts);
>      ....
>     }
> {code}
> *Additional:*
> # Meanwhile investigating code I found that also invoking the ServiceEventListenerHook
has probably the same behavior! When calling the setter-method for setting the arguments for
the Action class there is missing the ServiceEvent.
> # Invoking FindHook using wrong action constant which causes a ClassCastException!
> Actions.INVOKE_SERVICE_EVENT_HOOK need to be changed to Actions.INVOKE_SERVICE_FIND_HOOK
> {code}
> public void invokeServiceFindHook(
>         org.osgi.framework.hooks.service.FindHook fh,
>         BundleContext context, String name, String filter,
>         boolean allServices, Collection<ServiceReference<?>> references)
>         throws Exception
>     {....
>        actions.set(
>                 Actions.INVOKE_SERVICE_EVENT_HOOK, fh, context, name, filter,
>                 (allServices) ? Boolean.TRUE : Boolean.FALSE, references);
>      ....}
> {code}

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Mime
View raw message