Domanda

Ho un'applicazione che sta cercando di chiamare un metodo su un EJB in esecuzione su JBoss 4.2.3 GA.

L'applicazione è un'applicazione legacy; funziona quando si accede al server originale che si è svolta su JBoss 4.0.1. Il suo codice RMI è in jbossall-client.jar da JBoss 4.0.1. Si sta tentando di chiamare un metodo che dare nuovo codice per permettergli di aggiornarsi. Così ho avuto modo di farlo funzionare come è; gli unici cambiamenti che posso fare sono sul lato server. Nel peggiore dei casi, avrei potuto impostare un server JBoss 4.0.1 in grado di elaborare queste richieste da versioni precedenti.

Nel frattempo, però, mi piacerebbe capire perché sta venendo a mancare e se c'è qualcosa che posso fare per risolvere il problema.

In questo momento non riesce a new InitialContext ().

Questa è l'analisi dello stack:

javax.naming.NamingException: Failed to retrieve Naming interface [Root exception is java.lang.NullPointerException]
        at org.jboss.naming.HttpNamingContextFactory.getInitialContext(HttpNamingContextFactory.java:69)
        at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:667)
        at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:247)
        at javax.naming.InitialContext.init(InitialContext.java:223)
        at javax.naming.InitialContext.<init>(InitialContext.java:197)
        at Main.main
Caused by: java.lang.NullPointerException
        at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1820)
        at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1719)
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1305)
        at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1908)
        at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1832)
        at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1719)
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1305)
        at java.io.ObjectInputStream.readObject(ObjectInputStream.java:348)
        at org.jboss.proxy.ClientContainer.readExternal(ClientContainer.java:148)
        at java.io.ObjectInputStream.readExternalData(ObjectInputStream.java:1755)
        at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1717)
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1305)
        at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1908)
        at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1832)
        at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1719)
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1305)
        at java.io.ObjectInputStream.readObject(ObjectInputStream.java:348)
        at org.jboss.invocation.MarshalledValue.get(MarshalledValue.java:78)
        at org.jboss.naming.HttpNamingContextFactory.getNamingServer(HttpNamingContextFactory.java:123)
        at org.jboss.naming.HttpNamingContextFactory.getInitialContext(HttpNamingContextFactory.java:65)
        ... 17 more
È stato utile?

Soluzione

L'eccezione è venuto da utilizzando una caratteristica che non è documentato al di fuori del codice sorgente (almeno per quanto ho potuto trovare). Questo è dove un InvokerURL viene specificato come una proprietà di sistema che si risolve sul lato client (la funzione è utile se il server JBoss è all'interno di un NAT).

Quando il cliente non ha la proprietà definita nelle sue proprietà di sistema, esso getta la NPE invece di riportare il problema con l'InvokerURL che ha ricevuto.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top