2010-11-05 4 views
1

Итак, так. У меня есть война, развернутая с MBean, представленная через весенний MBeanExporter и аннотации. У меня развернулось еще одно военное приложение, в котором используется некоторый код для общения с mbean. У меня возникла проблема с вызовом функции на mbean из этого клиентского кода.аргумент типа несоответствие в mbeanServer.invoke

RuntimeException произошло в RequiredModelMBean при попытке вызвать операции getPermissions.

Подпись метода mbean представляет собой сборник getPermissions (роль GrantedAuthority).

и код, я использую, чтобы назвать это

Object[] params = {role}; //role is passed in as a GrantedAuthorityImpl (implements GrantedAuthority) 
String[] signature = {"org.springframework.security.core.authority.GrantedAuthority"}; 

mbeanServer.invoke(new ObjectName(mbeanName), "getPermissions", params, signature); 

Что может быть проблемой, или то, что я должен смотреть?

javax.management.RuntimeOperationsException: RuntimeException occurred in RequiredModelMBean while trying to invoke operation getPermissions 
javax.management.modelmbean.RequiredModelMBean.invokeMethod(RequiredModelMBean.java:1080) 
javax.management.modelmbean.RequiredModelMBean.invoke(RequiredModelMBean.java:955) 
org.springframework.jmx.export.SpringModelMBean.invoke(SpringModelMBean.java:90) 
org.jboss.mx.server.RawDynamicInvoker.invoke(RawDynamicInvoker.java:164) 
org.jboss.mx.modelmbean.RequiredModelMBeanInvoker.invoke(RequiredModelMBeanInvoker.java:127) 
org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:668) 
xxx.MBeanPermissionMapLookup.getPermissions(MBeanPermissionMapLookup.java:31) 
xxx.MBeanPermissionMapLookup$$FastClassByCGLIB$$667f3fad.invoke(<generated>) ... 


root cause: java.lang.IllegalArgumentException: argument type mismatch 
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    java.lang.reflect.Method.invoke(Method.java:597) 
    sun.reflect.misc.Trampoline.invoke(MethodUtil.java:37) 
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    java.lang.reflect.Method.invoke(Method.java:597) 
    sun.reflect.misc.MethodUtil.invoke(MethodUtil.java:244) 
    javax.management.modelmbean.RequiredModelMBean.invokeMethod(RequiredModelMBean.java:1074) 
    javax.management.modelmbean.RequiredModelMBean.invoke(RequiredModelMBean.java:955) 
    org.springframework.jmx.export.SpringModelMBean.invoke(SpringModelMBean.java:90) 
    org.jboss.mx.server.RawDynamicInvoker.invoke(RawDynamicInvoker.java:164) 
    org.jboss.mx.modelmbean.RequiredModelMBeanInvoker.invoke(RequiredModelMBeanInvoker.java:127) 
    org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:668) 
    xxx.MBeanPermissionMapLookup.getPermissions(MBeanPermissionMapLookup.java:31) 

Использование Spring 3.0.4, Spring security 3.0.3, jboss 5.1.0, java jdk 1.6.0-17.

+0

RuntimeException не говорит вам много, типичный не тот! ;). Можете ли вы установить точку отладки? –

+0

да, и если я изменил аргументы с обеих сторон на строку, он успешно вызвал метод и вернулся просто отлично, я думал, что это что-то связано с определенным весенним классом безопасности, поэтому я играл с этим, но не повезло так далеко. – gtrak

+0

Выстрел в темноте (поскольку я не уверен, как Spring справляется с этим, и вы не показываете его в своем коде), но «роль» определяется как «GrantedAuthority» или «GrantedAuthorityImpl»? Весна, возможно, недостаточно проверяет, чтобы сказать, что они взаимозаменяемы. – Benn

ответ

0

Эти классы не могут пересекать границу загрузчика классов, это несоответствие типа аргумента, потому что загрузчик классов является внутренне частью типа внутри jboss.

Смежные вопросы