Pregunta

Tengo una aplicación que está intentando llamar a un método en un EJB que se ejecuta en JBoss 4.2.3 GA.

La aplicación es una aplicación de legado; funciona cuando se accede al servidor original que corrió en JBoss 4.0.1. Su código RMI está en jbossall-client.jar de JBoss 4.0.1. Se está tratando de llamar a un método que le dará el nuevo código para permitir que se pueda actualizarse. Así que tengo para que funcione como es; los únicos cambios que puedo hacer que están en el lado del servidor. En el peor, podría tener que configurar un servidor JBoss 4.0.1 que puede procesar estas solicitudes desde versiones anteriores.

En el ínterin, sin embargo, me gustaría entender por qué está fallando y si hay algo que pueda hacer para solucionarlo.

En este momento se produce un error en la nueva InitialContext ().

Este es el seguimiento de la pila:

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
¿Fue útil?

Solución

La excepción fue el uso de una característica que es indocumentado fuera del código fuente (al menos por lo que yo he podido encontrar). Aquí es donde se especifica un InvokerURL como una propiedad del sistema que se resuelve en el lado del cliente (la función es útil si el servidor JBoss está dentro de un NAT).

Cuando el cliente no tiene la propiedad definida en sus propiedades del sistema, se lanza la NPE en lugar de informar el problema con el InvokerURL que recibió.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top