[Prévia] [Próxima] [Prévia por assunto] [Próxima por assunto]
[Índice cronológico] [Índice de assunto]

Re: Mais duvidas no ep1




O que parece que esta acontecendo é que você não está implementando
readExternal e writeExternal corretamente.

No meu ep, eu declarei o meu ICEInvokerProxy como Serializable de forma que
não precisei lidar com esses métodos (os campos que não queria que fosse
passados eu declarei como transient). De qualquer forma, o lance é o
seguinte, se este método (como vc implementou) está na classe
ICEInvokerProxy então vc deveria fazer algo do tipo:


public void writeExternal(final ObjectOutput out)
      throws IOException
      {
      out.writeObject (this.getAtributo1());
      out.writeObject (this.getAtributo2());
      ...

}

 public void readExternal(final ObjectInput in)
       throws IOException, ClassNotFoundException
          {
      this.setAtributo1(in.readObject());
      this.setAtributo2(in.readObject());
      ...
}

De uma olhada em:
http://java.sun.com/j2se/1.4.1/docs/api/java/io/ObjectInputStream.html
e
http://java.sun.com/j2se/1.4.1/docs/api/java/io/ObjectOutputStream.html

Lá existem exemplos de como fazer classes Serializable ou Externalizable e
explica o que eu expliquei muito sucintamente acima.
Só uma dica, se você não tiver motivos muito fortes para usar
Externalizable use Serializable. É bem mais simples.

[ ]'s

PS. O seu null pointer exception é devido ao fato de vc não ter atualizado
os campos de this no seu método readExternal.

--
Emílio de Camargo Francesquini <emilio@objective.com.br>

"Você deve ser a mudança que você deseja ver no mundo" M. Gandhi




                                                                                                                                       
                      Emerson Luiz                                                                                                     
                      Navarro Tozette          To:                                                                                     
                      <emr@linux.ime.us        cc:       reverbel-sma@ime.usp.br                                                       
                      p.br>                    Subject:  Mais duvidas no ep1                                                           
                                                                                                                                       
                      09/10/2003 20:02                                                                                                 
                                                                                                                                       
                                                                                                                                       







Estou com duvidas com relacao aos metodos readExternal e writeExternal
que devem ser implementados pelo ICEInvokerProxy. A principio pensei
que as implementacoes abaixo resolvessem a questao:


 public void readExternal(final ObjectInput in)
       throws IOException, ClassNotFoundException
          {
                // remoteInvoker eh o ICE Proxy
                   remoteInvoker = (InvokerPrx) in.readObject();
                      }

                          public void writeExternal(final ObjectOutput out)
                                throws IOException
                                   {
                                                out.writeObject
(remoteInvoker);
                                                       }

Mas acho que o codigo acima eh o

responsavel por uma excecao que
estou recebendo do lado do cliente. Criei um programa de testes
que salva o ICE Proxy em um arquivo e depois o recupera e tenta
executa-lo, mas este programa lanca a mesma excecao.
Abaixo segue parte deste programa:

package org.jboss.invocation.ice;

// PROGRAMA DE TESTE:
public class InvokerI extends _InvokerDisp
{
 ........

   public void startService (String args[]) {

               ........

                   // salvando o ice proxy em um arquivo:
                       FileOutputStream fos = new FileOutputStream("c:
\\p.txt");
                               ObjectOutputStream oo = new
ObjectOutputStream (fos);
                                   // invoker eh o ICE Proxy (nome da sua
classe: InvokerI)
                                           oo.writeObject(invoker);
                                               oo.close();

                                                       // lendo o ice proxy
de um arquivo e
tentando executa-lo:
    FileInputStream fis = new FileInputStream("c:\\p.txt");
        ObjectInputStream oi = new ObjectInputStream (fis);
                 InvokerPrx inv = (InvokerPrx) oi.readObject();
                     oi.close();
                             // aqui lanca a excecao:
                                 System.out.println (">>" +
inv.getServerHostName()
);
  }
  }

  A excecao que esta sendo lancada eh:

  java.lang.NullPointerException
          at Ice.ObjectPrxHelper.__getDelegate(ObjectPrxHelper.java:689)
                       at
org.jboss.invocation.ice.InvokerPrxHelper.getServerHostName(InvokerPr
xHelper.java:35)
        at
org.jboss.invocation.ice.InvokerPrxHelper.getServerHostName(InvokerPr
xHelper.java:24)
        at org.jboss.invocation.ice.InvokerI.startService(InvokerI.java:88)
                     at
org.jboss.invocation.ice.Server3.main(Server3.java:10)