加载一个springframework的ApplicationContext的我已经加载一个springframework的应用程序上下文,像这样一类:如何从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");
}
}
类OfflineScriptSupport,文件mycontext.spring.xml分别部署分成独立的罐子(以及各自模块中的其他类别和资源)。比方说,在jar文件OfflineScriptSupport.jar和* MyContext.jar “mycontext.spring.xml在罐子里的根放。
在Jython脚本(* myscript.jy”),我尝试调用初始化方法来创建应用程序上下文:
from com.offlinesupport import OfflineScriptSupport
OfflineScriptSupport.initialize();
我用下面的命令(Linux)的执行Jython脚本:
jython -Dpython.path=spring.jar:OfflineScriptSupport.jar:MyContext.jar myscript.jy
的springframework的应用续ext找不到mycontext.spring.xml文件。它显示了以下错误:
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)
如果我直接运行从Java的jar(使用OfflineScriptSupport的主入口点),它的工作原理,也没有抛出错误。
Jython处理类路径的方式有什么特别的地方让Springframework的ClassPathXmlApplicationContext不起作用(即无法在类路径中找到资源文件)?
感谢您的建议。我试了一下,但它仍然给出了错误。资源引用在java中直接运行时使用(使用'main'入口点)。我也尝试使用Groovy脚本,它的工作原理。我想我会随着时髦而去。 – staticman 2010-05-22 22:22:35