加載一個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