当前位置: 首页 > 面试题库 >

为什么初始化Spring时会收到NullPointerException

宗政德宇
2023-03-14
问题内容

我在服务器上运行批处理作业时遇到问题,而在开发工作站上的Eclipse上运行良好。

我已经使用Roo设置了Spring环境,创建了一个实体,并进行了一些工作,并在我的develompent盒上对其进行了良好的测试。我初始化上下文并完成工作,但是当我在服务器上运行批处理时,上下文未正确初始化。这是代码:

public class TestBatch {

    private static ApplicationContext context;


    @SuppressWarnings("unchecked")
    public static void main(final String[] args) {

            context = new ClassPathXmlApplicationContext("/META-INF/spring/applicationContext.xml");
            try {
                @SuppressWarnings("unused")
                TestBatch app = new TestBatch();
            } catch (Exception ex) {
                ex.printStackTrace();
            }
    }

    public void TestBatch() { /** Do Something using the context **/ }

}

这是日志和异常

2010-02-16 11:54:16,072 [main] INFO  org.springframework.context.support.ClassPathXmlApplicationContext - Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@6037fb1e: startup date [Tue Feb 16 11:54:16 CET 2010]; root of context hierarchy
Exception in thread "main" java.lang.ExceptionInInitializerError
    at org.springframework.context.support.AbstractRefreshableApplicationContext.createBeanFactory(AbstractRefreshableApplicationContext.java:194)
    at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:127)
    at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:458)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:388)
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)
    at tld.mydomain.myproject.batch.TestBatch.main(TestBatch.java:51)
Caused by: java.lang.NullPointerException
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.<clinit>(DefaultListableBeanFactory.java:103)
    ... 7 more

关于发生了什么任何想法或提示吗?我的类路径设置为$ PROJECTHOME / target / classes,我所有的依赖项都在$
PROJECTHOME / target / lib中,我使用“ export CLASSPATH = $ PROJECTHOME / target /
classes; java -Djava.endorsed.dirs = $ PROJECTHOME执行/ target / lib
tld.mydomain.myproject.batch.TestBatch“

我的设置中是否有任何看起来很错误的内容?当我从Eclipse运行此程序时,没有问题,但是当我将其部署到要运行它的服务器上并如上所述运行它时,我遇到了这个问题。因为它是从Eclipse运行的,所以我认为我的配置文件还可以,但是如何调试造成这种情况的原因呢?也许我毕竟有一些配置错误,或者服务器和开发工作站之间不匹配?还是这是说找不到文件的一种真正怪异的方式,如果找到,我如何确保它找到正确的文件?

我非常期待听到您关于如何解决此问题的建议。

干杯

尼克


问题答案:

问题的原因是-Djava.endorsed.dirs=$PROJECTHOME/target/lib
org.springframework.beans.factory.support.DefaultListableBeanFactory包含以下代码

static {
    ClassLoader cl = DefaultListableBeanFactory.class.getClassLoader();
    try {
        javaxInjectProviderClass = cl.loadClass("javax.inject.Provider"); //Line 103
    }
    catch (ClassNotFoundException ex) {
        // JSR-330 API not available - Provider interface simply not supported then.
    }
}

这会导致产生NullPointerException,因为当通过加载类时会getClassLoader()返回。从javadoc:null``-Djava.endorsed.dirs

一些实现可能使用null来表示引导类加载器。

因此,请使用-classpath(明确标明所有jar),而不是-Djava.endorsed.dirs



 类似资料:
  • 问题内容: 我有这个代码: 这会导致编译错误:可能尚未初始化,这很公平。 现在,我将代码更改为: 我得到同样的编译错误!我必须初始化为null: 那么,不初始化对象和初始化为null有什么区别?如果我声明一个没有初始化的对象,它是否为null? 谢谢 问题答案: 字段(成员变量)被初始化为(或初始化为默认的原始值,如果它们是原始的) 局部变量未初始化,您有责任设置初始值。

  • 问题内容: 为什么在代码的指定位置出现ConcurrentModificationException?我无法弄清楚自己在做什么错… 正在使用该方法在列表中找到分钟,将其删除并返回其值 问题答案: 一旦修改了从其获得的Collection,则不应认为Iterator可用。(对于java.util.concurrent。*集合类,放宽了此限制。) 您首先要获得一个Iterator ,然后进行修改。修改

  • 我试图在循环中初始化数组C,但它给出了错误: C是类ipdata的数组,我已经声明了它,并试图在循环中初始化它。 有什么问题吗?它表示:无法访问cluster_anlysis类型的封闭实例。必须使用cluster_anlysis类型的封闭实例限定分配(例如,x.new A(),其中x是cluster_anlysis的实例)。

  • 在本教程之后,我将尝试实现Spring会话Spring HttpSession教程 但是当我启动应用程序时,我遇到了一个初始化错误。 异常在线程"main"org.springframework.beans.factory.不满意依赖异常:错误创建bean与名称'springSessionRepositoryFilter'定义在类org.springframework.session.data.r

  • 问题内容: 我在代码的第34行上不断收到LineUnavailableException:https://www.refheap.com/21223 错误显示为。 我正在创建Sound类的多个实例(在我的refheap粘贴中实现)。似乎最初的实例没有问题。但是,当我开始使用相同的音频文件制作Sound对象的新实例时,便开始出现此错误。 知道如何解决吗? EIDT:我认为这个问题的 想法可能是我需要