У меня есть подписанный апплет, который выполняет некоторый код внутри PrivilegedAction.
public String somePublicMethod()
{
String str = (String) AccessController.doPrivileged(new PrivilegedAction()
{
public Object run()
{
return someMethodThatReturnsAString();
}
});
return str;
}
Здесь метод someMethodThatReturnsAString находится в суперклассе, а этот класс находится в стороннем банке, который также подписан. somePublicMethod выдает следующее исключение при вызове из Javascript
java.security.PrivilegedActionException: java.security.PrivilegedActionException: java.lang.reflect.InvocationTargetException
at java.security.AccessController.doPrivileged(Native Method)
at sun.plugin.liveconnect.SecureInvocation.CallMethod(SecureInvocation.java:128)
at sun.plugin.liveconnect.SecureInvocation.access$300(SecureInvocation.java:51)
at sun.plugin.liveconnect.SecureInvocation$CallMethodThread.run(SecureInvocation.java:177)
Caused by: java.security.PrivilegedActionException: java.lang.reflect.InvocationTargetException
at java.security.AccessController.doPrivileged(Native Method)
at sun.plugin.liveconnect.SecureInvocation$2.run(SecureInvocation.java:147)
... 4 more
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at sun.plugin.javascript.JSInvoke.invoke(JSInvoke.java:20)
at sun.reflect.GeneratedMethodAccessor13.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at sun.plugin.javascript.JSClassLoader.invoke(JSClassLoader.java:72)
at sun.plugin.liveconnect.PrivilegedCallMethodAction.run(SecureInvocation.java:651)
... 6 more
Caused by: java.lang.NullPointerException
at java.lang.String.replace(String.java:2207)
... 16 more
Это происходит только в Safari в Mac OS X с установленной Java 1.6. Работает должным образом, если на клиентском компьютере установлена Java 1.5.
Я видел подобные вопросы здесь в StackOverflow, в которых говорилось о AccessControlException, генерируемом из подписанных апплетов. Но это не так, поскольку выдается исключение PrivilegedAccessException, а апплет выполняет код как привилегированное действие, как это предлагается в ответах на эти вопросы.
Я даже пытался использовать PrivilegedExceptionAction, но это не помогло. Кто-нибудь сталкивался с этим раньше?