0
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 is a class which extendes javax.naming.InitialContext class. and this is error while creating object of InitialContext.

I am getting the following stack trace:

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)

It goes one for many lines with the same content, I just trimmed it to fit in here. Thanks!

5
  • 1
    What error do you get? Commented Aug 31, 2018 at 12:05
  • 1
    can you show more of the stacktrace? Commented Aug 31, 2018 at 12:05
  • The above error. please find out. Commented Aug 31, 2018 at 12:26
  • do you have a recursive call somewhere in your code? Commented Aug 31, 2018 at 12:28
  • no, when i call setupInitialContext() method the above error occurs, Commented Aug 31, 2018 at 12:32

2 Answers 2

1

Looks like your MockLocalContext initiates an InitialContext, which tries to get the default initial context which is a MockLocalContext, which initiates MockLocalContext, which initiates an InitialContext, and so on, and so on.

Sign up to request clarification or add additional context in comments.

3 Comments

yes, but same code runs on a different machine and there give no error.
There might be a different default initial context on that other machine.
How its possible.. can you explain to me what I should be doing.
0
class MyContext extends InitialContext {

private Hashtable store;

public MyContext(Hashtable store) throws NamingException {
    super(true);
    this.store = store;
}

@Override
public void bind(String name, Object obj) {
    store.put(name, obj);
}

@Override
public Object lookup(String name) {
    return store.get(name);
}    

}

public class FooMain {

private static final int    ANSWER    = 42;
private static final String JNDI_NAME = "/config/theAnswerToEverything";

public static void main (String args[]) throws NamingException {
    Context context = new InitialContext();
    putInContext(                    JNDI_NAME, ANSWER);

    int answer = retrieveFromContext(JNDI_NAME);
    Assert.assertEquals(ANSWER, answer);
    System.out.printf("%d\n", answer);
}


private static void putInContext(final String key, final Object value) throws NamingException {
    Context context = new InitialContext();
    context.bind(key, value);
}

private static int retrieveFromContext(final String key) throws NamingException {
    Context context = new InitialContext();
    return (int) context.lookup(key);
}}


public class MyContextFactory implements InitialContextFactory {

private static Hashtable store = new Hashtable();

/*
  Do not confuse [store] with [environment]. They serve different
  purposes.
 */

@Override
public Context getInitialContext(Hashtable environment) throws NamingException {
    return new MyContext(store);
}}

this code is used to remove error while creating an InitialContext the code goes recursively...

the constructor should be true while Extends InitialContext.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.