Karaf v2.3.0, org.apache.aries.blueprint.core:1.0.1, хвърля ClassCastException, когато се извиква интерфейсен метод на услуга, импортирана от друг пакет. Методът на интерфейса е дефиниран на интерфейса и имплементиран от класа за изпълнение. Не мога да разбера как проксито на услугата смята, че е Impl (TicketServiceImpl) вместо интерфейса (TicketService). Благодарен съм за всякакви предложения или съвети как да заобиколя това.
Изключение:
Caused by: java.lang.ClassCastException:
org.abc.TicketServiceImpl cannot be cast to
org.abc.TicketService at
Proxy3ac85313_c60c_42db_8def_ea7bd3d7411c.add(Unknown Source)
...
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)[:1.6.0_37]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)[:1.6.0_37]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)[:1.6.0_37]
at java.lang.reflect.Method.invoke(Method.java:597)[:1.6.0_37]
at org.apache.aries.blueprint.utils.ReflectionUtils.invoke(ReflectionUtils.java:297)[7:org.apache.aries.blueprint.core:1.0.1]
at org.apache.aries.blueprint.container.BeanRecipe.invoke(BeanRecipe.java:958)[7:org.apache.aries.blueprint.core:1.0.1]
...
Странно, непосредствено преди изключението отпечатвам прокси .getInterfaces(), което предполага, че проксито е TicketService, а не TicketServiceImpl.
MyTicketServer proxy interfaces: org.abc.TicketService,
org.apache.aries.proxy.weaving.WovenProxy
MyTicketServer Proxy class name: Proxy3ac85313_c60c_42db_8def_ea7bd3d7411c
Също така се опитах да наложа Class тест на проксито:
if (myTicketService instanceof TicketService) { <-- you'd think this would help
myTicketService.add(ticket); //<-- Throws proxy ClassCastException!!
} // implies problem is in the return path through proxy back to method