Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用模板引擎时Groovy类加载器异常_Java_Groovy_Template Engine_Gstring - Fatal编程技术网

Java 使用模板引擎时Groovy类加载器异常

Java 使用模板引擎时Groovy类加载器异常,java,groovy,template-engine,gstring,Java,Groovy,Template Engine,Gstring,我是Groovy新手,尝试使用GStringTemplateEngine在JBoss5.1上执行一些Groovy脚本 在我的本地开发环境中,一切都可以正常工作,但当移动到由其他团队管理的开发服务器时,一切都会失败 我发现异常是专门在 try { groovyClass = loader.parseClass(new GroovyCodeSource(templateExpressions.toString(), "GStringTemplateScript" + counter.incr

我是Groovy新手,尝试使用GStringTemplateEngine在JBoss5.1上执行一些Groovy脚本

在我的本地开发环境中,一切都可以正常工作,但当移动到由其他团队管理的开发服务器时,一切都会失败

我发现异常是专门在

try {
    groovyClass = loader.parseClass(new GroovyCodeSource(templateExpressions.toString(), "GStringTemplateScript" + counter.incrementAndGet() + ".groovy", "x"));
} catch (Exception e) {
    throw new GroovyRuntimeException("Failed to parse template script (your template may contain an error or be trying to use expressions not currently supported): " + e.getMessage());
}
在GStringTemplateEngine.class的第190行

异常消息是

groovy.lang.GroovyRuntimeException: startup failed:
General error during class generation: URI is not hierarchical

java.lang.IllegalArgumentException: URI is not hierarchical
    at java.io.File.<init>(File.java:363)
    at org.jboss.net.protocol.file.FileURLConnection.<init>(FileURLConnection.java:62)
    at org.jboss.net.protocol.file.Handler.openConnection(Handler.java:40)
    at java.net.URL.openConnection(URL.java:945)
    at java.net.URLClassLoader.getPermissions(URLClassLoader.java:474)
    at groovy.lang.GroovyClassLoader.getPermissions(GroovyClassLoader.java:335)
    at java.security.SecureClassLoader.getProtectionDomain(SecureClassLoader.java:235)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
    at groovy.lang.GroovyClassLoader.access$300(GroovyClassLoader.java:55)
    at groovy.lang.GroovyClassLoader$ClassCollector.createClass(GroovyClassLoader.java:475)
    at groovy.lang.GroovyClassLoader$ClassCollector.onClassNode(GroovyClassLoader.java:492)
    at groovy.lang.GroovyClassLoader$ClassCollector.call(GroovyClassLoader.java:496)
    at org.codehaus.groovy.control.CompilationUnit$14.call(CompilationUnit.java:792)
    at org.codehaus.groovy.control.CompilationUnit.applyToPrimaryClassNodes(CompilationUnit.java:1024)
    at org.codehaus.groovy.control.CompilationUnit.doPhaseOperation(CompilationUnit.java:562)
    at org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:540)
    at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:517)
    at groovy.lang.GroovyClassLoader.doParseClass(GroovyClassLoader.java:283)
    at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:260)
    at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:244)
我不确定它为什么抛出URI而不是层次错误。我假设它与权限有关,GroovyClassLoader无法解析生成的类


以前有人见过这个错误吗?如果有人能就调试/修复问题提供一些建议,这将非常有用。

不确定问题的真正原因,但找到了解决办法

创建并替换了GStringTemplateEngine的副本

try {
    groovyClass = loader.parseClass(new GroovyCodeSource(templateExpressions.toString(), "GStringTemplateScript" + counter.incrementAndGet() + ".groovy", "x"));
} catch (Exception e) {
    throw new GroovyRuntimeException("Failed to parse template script (your template may contain an error or be trying to use expressions not currently supported): " + e.getMessage());
}

删除了GroovyCodeSource并将模板字符串传递给parseClass方法

try {
    groovyClass = loader.parseClass(templateExpressions.toString(), "GStringTemplateScript" + counter.incrementAndGet() + ".groovy");
} catch (Exception e) {
    throw new GroovyRuntimeException("Failed to parse template script (your template may contain an error or be trying to use expressions not currently supported): " + e.getMessage());
}