首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从Jython加载Jython框架ApplicationContext

如何从Jython加载Jython框架ApplicationContext
EN

Stack Overflow用户
提问于 2010-05-12 19:10:50
回答 3查看 3.8K关注 0票数 2

我有一个类,它加载一个so框架应用程序上下文,如下所示:

代码语言:javascript
复制
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分别部署到单独的jars中(以及各自模块中的其他类和资源)。让我们假设jar文件是OfflineScriptSupport.jar和*MyContext.jar“,mycontext.spring.xml放在jar的根部。

在Jython脚本(*myscript.jy")中,我尝试调用初始化方法来创建应用程序上下文:

代码语言:javascript
复制
from com.offlinesupport import OfflineScriptSupport

OfflineScriptSupport.initialize();

我使用以下命令(来自Linux)执行Jython脚本:

代码语言:javascript
复制
jython -Dpython.path=spring.jar:OfflineScriptSupport.jar:MyContext.jar myscript.jy

Springframework应用程序上下文找不到mycontext.spring.xml文件。它显示以下错误:

代码语言:javascript
复制
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无法工作(即无法在类路径中找到资源文件)?

EN

回答 3

Stack Overflow用户

发布于 2010-05-13 19:37:48

您可能需要使用"/mycontext.spring.xml“类路径资源来指示完整路径。

票数 0
EN

Stack Overflow用户

发布于 2010-06-08 13:38:34

尝试使用FileSystemXmlApplicationContext("mycontext.spring.xml")代替。

“普通路径将始终被解释为相对于当前VM工作目录”。http://static.springsource.org/spring/docs/2.0.x/api/org/springframework/context/support/FileSystemXmlApplicationContext.html

票数 0
EN

Stack Overflow用户

发布于 2012-06-18 11:07:40

确保您的类路径设置正确。假设您的应用程序上下文文件位于webapp的webapp dir中,请执行以下操作:

代码语言:javascript
复制
cd webapps/<application>/WEB-INF
java -cp 'lib/*:classes:.' org.python.util.jython
>>> from org.springframework.context.support import ClassPathXmlApplicationContext
>>> ctx = ClassPathXmlApplicationContext(['mycontext.spring.xml'])

注意'.‘在类路径中,这显式地包括当前目录,以便可以加载任何资源。还请注意,我引用类路径,这样shell就不会展开它。

这应该会加载应用程序。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2821966

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档