2009-10-18 36 views
2

當我嘗試使用Apache的速度無法初始化

VelocityEngine engine = new VelocityEngine(); 
engine.init(); 

我遇到了同樣的錯誤,當我嘗試

Velocity.init(); 

org.apache.velocity.exception.VelocityException初始化速度引擎:無法使用當前運行時配置初始化org.apache.velocity.runtime.log.ServletLogChute的實例。

什麼可能會導致此異常?

回答

10

嘗試這樣:

Properties p = new Properties(); 
p.setProperty("resource.loader", "class"); 
p.setProperty("class.resource.loader.description", "Velocity Classpath Resource Loader"); 
p.setProperty("class.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader"); 

    try { 
     Velocity.init(p); 
    } catch(...., and handle excpetion 
    } 

你現在就可以撥打電話:

VelocityContext vContext = new VelocityContext(context); 
//put things into vContext 
StringWriter sw = new StringWriter(); 
    try { 
     template.merge(vContext, sw); 

+5

加入 properties.setProperty \t \t( 「runtime.log.logsystem.class」 \t \t「org.apache.velocity。 runtime.log.NullLogSystem「); 訣竅 – 2009-10-18 23:38:05

+0

@Hamza:非常感謝!將此設置添加到velocity.properties解決了問題 – Vanya 2009-12-08 08:01:52

0

LogManager source建議將原始異常包裝在VelocityException中。那個包裝的異常應該會給你更多的信息。

請注意代碼中的相關注釋。

/* If the above failed, that means either the user specified a 
* logging class that we can't find, there weren't the necessary 
* dependencies in the classpath for it, or there were the same 
* problems for the default loggers, log4j and Java1.4+. 
* Since we really don't know and we want to be sure the user knows 
* that something went wrong with the logging, let's fall back to the 
* surefire SystemLogChute. No panicking or failing to log!! 
*/ 
4

問題解決了把下面的代碼我的應用:

java.util.Properties p = new java.util.Properties(); 
p.setProperty("runtime.log.logsystem.class", "org.apache.velocity.runtime.log.NullLogSystem"); 
try { 
    Velocity.init(p); 
} catch (Exception e) { 
    System.out.println("FAIL!"); 
} 
+0

這適用於我。爲什麼'org.apache.velocity.runtime.log.SystemLogChute'導致失敗? – BornToCode 2014-07-04 03:32:04

0

一個乾淨的方式:

java.util.Properties props = new java.util.Properties(); 
props.setProperty(Velocity.RUNTIME_LOG_LOGSYSTEM_CLASS, NullLogChute.class.getName());       
Velocity.init(props); 
0

使用

static { 
    /** Initialisation du moteur velocity */ 
    Velocity.setProperty(Velocity.RUNTIME_LOG_LOGSYSTEM_CLASS, 
      "org.apache.velocity.runtime.log.NullLogSystem"); 
    Velocity.setProperty(RuntimeConstants.RESOURCE_LOADER, 
      EjbConstants.VELOCITY_RESOURCE_LOADER_TYPE); 
    Velocity.setProperty(EjbConstants.VELOCITY_CLASSPATH_RESOURCE_LOADER, 
      ClasspathResourceLoader.class.getName()); 
} 

public static String createXMLFlux(final RemiseEffetBean bean, 
     final String maquetteId) { 

    try { 
     final VelocityContext context = new VelocityContext(); 
     final StringWriter swOut = new StringWriter(); 

     // Initialisation 
     Velocity.init(); 

     final Template template = Velocity.getTemplate(
       EjbConstants.XML_TEMPLATE_FILE, CharEncoding.UTF_8); 

     context.put(EjbConstants.VELOCITY_REMISE_EFFET, bean); 

     // id de la maquette pdf a generer 
     context.put(EjbConstants.VELOCITY_MAQUETTE_ID, maquetteId); 

     template.merge(context, swOut); 

     return swOut.toString(); 
    } catch (final ResourceNotFoundException e) { 
     LOGGER.error("La template n'a pas été trouvée", e); 
    } catch (final ParseErrorException e) { 
     LOGGER.error("Erreur du parsing de la template", e); 
    } catch (final MethodInvocationException e) { 
     LOGGER.error("Erreur lors de la substitution des données", e); 
    } catch (final Exception e) { 
     LOGGER.error("Erreur lors du traitement du fichier", e); 
    } 

    return null; 
}