J'ai une classe qui charge un contexte d'application springframework comme ceci:Comment charger un ApplicationContext de springframework de Jython
package com.offlinesupport;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class OfflineScriptSupport {
private static ApplicationContext appCtx;
public static final void initialize() {
appCtx = new ClassPathXmlApplicationContext(new String[] {
"mycontext.spring.xml"
});
}
public static final ApplicationContext getApplicationContext() {
return appCtx;
}
public static final void main(String[] args) {
System.out.println("Starting...");
initialize();
System.out.println("loaded");
}
}
La classe OfflineScriptSupport, et le fichier mycontext.spring.xml sont chacun déployés dans des bocaux séparés (avec d'autres classes et ressources dans leurs modules respectifs). Disons que les fichiers jar sont OfflineScriptSupport.jar et * MyContext.jar "mycontext.spring.xml est mis à la racine du pot.
Dans un script Jython (* myscript.jy"), Je tente d'appeler la méthode initialize pour créer le contexte d'application:
from com.offlinesupport import OfflineScriptSupport
OfflineScriptSupport.initialize();
J'exécuter le script Jython avec la commande suivante (de Linux):
jython -Dpython.path=spring.jar:OfflineScriptSupport.jar:MyContext.jar myscript.jy
l'application Springframework suite ext ne trouve pas le fichier mycontext.spring.xml. Il affiche l'erreur suivante:
java.io.FileNotFoundException: class path resource [mycontext.spring.xml] cannot be opened because it does not exist
at org.springframework.core.io.ClassPathResource.getInputStream(ClassPathResource.java:137)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:167)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:148)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:126)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:142)
at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:113)
at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:81)
at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:89)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:269)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:87)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:72)
at com.offlinesupport.OfflineScriptSupport.initialize(OfflineScriptSupport.java:27)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
Si je lance le pot directement à partir de Java (en utilisant le principal point d'entrée dans OfflineScriptSupport) il fonctionne et il n'y a pas d'erreur jeté.
Y at-il quelque chose de spécial sur la façon dont Jython poignées classpaths faisant ClassPathXmlApplicationContext fonctionnent pas du Springframework (à savoir ne pas être en mesure de trouver des fichiers de ressources dans le classpath)?
Merci pour la suggestion. Je l'ai essayé mais ça donne quand même l'erreur. La référence de ressource fonctionne telle quelle lorsqu'elle est exécutée directement dans Java (en utilisant le point d'entrée 'principal'). J'ai aussi essayé d'utiliser un script groovy et ça marche. Je pense que je vais aller avec groovy. – staticman