2014-10-22 4 views
0

Я новичок в Groovy и пытался использовать GStringTemplateEngine выполнить некоторую заводную сценарии на JBoss 5.1Groovy исключения при использовании загрузчика классов шаблонизатора

Все отлично работает в моей локальной среде разработки, но терпит неудачу, когда переехал в разработчик сервер управляется другой командой.

Я обнаружил, что исключение конкретно на

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 не может разобрать сгенерированный класс.

Кто-нибудь видел эту ошибку раньше? Было бы полезно, если кто-то может предложить некоторые предложения по отладке/исправлению проблемы.

ответ

0

Не уверен в реальной причине проблемы, но нашел обходной путь.

создал копию 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()); 
} 

с

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()); 
} 

Удалены GroovyCodeSource и передается шаблон строки вместо метода parseClass.

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