Reputation: 1147
I am getting the following error:
java.io.NotSerializableException: cscie55.project.AccountInfo
My AccountInfo class doesn't implement java.io.Serializable.
Do I have to make it Serializable?
If so, can someone help me with how to do it?
The following is part of my Client class:
public class Client extends UnicastRemoteObject implements ATMListener {
public Client() throws RemoteException {
}
private static AccountInfo getAccountInfo(int accountNumber, int pin) {
//AccountInfo accountInfo = new AccountInfo(accountNumber, pin);
return new AccountInfo(accountNumber, pin);
}
public static void main(String[] args) {
ATM atm;
try {
ATMFactory factory = (ATMFactory)Naming.lookup("atmfactory");
atm = factory.getATM();
Client clientListener = new Client();
atm.addListener(clientListener);
Client.testATM(atm);
} catch (MalformedURLException mue) {
mue.printStackTrace();
} catch (NotBoundException nbe) {
nbe.printStackTrace();
} catch (UnknownHostException uhe) {
uhe.printStackTrace();
} catch (RemoteException re) {
re.printStackTrace();
}
}
AccountInfo class:
public final class AccountInfo {
private final int accountNumber;
private final int pin;
public AccountInfo(int accountNumber, int pin) {
this.accountNumber = accountNumber;
this.pin = pin;
}
public int getAccountNumber() {
return accountNumber;
}
public int getPin() {
return pin;
}
}
Accounts are created in BankImpl class:
public class BankImpl extends UnicastRemoteObject implements Bank {
public static LinkedHashMap<Integer, Account> accounts;
public BankImpl() throws RemoteException {
accounts = new LinkedHashMap<Integer, Account>();
//constructor creates 3 accounts
Account account1 = new Account(0000001, 1234, 0, true, true, true);
Account account2 = new Account(0000002, 2345, 100, true, false, true);
Account account3 = new Account(0000003, 3456, 500, false, true, true);
//assigns all the accounts to a collection
accounts.put(0000001, account1);
accounts.put(0000002, account2);
accounts.put(0000003, account3);
}
Upvotes: 0
Views: 155
Reputation: 311028
My AccountInfo class doesn't implement java.io.Serializable. Do I have to serialize it?
No, but your question indicates that you are serializing it. I assume what you meant is 'do I have to make it Serializable?
. To which the answer is 'yes', if you intend to serialize it.
If it's being serialized and you don't want it serialized, make the reference to it transient
in the object that is being serialized.
NB a UnicastRemoteObject
is a server, not a client.
Upvotes: 1
Reputation: 11822
Make your AccountInfo class implement Serializable:
public final class AccountInfo implements Serializable {
You don't need to add any other methods, however to be safe you should define a serialVersionUID in the AccountInfo class:
private static final long serialVersionUID = insert_random_long_here;
You can use this site to generate a random serialVersionUID: http://random.hd.org/getBits.jsp?numBytes=0&type=svid
Upvotes: 3