[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)