我正在使用birt开发java web应用程序,当我从eclipse运行应用程序时它按预期工作,但是当我从netbeans运行它或者当我在tomcat上手动部署它时,它会出错
Caused by: java.lang.IllegalArgumentException: securityDomain should be null if setSecurityController() was never called
at org.mozilla.javascript.Context.compileImpl(Context.java:2340)
at org.mozilla.javascript.Context.compileString(Context.java:1359)
at org.mozilla.javascript.Context.compileString(Context.java:1348)
at org.eclipse.birt.report.engine.javascript.JavascriptEngine$3.run(JavascriptEngine.java:240)
at org.eclipse.birt.report.engine.javascript.JavascriptEngine$3.run(JavascriptEngine.java:1)
请问如何解决?
答案 0 :(得分:2)
我几天前将此报告为关键bug 429944,您应该在bugzilla中投票支持它。
据我所知,有两种可能的解决方法:
选项1:如果可能,请禁用Tomcat服务器的安全管理。默认情况下它被禁用,但在您的上下文中它似乎不是。检查参数" -security"用于启动Tomcat,并尝试将其删除。
选项2:根据错误说明中的建议,有两种方法应该在birt的源代码中进行更改以便快速修复。
答案 1 :(得分:1)
在调用报告之前,请尝试将System.setSecurityManager(null);
放入代码中。每个JVM实例只需要执行一次。
答案 2 :(得分:1)
您不应该停用安全管理器! 这里提示绕过错误:
Context context = Context.enter( );
context.setSecurityController( ScriptUtil.createSecurityController( ) );
这两行应解决问题。我发现在org.eclipse.birt.report.engine.javascript.JavascriptEngineFactory
类文件中,所以基本上你更希望直接调用类JavascriptEngineFactory
来以一种好的方式初始化所有内容。
答案 3 :(得分:0)
我使用birt运行时4.2.2而不是使用4.3.1版本, 即使没有禁用安全管理器,现在一切都工作正常。 谢谢你们所有人的帮助