首页 > 解决方案 > 无法在 java 程序中创建初始上下文

问题描述

public static void setupInitialContext() {
    try {
        System.out.println("Loading Initial Context");
        NamingManager.setInitialContextFactoryBuilder(new InitialContextFactoryBuilder() {

            @Override
            public InitialContextFactory createInitialContextFactory(Hashtable<?, ?> environment)
                    throws NamingException {
                return new InitialContextFactory() {
                    @Override
                    public Context getInitialContext(Hashtable<?, ?> environment) throws NamingException {
                        InitialContext context = null;

                        try {
                            context = new MockLocalContext();
                        } catch (Exception ex) {
                            ex.printStackTrace();
                        }

                        return context;
                    }

                };
            }

        });
        System.out.println("Loaded Initial Context");
    } catch (NamingException ne) {
        ne.printStackTrace();
    }
}

    public static void main(String[] args) throws NamingException {
    setupInitialContext();
    InitialContext context = new InitialContext();
    context.lookup(DS_ORACLE);
}


MockLocalContext 是一个扩展 javax.naming.InitialContext 类的类。这是创建 InitialContext 对象时的错误。

我得到以下堆栈跟踪:

Exception in thread "main" java.lang.StackOverflowError
at com.sun.naming.internal.VersionHelper12$2.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.naming.internal.VersionHelper12.getJndiProperties(Unknown Source)
at com.sun.naming.internal.ResourceManager.getInitialEnvironment(Unknown Source)
at javax.naming.InitialContext.init(Unknown Source)
at javax.naming.InitialContext.<init>(Unknown Source)
at net.citigroup.mexico.pg.pgs.mock.MockLocalContext.<init>(MockLocalContext.java:97)
at net.citigroup.mexico.pg.pgs.mock.MockLocalContext.<init>(MockLocalContext.java:95)
at net.citigroup.mexico.pg.pgs.mock.MockLocalContext$3$1.getInitialContext(MockLocalContext.java:400)
at javax.naming.spi.NamingManager.getInitialContext(Unknown Source)
at javax.naming.InitialContext.getDefaultInitCtx(Unknown Source)
at javax.naming.InitialContext.init(Unknown Source)
at javax.naming.InitialContext.<init>(Unknown Source)
at net.citigroup.mexico.pg.pgs.mock.MockLocalContext.<init>(MockLocalContext.java:97)
at net.citigroup.mexico.pg.pgs.mock.MockLocalContext.<init>(MockLocalContext.java:95)
at net.citigroup.mexico.pg.pgs.mock.MockLocalContext$3$1.getInitialContext(MockLocalContext.java:400)
at javax.naming.spi.NamingManager.getInitialContext(Unknown Source)
at javax.naming.InitialContext.getDefaultInitCtx(Unknown Source)
at javax.naming.InitialContext.init(Unknown Source)
at javax.naming.InitialContext.<init>(Unknown Source)
at net.citigroup.mexico.pg.pgs.mock.MockLocalContext.<init>(MockLocalContext.java:97)
at net.citigroup.mexico.pg.pgs.mock.MockLocalContext.<init>(MockLocalContext.java:95)
at net.citigroup.mexico.pg.pgs.mock.MockLocalContext$3$1.getInitialContext(MockLocalContext.java:400)
at javax.naming.spi.NamingManager.getInitialContext(Unknown Source)
at javax.naming.InitialContext.getDefaultInitCtx(Unknown Source)
at javax.naming.InitialContext.init(Unknown Source)
at javax.naming.InitialContext.<init>(Unknown Source)

它与具有相同内容的多行内容一致,我只是对其进行了修剪以适合此处。谢谢!

标签: javajava-deployment-toolkitnoinitialcontextexception

解决方案


看起来您的 MockLocalContext 启动了一个 InitialContext,它试图获取默认的初始上下文,即 MockLocalContext,它启动 MockLocalContext,它启动一个 InitialContext,依此类推。


推荐阅读