Ressourcen-Manager : kann nicht finden die Ressource 'emailTemplate.vm' in jedem resource-loader
Ich bin dabei eine Anwendung in den Federn mit maven. ich schrieb alle Eigenschaften in der app.Eigenschaften Datei
Datei-Struktur ist wie folgt
src/main/resource
|_
| templates
| |_mytempaltefile.vm
|_ app.properties
gab ich den Pfad(absloute) im app.Eigenschaft
app.Eigenschaften Datei
template.base.path=D\:/SVN/trunk/tfbdirect/src/main/resources/templates
utilities-spring.xml
<bean id="velocityEngine"
class="org.springframework.ui.velocity.VelocityEngineFactoryBean">
<property name="velocityProperties">
<props>
<prop key="resource.loader">file</prop>
<prop key="file.resource.loader.class">
org.apache.velocity.runtime.resource.loader.FileResourceLoader
</prop>
<prop key="file.resource.loader.path">${template.base.path}</prop>
<prop key="file.resource.loader.cache">false</prop>
</props>
</property>
</bean>
meiner Klasse
import java.util.HashMap;
import java.util.Map;
import org.apache.velocity.app.VelocityEngine;
import org.springframework.ui.velocity.VelocityEngineUtils;
import com.providerpay.tfbdirect.service.mail.MailSenderService;
public class LoginServiceImpl implements ILoginService{
/**
* Injected through Spring IOC
*/
ILoginDAO loginDAO;
ClaimRuleProcessServiceImpl claimRuleProcessServiceImpl;
PlatformTransactionManager txmanager;
//IForgotPasswordDAO forgotPasswordDAO;
private VelocityEngine velocityEngine;
private String appURL;
private MailSenderService mailSenderService;
TFBLogger log = TFBLoggerFactory.getLogger(RuleServer.class);
public String getAppURL() {
return appURL;
}
public void setAppURL(String appURL) {
this.appURL = appURL;
}
public MailSenderService getMailSenderService() {
return mailSenderService;
}
public VelocityEngine getVelocityEngine() {
return velocityEngine;
}
public void setVelocityEngine(VelocityEngine velocityEngine) {
this.velocityEngine = velocityEngine;
}
public void setMailSenderService(MailSenderService mailSenderService) {
this.mailSenderService = mailSenderService;
}
public ILoginDAO getLoginDAO() {
return loginDAO;
}
public void setLoginDAO(ILoginDAO loginDAO) {
this.loginDAO = loginDAO;
}
public ClaimRuleProcessServiceImpl getClaimRuleProcessServiceImpl() {
return claimRuleProcessServiceImpl;
}
public void setClaimRuleProcessServiceImpl(
ClaimRuleProcessServiceImpl claimRuleProcessServiceImpl) {
this.claimRuleProcessServiceImpl = claimRuleProcessServiceImpl;
}
public void setTxmanager(PlatformTransactionManager txmanager) {
this.txmanager = txmanager;
}
/**
* Validates Login
* @param loginView
* @return
*/
public boolean isValidLogin(LoginView loginView) {
/* create tx definition object */
DefaultTransactionDefinition paramTransactionDefinition = new DefaultTransactionDefinition();
TransactionStatus status = txmanager.getTransaction(paramTransactionDefinition );
boolean result = false;
try{
LoginEntity loginEntity = BeanMapper.INSTANCE.viewToEntityMapper(loginView);
Feedback feedback = claimRuleProcessServiceImpl.validateClaimEligibility(loginEntity);
log.info( "Rule executed was " +feedback.getAll());
for (FeedbackMessage feedbackmessaage :feedback.getAll())
{
log.info("\n--------------");
log.info(feedbackmessaage.getRuleCd());
log.info(feedbackmessaage.getMessage());
log.info(feedbackmessaage.getSeverity().getName());
log.info("\n--------------");
}
result = loginDAO.isValidLogin(loginEntity);
log.debug("result = {}", result);
txmanager.commit(status);
}catch(Exception e){
txmanager.rollback(status);
throw new TfbException("Error occured while validating login credentials");
}
return result;
}
@Autowired
VelocityEngine velocityengine;
public boolean mailResetLink(LoginView loginView) {
String toEmailAddress;
LoginEntity loginEntity = BeanMapper.INSTANCE.viewToEntityMapper(loginView);
/* getting user Email from DAO*/
toEmailAddress = loginDAO.getEmailByUsername(loginEntity);
if(toEmailAddress != null && toEmailAddress.trim().length() > 0)
{
Map<String, Object> model = new HashMap<String, Object>();
model.put("user", loginEntity);
model.put("appURL", appURL);
String body = VelocityEngineUtils.mergeTemplateIntoString(velocityEngine, "emailTemplate.vm","UTF-8", model);
mailSenderService.sendMail("from mail", toEmailAddress, "Password Reset Link",body);
}
else
{
return false;
}
return true;
}
public boolean resetPassword(LoginView loginView)
{
LoginEntity loginEntity = BeanMapper.INSTANCE.viewToEntityMapper(loginView);
return loginDAO.resetPassword(loginEntity);
}
}
jedes Ding einwandfrei, aber ich ändern müssen Sie den absoluten Pfad, relativen Pfad.. ich habe versucht, viele Möglichkeiten.
habe ich versucht, die wie folgt
template.base.path=/templates/
aber noch immer folgende Fehlermeldung .
ResourceManager : kann nicht finden die Ressource 'emailTemplate.vm' in jedem resource-loader.
kann einer mir helfen..
Vielen Dank im Voraus
Wie wollen Sie instanziieren die VelocityEngine Instanz?
InformationsquelleAutor user3691501 | 2014-07-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sind Sie fallen in eine häufiger Fehler bei der Verwendung von velocity-mit dem Frühling : legen Sie Ihre Vorlagen in eine Position und verwenden Sie einen resource-loader, sucht Sie in einem anderen Ort. So haben Sie 2 gemeinsame Nutzungen :
legen Sie Vorlagen in den classpath (wie Sie) und verwenden Sie
ClasspathResourceLoader
es ist einfach, mit wenig Abhängigkeiten, aber es zwingt Sie setzen Vorlagen im classpath ...
legen Sie Vorlagen unter
WEB-INF
(wie würden Sie für JSPs) und verwendenWebappResourceLoader
von velocity-toolses ist natürlicher für eine Vorlage Speicherort, aber fügen Sie eine Abhängigkeit auf Geschwindigkeit-tools.
Lassen und Frühjahr Abhängigkeiten verwalten, aber nicht instanciating über
new
...Wenn Sie entweder die option mit Spring Boot, würden Sie diese Konfigurationen in der Anwendung.Eigenschaften? Ich habe Probleme dabei, alle class-loader zu arbeiten, scheint nicht egal, welchen Ordner ich meine Vorlagen.
InformationsquelleAutor Serge Ballesta
Ich hatte das gleiche problem vor kurzem mit karaf OSGi-framework.
In einem CXF-Ressource-Klasse (Login in diesem Zusammenhang), müssen Sie zur Initialisierung der Velocity-Engine wie diese:
Dann in der web-Methode instanziieren Sie das template:
Leider, es hat nicht funktioniert, laden Sie die Vorlage sofort nach der
ve.init()
Aufruf in den Konstruktor.InformationsquelleAutor sahlix
Deine Konfiguration scheint korrekt zu sein. Wenn Sie instanziieren die VelocityEngine Instanz mit "new", versuchen Sie Folgendes:
Hi serge ich den code Hinzugefügt, was Sie gesagt oben in der Methode, aber ich bekomme die gleiche Fehlermeldung nur mit @Autowired VelocityEngine velocityEngine;
InformationsquelleAutor Shinichi Kai