1
好的,如此。我已經通過Spring的MBeanExporter和註解部署了一個展示MBean的戰爭。我還部署了一個使用一些代碼與mbean交談的戰爭應用程序。我有一個問題,從客戶端代碼調用mbean的函數。mbeanServer.invoke中的參數類型不匹配
嘗試調用操作getPermissions時,發生在RequiredModelMBean中的RuntimeException。
mbean方法的簽名是Collection getPermissions(GrantedAuthority role)。
和我使用調用它的代碼是
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。
RuntimeException不會告訴你很多,典型的不是它! )。你能設置一個調試點嗎? – 2010-11-05 16:14:39
是的,如果我將兩邊的參數更改爲字符串,它會成功調用該方法並返回正常,我認爲它與特定的彈簧安全類有關,所以我已經玩過了,但沒有運氣至今。 – gtrak 2010-11-05 16:20:53
在黑暗中拍攝(因爲我不確定Spring如何處理這個問題,也沒有在你的代碼中顯示它),但是將'role'定義爲'GrantedAuthority'或'GrantedAuthorityImpl'? Spring可能沒有足夠深入地檢查它們是否可以互換。 – Benn 2010-11-05 16:36:05