0 Replies Latest reply on May 15, 2007 4:05 AM by keruke

    Error when throw a ApplicationException

    keruke Newbie

      Hi, please give me help with this problem, i dont know what is the solution

      I have this simple session bean deploy in a jboss 4.0.5 GA application server

      My interface:

      package server.ejb.usuarios;
      
      import javax.ejb.Remote;
      
      @Remote
      public interface Prueba {
       public void getError() throws Exception;
      }
      


      My Session bean implementation:
      package server.ejb.usuarios;
      
      import javax.ejb.Stateless;
      import server.ejb.usuarios.Prueba;
      
      public @Stateless class PruebaBean implements Prueba {
      
       public void getError() throws Exception {
       throw new Exception("Mensaje de error");
       }
      
      }
      


      Simple, i can deploy this bean on my application server, now i have this client code:
      package clientold;
      
      import java.util.Properties;
      
      import javax.naming.Context;
      import javax.naming.InitialContext;
      import javax.naming.NamingException;
      
      import server.ejb.usuarios.Prueba;
      
      public class MainPruebaError {
      
       /**
       * @param args
       */
       public static void main(String[] args) {
       Context ctx;
       try {
       ctx = getInitialContext();
       Prueba pruebaSession = (Prueba) ctx.lookup("PruebaBean/remote");
       pruebaSession.getError();
       } catch (NamingException e) {
       // TODO Auto-generated catch block
       e.printStackTrace();
       } catch(Exception e){
       System.out.println("Get error from server: " + e.getMessage());
       e.printStackTrace();
       }
       }
      
       private static Context getInitialContext() throws NamingException {
       Properties prop = new Properties();
       prop.setProperty("java.naming.factory.initial",
       "org.jnp.interfaces.NamingContextFactory");
       prop.setProperty("java.naming.provider.url", "127.0.0.1:1099");
       prop.setProperty("java.naming.factory.url.pkgs", "org.jboss.naming");
      
       return (new InitialContext(prop));
       }
      }
      


      and my client catch the exception but i can´t get the correct exception message. I need pass custom message from my server to my clients and wrap it in a exception, but when i run this example got the next output:
      Get error from server: [Ljava.lang.StackTraceElement;
      java.lang.ClassNotFoundException: [Ljava.lang.StackTraceElement;
       at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
       at java.security.AccessController.doPrivileged(Native Method)
       at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
       at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
       at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:276)
       at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
       at org.jboss.remoting.loading.RemotingClassLoader.loadClass(RemotingClassLoader.java:50)
       at org.jboss.remoting.loading.ObjectInputStreamWithClassLoader.resolveClass(ObjectInputStreamWithClassLoader.java:139)
       at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1575)
       at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1496)
       at java.io.ObjectInputStream.readArray(ObjectInputStream.java:1624)
       at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1323)
       at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1945)
       at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1869)
       at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753)
       at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
       at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1945)
       at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1869)
       at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753)
       at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
       at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351)
       at org.jboss.remoting.serialization.impl.java.JavaSerializationManager.receiveObject(JavaSerializationManager.java:128)
       at org.jboss.remoting.marshal.serializable.SerializableUnMarshaller.read(SerializableUnMarshaller.java:66)
       at org.jboss.remoting.transport.socket.SocketClientInvoker.transport(SocketClientInvoker.java:279)
       at org.jboss.remoting.RemoteClientInvoker.invoke(RemoteClientInvoker.java:143)
       at org.jboss.remoting.Client.invoke(Client.java:525)
       at org.jboss.remoting.Client.invoke(Client.java:488)
       at org.jboss.aspects.remoting.InvokeRemoteInterceptor.invoke(InvokeRemoteInterceptor.java:41)
       at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:88)
       at org.jboss.aspects.tx.ClientTxPropagationInterceptor.invoke(ClientTxPropagationInterceptor.java:46)
       at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:88)
       at org.jboss.aspects.security.SecurityClientInterceptor.invoke(SecurityClientInterceptor.java:40)
       at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:88)
       at org.jboss.ejb3.remoting.IsLocalInterceptor.invoke(IsLocalInterceptor.java:77)
       at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:88)
       at org.jboss.ejb3.stateless.StatelessRemoteProxy.invoke(StatelessRemoteProxy.java:102)
       at $Proxy0.getError(Unknown Source)
       at clientold.MainPruebaError.main(MainPruebaError.java:21)
      


      What is the problem??, i must see on the output
      Get error from server: Mensaje de error
      


      but i have :
      Get error from server: [Ljava.lang.StackTraceElement;
      


      why???, is only a simple application exception and don,t work, somebody can help me??

      i have tried to use an interceptor class for get the exceptions and work, but without interceptor, dont work

      thanks